Tải bản đầy đủ (.doc) (5 trang)

Bài 11: Kiểu mảng (Tiết 2)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (90.2 KB, 5 trang )

Ngy son 18/12/2009
Ngy ging: 20/12/2009
Tit theo PPCT: 19
Kiểu mảng (tiết 2)
I. Mục tiêu
1. Kiến thức.
- Hiểu đợc thêm một kiểu dữ liệu mới là kiểu mảng một chiều.
- Biết đợc cách khai báo kiểu mảng một chiều, cách khai báo biến, tham chiếu đến từng
phần tử của mảng.
2. Kĩ năng.
- Có đợc kỹ năng sử dụng đúng biến mảng, cách khai báo kiểu, biến, tham chiếu đến
từng phần tử của mảng một chiều để giải quyết một số bài toán cụ thể .
II. Đồ dùng dạy học
1. Chuẩn bị của giáo viên:
- Máy vi tính, máy chiếu Projector, sách giáo khoa,
2. Chuẩn bị của học sinh: Sách giáo khoa.
III. Tiến trình bài học
1. ổn định tổ chức lớp
- Lớp:
- Sĩ số:
- Lí do vắng:
2. Kiểm tra bài cũ
3. Nội dung
Hoạt động của giáo viên học sinh Nội dung

? Xác định Input. Output, ý tởng của bài
toán?

b, Một số ví dụ
Ví dụ 1: Bài toán tìm max.
Cho dãy A gồm n sn dơng ( n<=250) từ


a1, a2, , an, mỗi pt có gt không quá 500.
Tìm phần tử lớn nhất của dãy sn, nếu có
nhiều pt chỉ cần đa ra một pt.
- Input: cho n và các sn a1, a2, a3, , an.
- Output: Đa ra giá trị lớn nhất trong dãy.
- Nêu ý tởng: Dùng một mảng một chiều a
gồm n số mỗi số có kiểu dữ liệu là số
nguyên. Sử dụng một biến trung gian max.
Ban đầu max:=a[1], so sánh max với các pt
a[i] i:1->n, nếu max <a[i] thì max:= a[i].
Hết dãy đa ra gt max.

- Thuật toán:
1
? Xác định các câu lệnh tơng ứng các bớc
trong thuật toán?
? Tác dụng của câu lệnh For thứ nhất?
- Thể hiện nhiệm vụ trong bớc 1 của thuật
toán, dùng để nhập các phần tử mảng.
? Tác dụng của câu lệnh For thứ hai?
- Thể hiện vòng lặp (gồm bớc 3,4 trong
thuật toán) dùng để duyệt tuần tự các phần
tử mảng lọc lấy phần tử tạm thời lớn nhất
(trong các phần tử đã duyệt qua).
B1. Nhập n, dãy a1, a2, an.
B2. max <- a1, i <-1;
B3. Nếu i >n thì đa ra gt max rồi kết thúc.
B4. Nếu max < ai thì max <- ai
B5. i <- i + 1 rồi quay lại B3.
- Chơng trình

Program timmax;
Const nmax= 250;
Type
Mang = array[1 nmax] of integer;
Var
i, n, max, csmax:integer; a: mang;
Begin
Writeln(nhap so luong pt cua day n=);
Readln(n);
For i:=1 to n do
Begin
Writeln(nhap pt thu , i,=);
Readln(a[i]);
End;
Max:=a[1]; csmax:=1;
For i:=2 to n do
If a[i] > max then
Begin
Max:=a[i]; Csmax:=i;
End;
Writeln( gia tri cua pt lon nhat la:,
max);
Writeln( Chi so cua pt lon nhat la:,
csmax );
Readln;
End.
Ví dụ 2: Bài toán sắp xếp.
Cho dãy A gồm n sn dơng (n <=250) từ
a1, a2, , an, mỗi pt có gt không quá 500.
Sắp xếp lại dãy A thành dãy không giảm.

2
? Xác định bài toán?
- Nêu ý tởng giải quyết bài toán.
- Xác định input, output
- Nêu thuật toán

