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 . 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. 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. 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.