I. MỤC TIÊU:
1.Về kiến thức:
Học sinh sau tiết học sẽ:
Xây dựng chương trình có cấu trúc rẽ nhánh
Làm quen với các công cụ hiệu chỉnh chương trình
2.Về kỹ năng:
Rèn luyện cho học sinh các bước cơ bản nhất của lập trình nói chung và kĩ năng tổ chức chương trình có sử dụng cấu trúc rẽ nhánh nói riêng.
3. Về thái độ:
Tự giác, tích cực và chủ động trong thực hành.
Tạo lòng ham muốn giải được một số bài tập tính toán đơn giản bằng ngôn ngữ Pascal
Tuần: 09,10 - Tiết PPCT:16,17 Ngày dạy: BÀI TẬP VÀ THỰC HÀNH 2 I. MỤC TIÊU: 1.Về kiến thức: Học sinh sau tiết học sẽ: Xây dựng chương trình có cấu trúc rẽ nhánh Làm quen với các công cụ hiệu chỉnh chương trình 2.Về kỹ năng: Rèn luyện cho học sinh các bước cơ bản nhất của lập trình nói chung và kĩ năng tổ chức chương trình có sử dụng cấu trúc rẽ nhánh nói riêng. 3. Về thái độ: Tự giác, tích cực và chủ động trong thực hành. Tạo lòng ham muốn giải được một số bài tập tính toán đơn giản bằng ngôn ngữ Pascal II. CHUẨN BỊ: 1. Giáo viên: Sách giáo viên, máy vi tính đã cài đặt Turbo Pascal 2. Học sinh: Chuẩn bị bài BT&TH2 III. PHƯƠNG PHÁP: Phương pháp vấn đáp, kết hợp trực quan để học sinh tham gia tích cực vào việc xây dựng bài học. IV. TIẾN TRÌNH DẠY HỌC: 1. Ổn định tổ chức: kiểm diện 2. Kiểm tra bài cũ: trong quá trình giảng bài 3. Giảng bài mới: Hoạt động của thầy, trò Nội dung GV: Vừa qua chúng ta đã làm quen và tìm hiểu với cấu trúc rẽ nhánh, vậy em nào có thể nhắc lại Câu lệnh if-then được không? HS: Trả lời theo câu hỏi của giáo viên. GV: Nhắc lại đầy đủ cấu trúc của lệnh IF GV: Yêu cầu các em nhìn vào chương trinh trong sách và gõ vào máy. GV: Sau khi đánh xong yêu cầu các em lưu chương trình với tên PITAGO GV: Hướng dẫn chúng ta có thể lưu bằng cách Chọn File→ Save hay ấn phím F2 GV: Nhấn phím F7 để theo dõi quá trình thực hiện từng dòng lệnh của chương trình. Đến lệnh readln(a, b, c) thì giáo viên hướng dẫn học sinh cách nhập liên tiếp ba giá trị a= 3, b= 4, c= 5. Các giá trị cách nhau bằng dấu cách hoặc phím Enter. GV: Yêu cầu các em để ý giai đoạn rẽ nhánh của bài toán và nhập ba giá trị a, b, c khác để thấy rõ ràng hơn. HS: Thực hành và quan sát cấu trúc rẽ nhánh. GV: Sau khi đã quan sát quá trình rẽ nhánh in ra kết quả trên màn hình, vậy để sao biết giá trị a2, b2, c2 bây giờ? GV: Chúng ta chọn thẻ Debug để chọn mục Watch, sau khi cửa sổ Watch xuất hiện ta ấn phím Crtl+ F7 hoặc chon add watch trong Debug để add các giá trị a2, b2, c2 vào để xem kết quả. Vừa giảng vừa thực hành mẫu cho các em xem kỉ. GV: Nhấn F7 để theo dõi quá trình thực hiện từng dòng lệnh và xem giá trị của a2, b2, c2. GV: Chúng ta có thể kết hợp sử dụng tổ hợp phím Crtl+ F5 dùng để thay đổi kích thước cửa sổ hiện thời chứa con trỏ màn hình hay phím F6 để chuyển cửa sổ hiện thời để các cửa sổ hiện ra phần thông tin cần theo dõi không bị cửa sổ khác che lấp. GV: Yêu cầu học sinh nhập dữ liệu mới a= 700, b= 1000, c= 800 và tự làm các thao tác nhu trên. HS: Làm theo yêu cầu của giáo viên để nắm rõ các thao tác. Nhắc lại cấu trúc rẽ nhánh Cấu trúc If-then Dạng thiếu: Bước 1: Nhập a, b, c Bước 2: Tính a2, 2, c2 a2:= a; b2:= b; c2:= c; a2:= a2* a; b2:= b2* b; c2:= c2* c; Bước 3: Thuật giải IF a2= b2+ c2 or b2= a2+ c2 or c2= a2+ b2 Then “Ba so da nhap la bo so Pi-ta-go” ELSE “Ba so da nhap khong la bo so Pi-ta-go” Dạng đầy đủ: Xác định bài toán Input: nhập a, b, c Output: Xuất a, b, c có phải là bộ số Pi-ta-go hay không? Thuật toán: Thuật giải: Bước 1: Nhập a, b, c Bước 2: Tính a2, b2, c2 a2:= a; b2:= b; c2:= c; a2:= a2* a; b2:= b2* b; c2:= c2* c; Bước 3: Kiểm tra IF a2= b2+ c2 or b2= a2+ c2 or c2= a2+ b2 Then “Ba so da nhap la bo so Pi-ta-go” ELSE “Ba so da nhap khong la bo so Pi-ta-go” Bước 4: Kết thúc quá trình giải . Chương trình Pi-ta-go: program Pi_ta_go; uses crt; var a,b,c:integer; a2,b2,c2:longint; begin clrscr; write('nhap a, b, c: '); readln(a, b, c); a2:=a; b2:=b; c2:=c; a2:=a2*a; b2:=b2*b; c2:=c2*c; if ((a2=b2+c2)or(b2=a2+c2)or(c2=a2+b2)) then writeln('ba so nhap la so Pi_ta_go') else writeln('ba so nhap khong la so Pi_ta_go'); readln end. Lưu chương trình với tên PITAGO lên đĩa. Nhấn phím F7 để thực hiện từng câu lệnh chương trình, nhập các giá trị a=3,b=4,c= 5. Vào bảng chọn Debug mở cửa sổ hiệu chỉnh để xem giá trị của a2, b2, c2. Nhấn phím F7 để thực hiện những câu lệnh tính các giá trị nói trên, so sánh với kết quả a2=9, b2=16, c2=25. Quan sát quá trình rẽ nhánh. Lặp lại các bước trên với bộ dữ liệu: a= 700, b=1000, c=800. 4.Củng cố và luyện tập: Nhắc lại các kiến thức quan trọng cần nắm. 5.Hướng dẫn học sinh chuẩn bị bài ở nhà: Học bài cũ. BTVN : Yêu cầu các em về thực hành bài này khi thay dãy lệnh a2:= a; b2:= b; c2:= c; a2:= a2* a; b2:= b2* b; c2:= c2* c; bằng dãy lệnh: a2:= a* a; b2:= b* b; c2:= c* c; Xem kết quả có gì thay đổi với bộ dữ liệu a = 3, b = 4, c = 5 và a = 700, b = 1000, c = 800 không? Và tìm ra lời giải thích. Xem trước bài 11 : KIỂU MẢNG V. RÚT KINH NGHIỆM: + Chương trình SGK: + Học sinh: + Giáo viên: 1. Nội dung: 2. Phương pháp: 3. Tổ chức: Tuần: 10 - Tiết PPCT: 18 Ngày dạy: KIỂM TRA 1 TIẾTTuần: 11 - Tiết PPCT: 19 Ngày dạy: CHƯƠNG IV KIỂU DỮ LIỆU CÓ CẤU TRÚC Bài 11. KIỂU MẢNG I. MỤC TIÊU: 1. Về kiến thức: Học sinh sau tiết học sẽ: Hiểu đúng khái niệm mảng một chiều và hai chiều. Hiểu cách khai báo và truy cập đến các phần tử của mảng. Cài đặt được thuật toán của một số bài toán đơn giản với kiểu dữ liệu mảng một chiều. Thực hiện được khai báo mảng, truy cập, tính toán các phần tử của mảng. 2. Về kỹ năng: Cài đặt được thuật toán của một số bài toán đơn giản với kiểu dữ liệu mảng một chiều. 3. Về thái độ: Rèn khả năng tư duy khi giải quyết các vấn đề trong khoa học cũng như trong cuộc sống Tạo lòng ham muốn giải được một số bài tập tính toán đơn giản bằng ngôn ngữ Pascal II. CHUẨN BỊ: 1. Giáo viên: Sách giáo viên. 2. Học sinh: Xem trước bài 11 III. PHƯƠNG PHÁP: Phương pháp thuyết trình, kết hợp tạo tình huống có vấn đề IV. TIẾN TRÌNH DẠY HỌC: 1. Ổn định tổ chức: kiểm diện 2. Kiểm tra bài cũ: 3. Giảng bài mới: Hoạt động của thầy, trò Nội dung Đặt vấn đề: Xét các ví dụ sau: àĐể lưu trữ nhiệt độ các ngày trong một tuần, với các kiểu dữ liệu đã học ta có thể khai báo biến như sau: Var t1,t2,t3,t4,t5,t6,t7 àĐể lưu trữ chi tiêu của nhà hàng trong 1 tuần chúng ta cũng cò thể khai báo với 7 biến như trên. Quan sát, theo dõi và lắng nghe Câu hỏi: Cùng với hai ví dụ trên nếu muốn lưu trữ dữ liệu trong một tháng vậy các em có nhận xét gì về số biến được dùng? Hôm nay, chúng ta sẽ tìm hiểu kiểu dữ liệu mới: kiểu mảng Suy nghĩ và trả lời:ta phải dùng nhiều biến (30 biến) GV: Đưa ra ví dụ 1 trang 53 sách giáo khoa : nhập vào nhiệt độ trung bình của mỗi ngày trong 1 tuần, tính và in ra nhiệt độ trung bình của tuần và số lượng ngày trong tuần có nhiệt độ cao hơn nhiệt độ trung bình của tuần. Đi vào phân tích 2 chương trình để so sánh cách sử dụng kiểu dữ liệu mảng một chiều tiện lợi hơn. Quan sát, theo dõi, ghi chép Như vậy qua chương trình trên ta quan tâm đến : Ứng với chương trình ví dụ trên ta xét : Tên mảng một chiều:Nhietdo Số lượng phần tử trong mảng: N Kiểu dữ liệu của phần tử: real Cách khai báo biến mảng một chiều: var Nhietdo: Kmang1; Cách truy cập vào từng phần tử mảng:Nhietdo [i] Quan sát theo dõi và ghi chép Cùng với giáo viên đưa ra câu trả lời Từ ví dụ trên ta có cách khai báo biến mảng một chiều sau: Cách khai báo nào tiện hơn? Tùy theo bài mà chúng ta sẽ chọn một cách khai báo nhưng để giảm thiểu phức tap cho học sinh ta thường dùng cách 1 Thông thường học sinh trả lời Cách 1 Ví dụ ta có cấu trúc mảng B và chỉ số phần tử sau: Chỉ số 1 2 3 4 Giá trị 11 42 61 79 Phần tử thứ 3 có giá trị là B[3] = 61 Đưa ra một số ví dụ mảng một chiều và cách khai báo. 1. Giới thiệu về kiểu mảng một chiều: Mảng một chiều là dãy hữu hạn các phần tử cùng kiểu. Mảng được đặt tên và mỗi phần tử của nó có một chỉ số.Để mô tả mảng một chiều cần xác định kiểu của các phần tử và cách đánh số các phần tử của nó. VD1 : program Nhietdo_Tuan; var t1,t2,t3,t4,t5,t6,t7,tb:real; dem:integer begin writeln(‘nhap vao nhiet do cua 7 ngay); readln(t1,t2,t3,t4,t5,t6,t7); tb:=(t1+t2+t3+t4+t5+t6+t7)/7; dem:=0; if t1>tb then dem:=dem+1; if t2>tb then dem:=dem+1; if t3>tb then dem:=dem+1; if t4>tb then dem:=dem+1; if t5>tb then dem:=dem+1; if t6>tb then dem:=dem+1; if t7>tb then dem:=dem+1; writeln(‘nhiet do trung binh tuan : ’, tb:4:2); writeln(‘so ngay nhiet do cao hon trung binh : ‘,dem); readln end. Khi sử dụng kiểu dữ liệu kiểu mảng một chiều để mô tả dữ liệu chương trình được viết lại như sau với N ngày: program Nhietdo_Nngay; const Max = 366; (gia thiet N lon nhat la 366) type Kmang1 = array [1..Max] of real; var Nhietdo: Kmang1; dem,i,N:byte; Tong, trung_binh: real; begin writeln(‘nhap vao so ngay: ‘); readln(N); Tong:=0; for i:=1 to N do begin write (‘nhap nhiet do ngay ’,i, ‘: ‘ ); readln(Nhietdo [i]); Tong:= Tong + Nhietdo [i]; end; dem: = 0; Trung_binh:= Tong/N; For i: 1 to N do if Nhietdo [i] >Trungbinh then dem:= dem+1 writeln(‘nhiet do trung binh ’,N,’ngay: ’,Trung_binh:8:3); writeln(‘so ngay nhiet do cao hon trung binh : ‘,dem); readln end. Tên mảng một chiều Số lượng phần tử trong mảng Kiểu dữ liệu của phần tử Cách khai báo biến mảng một chiều Cách truy cập vào từng phần tử mảng 1a.Khai báo: Cách 1: khai báo trực tiếp biến mảng một chiều: var : array [kiểu chỉ số] of ; Cách 2: khai báo gián tiếp biến mảng qua kiểu mảng một chiều: type = array [kiểu chỉ số] of ; var :; trong đó: Kiểu chỉ số: thường là một đoạn số nguyên liên tục có dạng n1,,n2 với n1,n2 là các hằng hoặc biểu thức nguyên xác định chỉ số đầu và chỉ số cuối(n1<= n2); Kiểu phần tử: là kiểu của các phầ tử mảng Type: là từ khóa để khai báo biến, array là từ khóa để khai báo mảng Để truy cập vào phần tử mảng ta viết : [chỉ số] Ví dụ khai báo mảng một chiều: var ten_mang_1 : array [1..50] of real; hay: type mang_so_thuc = array [1..50] of real; var ten_mang_1 : mang_so_thuc ; Củng cố và luyện tập: - Mảng một chiều là dãy hữu hạn các phần tử cùng kiểu. - Khai báo mảng một chiều: * Trực tiếp: Var : array [kiểu chỉ số] of ; * Gián tiếp: Type = array [kiểu chỉ số] of ; Var : ; - Khi khai báo kiểu mảng cần xác định kích thước của mảng. Hướng dẫn học sinh chuẩn bị bài ở nhà: Học bài cũ. Xem tiếp các ví dụ về mảng 1 chiều. V. RÚT KINH NGHIỆM: + Chương trình SGK: + Học sinh: + Giáo viên: 1. Nội dung: 2. Phương pháp: 3. Tổ chức: Tuần: 11 - Tiết PPCT: 20 Ngày dạy: Bài 11. KIỂU MẢNG (tt) I. MỤC TIÊU: 1. Về kiến thức: Học sinh sau tiết học sẽ: Nắm được khái niệm mảng 1 chiều Hiểu cách khai báo và truy cập đến các phần tử của mảng 2. Về kỹ năng: Cài đặt được thuật toán của một số bài toán đơn giản với kiểu dữ liệu mảng một chiều Thực hiện được khai báo mảng, truy cập, tính toán các phần tử của mảng 3. Về thái độ: Có tư duy đúng đắn trong việc áp dụng mảng 1 chiều để giải các bài toán đơn giản Tạo lòng ham muốn giải được một số bài tập tính toán đơn giản bằng ngôn ngữ Pascal II. CHUẨN BỊ: 1. Giáo viên: Sách giáo viên. 2. Học sinh: Xem tiếp bài 11 III. PHƯƠNG PHÁP: Phương pháp thuyết trình, vấ ... êu nội dung bài toán. Trình Input và Output của bài toán. Cho HS xem thuật toán được chuẩn bị trên bảng phụ. HS: Nghe giảng. GV: Giảng giải thuật toán và chương trình. Đặt câu hỏi để HS hiểu rõ chương trình: 1/ Mô phỏng thuật toán với bộ dữ liệu: 6 1 5 3 7 8 10 7 12 4 2/ Trong thuật toán cần duyệt qua bao nhiêu lần? 3/ Mỗi lượt thực hiện trên đoạn nào của dãy số?4/ Câu lệnh nào trong chương trình thể hiện hai yêu cầu trên? 5/ Mỗi lượt duyệt thực hiện các thao tác gì? 6/ Câu lệnh nào thực hiện việc tráo đổi? HS: Nghe giảng, trả lời và ghi bài. GV: Nhận xét và bổ sung. Một số ví dụ : Ví dụ 1 : Tìm phần tử lớn nhất của một dãy số nguyên . Input : Số nguyên dương N và dãy số A1, A2, .., AN Output : Chỉ số và giá trị của số lớn nhất trong dãy Ý tưởng : Đặt số A1 là số lớn nhất (max) Cho i lặp từ 2 đến N, nếu A[i]> thì đổi max = A[i] vả lưu lại vị trí i . Chương trình như sau : Program timmax ; Uses crt ; var a : array[1..250] of integer ; n,i,max,csmax : Integer ; Begin clrscr ; Write('Nhap n = ') ; Readln(n) ; For i := 1 to n do Begin Write('a[',i,'] = ') ; readln(a[i]) ; End ; max := a[i] ; csmax := 1 ; For i := 2 to n do If a[i] > max then Begin max := a[i] ; csmax :=i ; End ; Writeln('Gia tri lon nhat : ',max) ; Writeln('chi so ptu lon nhat : ',csmax) ; Readln ; End . Ví dụ 2 : Sắp xếp dãy số nguyên theo bằng thuật toán tráo đổi . Input : Số nguyên dương N và dãy số A1, A2, , AN Output : Dãy A được sắp xếp theo thứ tự không giảm . Ý tưởng : Đổi để đưa số lớn nhất về vị trí cuối cùng . Làm tương tự đối với những số còn lại . Chương trình như sau : Program sapxep ; Uses crt ; var A : Array[1..250] of integer ; n,i,j,tg : Integer ; Begin clrscr ; Write('Nhap so phan tu mang n = ') ; Readln(n) ; For i := 1 to n do Begin Write('A[',i,'] = ') ; readln(A[i]) ; End ; For j := n downto 2 do Begin For i := 1 to j-1 do If A[i] > A[i+1] then Begin tg := A[i] ; A[i] := A[i+1] ; A[i+1] := tg ; End ; End ; Writeln('day sau khi sap xep : ') ; For i := 1 to n do write(a[i]:8) ; readln ; End . Writeln('chi so ptu lon nhat : ',csmax); readln ; End . Củng cố và luyện tập: - Thuật toán tráo đổi giá trị của hai phần tử, sử dụng biến trung gian để lưu giá trị tạm thời. Hướng dẫn học sinh chuẩn bị bài ở nhà: BTVN : Xem tiếp phần 2 MẢNG 2 CHIỀU. V. RÚT KINH NGHIỆM: + Chương trình SGK: + Học sinh: + Giáo viên: 1. Nội dung: 2. Phương pháp: 3. Tổ chức: Tuần: 12 - Tiết PPCT: 21 Ngày dạy: Bài 11. KIỂU MẢNG (tt) I. MỤC TIÊU: 1. Về kiến thức: Học sinh sau tiết học sẽ: Nắm được khái niệm mảng 1 chiều Hiểu cách khai báo và truy cập đến các phần tử của mảng 2. Về kỹ năng: Cài đặt được thuật toán của một số bài toán đơn giản với kiểu dữ liệu mảng một chiều Thực hiện được khai báo mảng, truy cập, tính toán các phần tử của mảng 3. Về thái độ: Có tư duy đúng đắn trong việc áp dụng mảng 1 chiều để giải các bài toán đơn giản Tạo lòng ham muốn giải được một số bài tập tính toán đơn giản bằng ngôn ngữ Pascal II. CHUẨN BỊ: 1. Giáo viên: Sách giáo viên. 2. Học sinh: Xem tiếp bài 11 III. PHƯƠNG PHÁP: Phương pháp thuyết trình, vấn đáp, kết hợp tạo tình huống có vấn đề IV. TIẾN TRÌNH DẠY HỌC: 1. Ổn định tổ chức: kiểm diện 2. Kiểm tra bài cũ: Trình bày cách khai báo gián tiếp kiểu dữ liệu mảng một chiều trong Turbo Pascal. Có khai báo sau, cho biết tên của kiểu dữ liệu mới, kiểu mảng đó có bao nhiêu phần tử, mỗi phần tử của mảng thuộc kiểu gì, và tên của các mảng sẽ dùng trong chương trình là gì? Type diem = array[1..15] of byte; Var A, mang: diem; 3. Giảng bài mới: Hoạt động của thầy, trò Nội dung Hoạt động 1: Trình bày ví dụ 3 SGK trang 58. GV: Nêu nội dung của ví dụ 3. Trình bày phần Input và Output. Yêu cầu HS quan sát thuật toán trong SGK. Giảng giải thuật toán. HS: Nghe giảng và ghi chép. GV: Đặt những câu hỏi để HS hiểu rõ thuật toán và chương trình: 1/ Cho ví dụ mô phỏng thuật toán với bộ dữ liệu: 2 4 5 6 9 21 22 30 31 33 2/ Điều kiện của lặp là gì? 3/ Biến logic Tim_thay có tác dụng gì? 4/ Thể hiện sự kiện chưa tìm thấy hoặc không gian tìm kiếm chưa rỗng bằng biểu thức logic nào? 5/ Biến Giua có tác dụng gì? 6/ Phạm vi tìm kiếm được xác định bởi những biến nào? HS: Nghe giảng, trả lời câu hỏi và ghi bài. Hoạt động 2: Ứng dụng. GV: Cho một bộ dữ liệu cụ thể và yêu cầu HS chạy chương trình với bộ dữ liệu đó. HS: Thực hiện theo yêu cầu. Một số ví dụ : Ví dụ 3 : Tìm kiếm nhị phân . Input: Dãy A là dãy tăng gồm N số nguyên dương A1, A2, , AN, số nguyên k. Output: Chỉ số i mà Ai = k hoặc thông báo “Khong tim thay” nếu không có số hạng nào của dãy A có giá trị bằng k. * Thuật toán: Bước 1: Nhập N, các số hạng A1, A2, , AN, và khóa k; Bước 2: Dau ß 1; Cuoi ß N; Bước 3: Bước 4: Nếu AGiua = k thì thông báo chỉ số Giua, rồi kết thúc; Bước 5: Nếu AGiua > k thì đặt Cuoi = Giua – 1 rồi chuyển đến bước 7; Bước 6: Dau ß Giua + 1; Bước 7: Nếu Dau > Cuoi thì thông báo dãy A không có số hạng có giá trị bằng k, rồi kết thúc; Bước 8: Quay lại bước 3. Chương trình như sau : Program sapxep ; Uses crt ; var A : Array[1..250] of integer ; n,i,k : Integer ; dau,cuoi,giua : Integer ; TK : boolean ; Begin clrscr ; Write('Nhap so ptu mang n = ') ; Readln(n) ; For i := 1 to n do Begin Write('A[',i,'] = ') ; readln(A[i]) ; End ; Write('nhap so can tim k : ') ; Readln(k); dau := 1 ; cuoi := n ; TK := false ; while (dau <= cuoi) and Not TK Do Begin giua := (dau+cuoi) div 2 ; If A[giua] = k then TK := true Else If a[giua]>k then cuoi := giua - 1 Else dau := giua + 1 ; End ; If TK then write('Chi so la : ',giua) else write(' Khong tim thay '); readln ; End . Củng cố và luyện tập: - Đối với thuật toán tìm kiếm nhị phân, mảng phải được sắp xếp có thứ tự (dãy tăng hoặc dãy giảm). Hướng dẫn học sinh chuẩn bị bài ở nhà: BTVN : Xem tiếp phần 2 MẢNG 2 CHIỀU. V. RÚT KINH NGHIỆM: + Chương trình SGK: + Học sinh: + Giáo viên: 1. Nội dung: 2. Phương pháp: 3. Tổ chức: Tuần: 12 - Tiết PPCT: 22 Ngày dạy: Bài 11. KIỂU MẢNG (tt) I. MỤC TIÊU: 1. Về kiến thức: Học sinh sau tiết học sẽ: Nắm được khái niệm mảng 2 chiều Hiểu cách khai báo và truy cập đến các phần tử của mảng 2. Về kỹ năng: Cài đặt được thuật toán của một số bài toán đơn giản với kiểu dữ liệu mảng 2chiều Thực hiện được khai báo mảng, truy cập, tính toán các phần tử của mảng 3. Về thái độ: Có tư duy đúng đắn trong việc áp dụng mảng 2 chiều để giải các bài toán đơn giản Tạo lòng ham muốn giải được một số bài tập tính toán đơn giản bằng ngôn ngữ Pascal II. CHUẨN BỊ: 1. Giáo viên: Sách giáo viên. 2. Học sinh: Xem tiếp bài 11 III. PHƯƠNG PHÁP: Phương pháp thuyết trình, vấn đáp, kết hợp tạo tình huống có vấn đề. IV. TIẾN TRÌNH DẠY HỌC: 1. Ổn định tổ chức: kiểm diện 2. Kiểm tra bài cũ: + Trình bày thao tác nhập, xuất mảng 1 chiều (5đ) + Viết đoạn chương trình dùng để nhập giá trị cho các phần tử của mảng A gồm các số nguyên dương A1, A2, , AN (5đ) 3. Giảng bài mới: Hoạt động của thầy, trò Nội dung GV : Quay lại ví dụ về lưu trữ dữ liệu dạng bảng để các em nhận ra nhu cầu phải sử dụng mảng 2 chiều trong lập trình . GV : Khai báo cách nào tiện lợi hơn (tương tự mảng 1 chiều) ? HS : Thường thì học sinh vẫn chọn cách 1 . GV : Tùy theo trường hợp cụ thể nhưng thường thì cách 1 hay được dùng hơn . GV : Khi khai báo mảng 2 chiều cần chú ý điều gì ? HS : Tìm câu trả lời, GV gợi ý để các em chỉ ra được chỉ số của mảng, số dòng, số cột và kiểu của mỗi phần tử trong mảng . GV : Gọi một số học sinh lên khai báo một số biến mảng một chiều theo yêu cầu của giáo viên . Minh họa bằng hình ảnh mảng 2 chiều và chỉ số các phần tử mảng hai chiều cũng như cách viết truy cập phần tử mảng . GV cho học sinh quan sát chương trình và giải thích các lệnh trong chương trình, chú ý đi sâu vào các lệnh lặp để các em nhận ra thường thì ta sử dụng vòng lặp for - do để duyệt qua các phần tử mảng . GV nên soạn sẵn chương trình và cho các em quan sát chương trình, và chạy thử chương trình trên máy để các em tiện theo dõi . Program Timkiem; Uses crt; var A : Array[1..100,1..100] of Integer; i,j,n,m : Byte ; k,d : integer ; Begin Clrscr ; Write(' Nhap so dong, so cot cua mang : ') ; Readln(m,n); For i := 1 to m do For j := 1 to n do Begin Write(' A[',i,',',j,'] = '); Readln(A[i,j]); End ; Writeln(' Mang vua nhap vao la : '); Writeln; For i := 1 to m do Begin For j := 1 to n do Write(a[i,j]:4) ; Writeln; Writeln; End; Write(' Nhap gia tri k : '); Readln(k) ; d := 0 ; For i := 1 to m do For j := 1 to n do If a[i,j] < k then Begin write('So nho hon ',k,' la '); write(a[i,j]:8); d := d+1 ; End ; If d = 0 then Write('Khong co phan tu nao nho hon ',k); readln; End . 2. Kiểu mảng 2 chiều : - Mảng hai chiều là một bảng các phần tử cùng kiểu . Với mảng hai chiều ta quan tâm đến : Tên kiểu mảng hai chiều . Số lượng phần tử của mỗi chiều trong mảng . Kiểu dữ liệu của phần tử . Cách khai báo biến mảng hai chiều . Cách truy cập vào từng phần tử của mảng . a> Khai báo mảng hai chiều - Trong ngôn ngữ Pascal, mảnh hai chiều được khai báo như sau : Cách 1 : Khai báo trực tiếp Var : : Array[kiểu chỉ số dòng, kiểu chỉ số cột] of ; Cách 2 : Khai báo gián tiếp thông qua khai báo kiểu mảng Type = Array[kiểu chỉ số dòng, kiểu chỉ số cột] of ; Var : ; Ví dụ : Khai báo biến mảng thông qua kiểu mảng : Type ArrayInteger = Array[1..10,1..15] of Integer ; ArrayReal=Array[1..50,1..100] of Real ; Var A : ArrayInteger ; B : ArrayReal ; Khai báo mảng trực tiếp : Var A : Array[1..10,1..15] og Integer ; B : Aarray[1..50,1..100] og Real ; Cách truy cập vào phần tử của mảng hai chiều : [chỉ số dòng, chỉ số cột] Ví dụ : A[1,3], B[23,66], b> Một số ví dụ : Ví dụ 1 : Chương trình sau đưa ra màn hình bảng cửu chương . Program cuuchuong; Uses crt ; var A : Array[1..9,1..9] of Integer ; i, j : Byte ; Begin Clrscr ; Writeln('Bang cuu chuong 1 -> 9 : '); Writeln ; For i := 1 to 9 do For j := 1 to 9 do A[i,j] := i*j ; For i := 1 to 9 do Begin For j := 1 to 9 do Write(a[i,j]:4); Writeln ; Writeln ; End ; Readln ; End . Ví dụ 2 : Chương trình sau nhập vào một mảng 2 chiều và số nguyên k, sau đó in ra các phần tử có giá trị nhỏ hơn k của mảng . Củng cố và luyện tập: - Khai báo mảng hai chiều: * Trực tiếp: Var : array [kiểu chỉ số dòng, kiểu chỉ số cột] of ; * Gián tiếp: Type = array [kiểu chỉ số dòng, kiểu chỉ số cột] of ; Var : ; - Việc thực hiện thao tác nào đó (nhập, xuất hay xử lí) lần lượt trên các phần tử của mảng hai chiều thường gắn với hai câu lệnh for – do lồng nhau. Hướng dẫn học sinh chuẩn bị bài ở nhà: Xem trước bài BÀI TẬP VÀ THỰC HÀNH 3. V. RÚT KINH NGHIỆM: + Chương trình SGK: + Học sinh: + Giáo viên: 1. Nội dung: 2. Phương pháp: 3. Tổ chức:
Tài liệu đính kèm: