Gi¸o ¸n Tin häc 11 Gi¸o viªn: §ç Vò HiÖp Tuần: 24 Tiết: 29 --------------------------------------------------------------------------------------------------------------------------- Ngày soạn: 29/2/2008 Ngày dạy: Lớp: Chương IV: Kiểu dữ liệu có cấu trúc Bài tập và thực hành 5 I. Mục đích, yêu cầu: 1. Kiến thức Củng cố cho học sinh những kiến thức hiểu biết về kiểu xâu; Cung cấp cho học sinh một vài thuật toán cơ bản thường gặp khi xử lý văn bản. 2. Kỹ năng Củng cố kỹ năng đã có khi lập trình với kiểu dữ liệu mảng; Rèn luyện kỹ năng diễn đạt thuật toán bằng chương trình sử dụng dữ liệu kiểu mảng; 3. Thái độ Rèn luyện cho học sinh ý thức cần có của người lập trình là viết chương trình với khối lượng tính toán ít nhất có thể được; Góp phần hình thành và rèn luyện tư duy lập trình, tác phong của người lập trình. II. Phương pháp - phương tiện dạy học: Thực hành, thực hiện minh họa trực quan, quan sát và hướng dẫn; Giáo viên chuẩn bị: Giáo án, phòng máy nối mạng LAN, cài đặt Turbo Pascal; Netop school; chương trình mẫu lưu trên máy server để HS tìm hiểu; máy chiếu; laptop; Học sinh chuẩn bị: Đọc trước nội dung bài, sách giáo khoa, vở ghi. III. NộI dung dạy – học: Nội dung bài giảng Hoạt động của thầy Hoạt động của trò Ổn định lớp; Ghi sổ đầu bài. Chào thầy. Cán bộ lớp báo sĩ số. Bài 1 a) Hãy tìm hiểu và chạy thử chương trình thực hiện thuật toán sắp xếp dãy số nguyên bằng thuật toán tráo đổi với các giá trị khác nhau của n dưới đây. Qua đó, nhận xét về thời gian chạy của chương trình. Const nmax=250; Type ArrInt=array[1 nmax] of integer; Var A: ArrInt; n, i, j, t: integer; Begin Randomize; Write(‘Nhap n= ‘); readln(n); For i:=1 to n do A[i]:= random(300) – random(300); For i:=1 to n do write(A[i]:5); Writeln; For j:=n downto 2 do For i:=1 to j – 1 do If A[i] > A[i+1] then Begin Quan sát, hướng dẫn HS khởi động máy tính. Quan sát, hướng dẫn HS khởi động TP. Nêu nội dung công việc trong tiết thực hành: Thực hiện bài 1. Yêu cầu HS thực hiện gõ chương trình theo mẫu trong câu a) trang 65-66_sgk. (HD HS có thể lấy chương trình xuống từ máy server). Quan sát và hướng dẫn. HD HS lưu chương trình. Quan sát và hướng dẫn HS nhận biết và sửa lỗi chương trình. Quan sát và hướng dẫn HS chạy thử chương trình. Khởi động máy tính. Khởi động TP. Gõ chương trình. Thực hiện lưu chương trình. Nhận biết và sử lỗi chương trình. Chạy thử chương trình và kiểm tra kết quả. Gi¸o ¸n Tin häc 11 Gi¸o viªn: §ç Vò HiÖp Nội dung bài giảng Hoạt động của thầy Hoạt động của trò t := A[i]; A[i] := A[i+1]; A[i+1] := t; End; Writeln(‘Day so da sap xep:‘); For i:=1 to n do Write(A[i]:6); Writeln; Readln End. Nhắc HS nhớ lưu chương trình trước khi sang câu b) Ấn F2. b) Khai báo thêm biến nguyên Dem và bổ sung vào chương trình những lệnh cần thiết để biến Dem tính số lần thực hiện tráo đổi trong thuật toán. Đưa kết quả tìm được ra màn hình. Hướng dẫn: Const nmax=250; Type ArrInt=array[1 nmax] of integer; Var A: ArrInt; Dem, n, i, j, t: integer; Begin Randomize; Write(‘Nhap n= ‘); readln(n); For i:=1 to n do A[i]:= random(300) – random(300); For i:=1 to n do write(A[i]:5); Writeln; Dem := 0; For j:=n downto 2 do For i:=1 to j – 1 do If A[i] > A[i+1] then Begin t := A[i]; A[i] := A[i+1]; A[i+1] := t; Dem := Dem + 1; End; Writeln(‘So lan trao doi:‘,Dem); Writeln(‘Day so da sap xep:‘); For i:=1 to n do Write(A[i]:6); Writeln; Readln End. HD học sinh lưu chương trình ở câu a) với tên khác sau đó thực hiện câu theo yêu cầu ở câu b) Gọi HS nêu các vị trí đặt các câu lệnh tương ứng vào chương trình để có được CT theo đề ra? Nhận xét, chốt lại phương án đúng kết hợp giải thích để HS hiểu. Quan sát và hướng dẫn HS thực hiện. Yêu cầu HS cho biết: Cần sửa đổi câu lệnh nào để có chương trình sắp xếp các phần tử theo thứ tự không tăng? Kết luận: Sửa điều kiện: A[i] > A[i+1] thành điều kiện: A[i] < A[i+1] Hãy sửa chương trình theo cách trên và chạy thử để kiểm tra kết quả. Quan sát và hướng dẫn HS thực hiện. Chú ý, quan sát, lắng nghe. Xung phong trả lời. Nhận xét, bổ sung. Chú ý lắng nghe. Thực hiện sửa chương trình theo đề ra và chạy thử CT. Lắng nghe, trả lời câu hỏi. Chú ý lắng nghe. Thực hiện yêu cầu của giáo viên. Chạy thử CT, kiểm tra kết quả. Ấn F2 để lưu CT; Ấn tổ hợp Alt + X. IV. Củng cố: Những câu lệnh nào thực hiện một lần tráo đổi giá trị của hai phần tử liền kề? Ý nghĩa của lệnh gán: A[i] := random(300) – random(300); V. Dặn dò: Xem trước nội dung Bài 2 trang 66 – 67_sgk; Tiết sau tiếp tục thực hành bài này. VI. Rút kinh nghiệm: . . Gi¸o ¸n Tin häc 11 Gi¸o viªn: §ç Vò HiÖp Tuần: 22 Tiết: 26 --------------------------------------------------------------------------------------------------------------------------- Ngày soạn: 17/2/2008 Ngày dạy: Lớp: Chương IV: Kiểu dữ liệu có cấu trúc Bài tập và thực hành 4 (tt) I. Mục đích, yêu cầu: 1. Kiến thức Củng cố cho học sinh những kiến thức đã có khi lập trình với kiểu dữ liệu mảng; Củng có thuật toán sắp xếp các phần tử của một dãy bằng tráo đổi; 2. Kỹ năng Củng cố kỹ năng đã có khi lập trình với kiểu dữ liệu mảng; Rèn luyện kỹ năng diễn đạt thuật toán bằng chương trình sử dụng dữ liệu kiểu mảng; 3. Thái độ Rèn luyện cho học sinh ý thức cần có của người lập trình là viết chương trình với khối lượng tính toán ít nhất có thể được; Góp phần hình thành và rèn luyện tư duy lập trình, tác phong của người lập trình. II. Phương pháp - phương tiện dạy học: Thực hành, thực hiện minh họa trực quan, quan sát và hướng dẫn; Giáo viên chuẩn bị: Giáo án, phòng máy nối mạng LAN, cài đặt Turbo Pascal; Netop school; chương trình mẫu lưu trên máy server để HS tìm hiểu; máy chiếu; laptop; Học sinh chuẩn bị: Đọc trước nội dung bài, sách giáo khoa, vở ghi. III. NộI dung dạy – học: Nội dung bài giảng Hoạt động của thầy Hoạt động của trò Ổn định lớp; Ghi sổ đầu bài. Chào thầy. Cán bộ lớp báo sĩ số. Bài 2 Hãy đọc và tìm hiểu những phân tích để viét chương trình giải bài toán: Cho mảng A gồm n phần tử. Hãy viết chương trình tạo mảng B[1 n], trong đó B[i] là tồng của i phần tử đầu tiên của A. Chương trình: Const nmax=100; Type Mang1=array[1 nmax] of integer; Var A, B: Mang1; n, i, j: integer; Begin Randomize; Write(‘Nhap n= ‘); readln(n); For i:=1 to n do A[i]:= random(300) – random(300); For i:=1 to n do write(A[i]:5); Writeln; For i:=1 to n do Begin Quan sát, hướng dẫn HS khởi động máy tính. Quan sát, hướng dẫn HS khởi động TP. Nêu nội dung công việc trong tiết thực hành: Thực hiện bài 2. Yêu cầu HS thực hiện gõ chương trình theo mẫu trang 66-67_sgk. (HD HS có thể lấy chương trình xuống từ máy server). Quan sát và hướng dẫn. HD HS lưu chương trình. Quan sát và hướng dẫn HS nhận biết và sửa lỗi chương trình. Quan sát và hướng dẫn HS chạy thử chương trình. Khởi động máy tính. Khởi động TP. Gõ chương trình. Thực hiện lưu chương trình. Nhận biết và sử lỗi chương trình. Chạy thử chương trình và kiểm tra kết quả. Gi¸o ¸n Tin häc 11 Gi¸o viªn: §ç Vò HiÖp Nội dung bài giảng Hoạt động của thầy Hoạt động của trò B[i] := 0; For j:=1 to i do B[i] := B[i] + A[j]; End; For i:=1 to n do Write(B[i]:6); Readln End. Nhắc HS nhớ lưu chương trình trước khi sang câu b) Ấn F2. Sửa lại chương trình sao cho thực hiện càng ít phép toán càng tốt. Hướng dẫn: Áp dụng hệ thức: B[1] = A[1] B[i] = B[i-1] + A[i]; với 1 < i ≤ n. Như vậy, ta có thể thay đoạn lệnh: For i:=1 to n do Begin B[i] := 0; For j:=1 to i do B[i] := B[i] + A[j]; End; Bằng đoạn lệnh: B[1] := A[1]; For i:=2 to n do B[i] := B[i-1] + A[i]; HD học sinh lưu chương trình trên với tên khác sau đó thực hiện sửa đổi chương trình theo hướng dẫn. Quan sát và hướng dẫn HS thực hiện. Quan sát và hướng dẫn HS thực hiện. Nhờ đó, ta có thể bỏ bớt một biến j trong chương trình, chương trình ngắn gọn hơn; Đặc biệt, máy tính chỉ phải thực hiện n – 1 phép toán cộng thay vì phải thực hiện n(n+1)/2 phép cộng. Tiết kiệm được một lượng tính toán đáng kể. Chú ý, quan sát, lắng nghe. Thực hiện sửa chương trình theo hướng dẫn. Chạy thử CT, kiểm tra kết quả. Quan sát thời gian thực hiện chương trình. Chú ý lắng nghe. Ấn F2 để lưu CT; Ấn tổ hợp Alt + X. IV. Củng cố: Nêu các lệnh thực hiện tạo mảng B[1 n] từ mảng A gồm n phần tử sao cho B[i] là tổng của i phần tử đầu tiên của A? Cần xây dựng chương trình sao cho khối lượng tính toán là ít nhất có thể được. V. Dặn dò: Chuẩn bị bài mới: §12. Kiểu xâu VI. Rút kinh nghiệm: . . . 24 Tiết: 29 --------------------------------------------------------------------------------------------------------------------------- Ngày soạn: 29/ 2/2008. Ý nghĩa của lệnh gán: A[i] := random (300 ) – random (300 ); V. Dặn dò: Xem trước nội dung Bài 2 trang 66 – 67_sgk; Tiết sau tiếp tục thực hành bài này.