- Input: sn n, dãy A: a1, a2, , an.
- Output: dãy A đã sắp xếp
- ý tởng: So sánh từng cặp phần tử liền kề,
bắt đầu từ cặp đầu tiên đến cặp cuối cùng,
nếu ai > a(i+1) với i:1-> n-1 thì tráo đổi cho
nhau, quá trình đợc lặp lại đến mọi cặp pt đã
thoả mãn ai <=a(i+1)
- Thuật toán:
B1. Nhập n, a1, a2, ,an.
B2. m <- n.
B3. Nếu m < 2 thì đa ra dãy A đã đợc sx rồi
kết thúc.
B4. m<- m-1, i <- 0.
B5. i <- i + 1.
B6. Nếu i >m thì quay lại B3.
B7. Nếu a
i
> a
i+1
thì tráo đổi a
i
và a
i+1
cho

nhau.
B8. Quay lại B5.
- Chơng trình:
Program traodoi;
Const nmax= 250;
Type
Mang = array[1 nmax] of integer;
Var
i, n, m: byte;
tg:integer;
a: mang;
Begin
Writeln(nhap so luong pt cua day n=);
Readln(n);
For i:=1 to n do
Begin
Writeln(nhap pt thu , i,=);
Readln(a[i]);
End;
For m:=n downto 2 do
For i:=1 to m-1 do
If a[i] > a[i+1] then
Begin
Tg:=a[i]; a[i]:=a[i+1]; a[i+1]:=
tg;
End;
Writeln( Day da sx la:);
3

? Yêu cầu HS:

- Xác định input, output
- Nêu thuật toán
Gợi ý cho học sinh viết chơng trình.
For i:=1 to n do Writeln(a[i]:4 );
Readln;
End.
Ví dụ 3. Bài toán tìm kiếm
Cho dãy A là dãy tăng gồm n sn dơng
a1, a2, , an và số nguyên k. Tìm chỉ số i
mà ai = k hoặc thông báo: không tìm thấy
nếu không có số hạng nào của dãy A có giá
trị bằng k.
- Input: số n, k, và dãy a1, a2, , an đã sx
tăng dần.
- Output: TB chỉ số i mà ai = k hoặc TB
khong tim thay nếu không có pt nào trong
dãy bằng k.
- Nêu thuật toán
B1. Nhập n, khoá k, dãy A: a1, a2, , an
B2. Dau <- 1, cuoi <- n
B3. giua <- [(dau + cuoi)/2].
B4. Nếu a
giua
= k thì TB chỉ số giua rồi kết
thúc
B5. Nếu a
giua
>k thì đặt cuoi <- giua - 1
nguoc lại dau <-giua + 1.
B6. Nếu dau > cuoi thì TB day A không có

số hạng có giá trị bằng k rồi kết thúc.
B7. Quay lại B3.
- Viết chơng trình
Program timkiemnhiphan;
Const nmax= 250;
Type
Mang = array[1 nmax] of integer;
Var
i, n, dau, cuoi, giua: byte;
k :integer;
a: mang;
timthay: boolean;
Begin
Writeln(nhap so luong pt cua day n=);
Readln(n);
For i:=1 to n do
Begin
Writeln(nhap pt thu , i,=);
Readln(a[i]);
End;
Writeln(nhap sn k=); Readln(k);
4
Dau:= 1; cuoi:=n; timthay:= false;
While (dau <=cuoi) and not(timthay) do
Begin
Giua:= (dau + cuoi) div 2;
If a[giua] = k then timthay:= true
Else
If a[giua] > k then cuoi := giua -1
Else dau:= giua + 1;

End;
If tim thay then Writeln( chi so tim
duoc la:,giua)
Else Writeln(khong tim thay );
Readln;
End.
IV- Củng cố bài: Qua tiết học này các em cần nắm đợc 3 bài toán sau:
Bài toán tìm max.
Bài toán sắp xếp.
Bài toán tìm kiếm nhị phân
(Nêu ý tởng để giải bài toán, Xác định Input và Output, Nêu thuật toán để giải bài
toán, xác định các biến cần khai báo trong chơng trình. Viết chơng trình).
V- C âu hỏi và bài tập về nhà
- Về nhà viết lại chơng trình của 3 bài toán trên.
- Làm các bài tập số 7 sách giáo khoa trang 79.
- Xem trớc nội dung mảng hai chiều sách giáo khoa trang 59-62.
5

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×