I. Mục đích – yêu cầu
1. Kiến thức
- Củng cố thêm về cấu trúc rẽ nhánh và lặp.
- Luyện tập cấu trúc lặp, chú ý với bài toán tìm tổng của dãy số.
2. Kỹ năng
Sau khi đã chuẩn bị bài tập ở nhà, học sinh cần:
- Nắm đựơc cấu trúc của câu lệnh rẽ nhánh, và lặp, biết được cách thức hoạt động của từng cấu trúc.
- Biết một số thao tác hiệu chỉnh chương trình, và một số chú ý về các vòng lặp vô hạn.
- Biết cách viết một chương trình hoàn chỉnh và khoa học, cách kiểm tra một chương trình cụ thể thông qua bộ test thử.
BàI TậP Và THựC HàNH 2 Ngày soạn: Ngày giảng: .. Người soạn: .. I. Mục đích – yêu cầu 1. Kiến thức - Củng cố thêm về cấu trúc rẽ nhánh và lặp. - Luyện tập cấu trúc lặp, chú ý với bài toán tìm tổng của dãy số. 2. Kỹ năng Sau khi đã chuẩn bị bài tập ở nhà, học sinh cần: - Nắm đựơc cấu trúc của câu lệnh rẽ nhánh, và lặp, biết được cách thức hoạt động của từng cấu trúc. - Biết một số thao tác hiệu chỉnh chương trình, và một số chú ý về các vòng lặp vô hạn. - Biết cách viết một chương trình hoàn chỉnh và khoa học, cách kiểm tra một chương trình cụ thể thông qua bộ test thử. III. Chuẩn bị của Giáo viên và Học sinh II. Hoạt động dạy và học 1. ổn định lớp - Kiểm tra sĩ số: Tổng số: Vắng: Có phép: Không phép: 2. Triển khai bài mới Hoạt động của giáo viên Hoạt động của học sinh I. Tóm tắt lí thuyết 1. Câu lệnh rẽ nhánh a. Dạng thiếu: If Then ; b. Dạng đủ: If Then Else ; 2. Cấu trúc lặp a. Lặp với số lần chưa biết trước While Do ; b. Lặp với số lần biết trước Dạng tiến: For := To Do ; Dạng lùi: For := DownTo Do ; Chữa bài tập: - Lắng nghe và ghi bài Bài 1(Sgk_Tr50): Gọi một học sinh đọc đầu bài và trả lời câu hỏi đó? Đề bài: Hãy cho biết sự giống và khác nhau của hai dạng câu lệnh Ifthen. - Giống nhau: cùng là tổ chức rẽ nhánh, khi gặp một điều kiện nào đó thì lựa chọn thực hiện thao tác thích hợp. - Khác nhau: trong câu lệnh Ifthen dạng thiếu, nếu điều kiện không đúng thì thoát khỏi tổ chức rẽ nhánh, và thực hiện câu lệnh tiếp theo của chương trình; còn trong câu lệnh Ifthen dạng đủ, nếu điều kiện không đúng thì thực hiện lệnh thứ hai, sau đó mới thoát khỏi tổ chức rẽ nhánh và thực hiện câu lệnh tiếp theo của chương trình. - Nhận xét bài làm của học sinh sau đó nếu thấy chỉ có một ít học sinh làm đúng thì củng cố lại; Bài 2(Sgk_Tr50): Gọi một học sinh đọc đầu bài và trả lời câu hỏi đó? Đề bài: Câu lệnh ghép là gì? Tại sao phải có câu lệnh ghép? - Lấy một ví dụ cụ thể về việc dùng câu lệnh ghép cho học sinh hình dung được trực quan hơn: VD: Chương trình tính nghiệm của phương trình bậc 2 TL: Câu lệnh ghép là một câu lệnh được hình thành từ nhiều câu lệnh thành phần. Câu lệnh ghép nhằm thực hiện thao tác gồm nhiều thao tác thành phần. Mỗi thao tác thành phần ứng với một câu lệnh thành phần hoặc câu lệnh ghép khác. Về mặt ngôn ngữ lập trình, câu lệnh ghép là một trong các yếu tố để tạo khả năng chương trình có cấu trúc. Bài 3(Sgk_Tr51): Có thể dùng câu lệnh Whiledo để thay cho câu lệnh fordo được không? Nếu được, hãy thực hiện điều đó với chương trình Tong_1a. - Với thuật toán Tong_1a câu lệnh fordo được thể hiện ở bước nào và câu lệnh đó như thế nào? - Thể hiện ở bước 2 và 3. - Câu lệnh: For N:=1 to 100 do S :=S +1.0/(a+N); - Câu lệnh trên thể hiện vòng lặp với số lần biết trước, cụ thể là 100 lần (câu lệnh fordo dạng tiến). Vậy ta có thể dùng câu lệnh Whiledo thay cho đoạn câu lệnh Fordo trên được không? Đoạn chương trình được sau khi thay thế như thế nào? - Có thể thay thế đoạn chương trình chứa câu lệnh fordo (dạng tiến) bằng đoạn chương trình chứa câu lệnh Whiledo. Đoạn chương trình như sau i := 1; While i<100 do Begin S :=S +1.0/(a+N); i := i + 1; end; Bài 4(Sgk_Tr51): Viết câu lệnh rẽ nhánh tính: a) b) - Sử dụng câu lệnh rẽ nhánh dạng nào? a) Câu lệnh rẽ nhánh dạng đủ: if (sqr(x)+sqr(y))<=1 then z:=sqr(x)+sqr(y) else if y>=x then z:=x+y else z:=0.5; b) Câu lệnh rẽ nhánh dạng đủ: if (sqr(x-a)+sqr(y-b))<=sqr(r) then z:=abs(x) + abs(y) else z:= x+y; - Thể hiện câu lệnh đó? - Gọi 2 học sinh lên bảng thể hiện 2 câu lệnh tương ứng với phần a) và b). - Sử dụng câu lệnh rẽ nhánh dạng thiếu: a) If (sqr(x)+sqr(y)) <=1 then z:=sqr(x)+Sqr(y); If (sqr(x)+sqr(y)>1) and (y>=x) then z:= x+y; If (sqr(x)+sqr(y)>1) and (y<x) then z:=0.5; b) if (sqr(x-a)+sqr(y-b))<=sqr(r) then z:=abs(x) + abs(y); if (sqr(x-a)+sqr(y-b))>sqr(r) then z:= x+y; - Nhận xét bài của hai em. Để từ đó chỉ ra đựơc những lỗi hay mắc phải của HS. Lưu ý: Lỗi mà HS hay mắc phải là: thiếu ngoặc ở trong từng vế của phép toán đặt trong câu lệnh Ifthen. - Gọi một em HS nhận xét để nhằm nêu bật được tiện lợi khi dùng lệnh dạng đủ và lệnh dạng thiếu với bài này và một số bài khác. Bài 5(Sgk_Tr51): Lập trình tính: a) b) cho đến khi < 2 x 10-6 Đưa giá trị e(n) ra màn hình. Gợi ý: a) - Xác định câu lệnh ở đây là câu lệnh gì? Số lần thực hiện của câu lệnh đó? - Viết câu lệnh đó - Câu lệnh lặp biết trước số lần lặp. - Lặp với số lần n=50. - Câu lệnh: For n:=1 to 50 do Y:=Y+n/(n+1); - Gọi học sinh lên bảng viết chương trình hoàn chỉnh. Program Bai5_a; Var Y: real; n: byte; Begin Y:=0; For n:=1 to 50 do Y:=Y+n/(n+1); Writeln(‘Ket qua:’,Y:14:6); Readln End. b) Điều kiện dừng củ bài toán < 2 x 10-6 hay <2*1E-6 - Xác định câu lệnh ở đây là câu lệnh gì? Số lần thực hiện của câu lệnh đó? - Viết câu lệnh đó - Câu lệnh lặp chưa biết trước số lần - Sử dụng thêm biến s để lưu trữ giá trị - Câu lệnh: While s>=2*1E-6 do Begin n:=n+1; s:=s*(1/n); e:=e+s; end; - Gọi học sinh lên bảng viết chương trình. Program Bai5_b; Var n : longint; e, s : real; Begin s := 1/2; n := 2; e := 2 + s; While s>=2*1E-6 do Begin n:=n+1; s:=s*(1/n); e:=e+s; end; Writeln(‘Gia tri e(n) la:’,e:10:6); Readln End. - Nhận xét và hoàn thiện chương trình của học sinh. Bài 6(Sgk_Tr51): Lập trình giải bài toán cổ: Vừa gà vừa chó. Bó lại cho tròn. Ba mươi sáu con. Một trăm chân chẵn. Hỏi có bao nhiêu con mỗi loại? - Xác định Input, Output của bài toán - Input: tổng số gà, chó; tổng số chân - Output: số gà, số chó. - Vì gà + chó = 36 con nên biết số gà sẽ suy ra được số chó. - Gọi số gà là x -> số chó sẽ là 36–x, số chân là: 2x+4(36-x) - Ta cần tìm những giá trị x thoả mãn 2x+4(36-x)=100 - Vậy x có thể nhận những giá trị nào? Để thử điều kiện của bài toán có thể sử dụng câu lệnh nào để biểu diễn được? - TL: x có thể nhận các giá trị từ 1 đến 35, hữu hạn nên ta có thể sử dụng cấu trúc lặp xác định trước số lần để thử từng trường hợp của x. - Câu lệnh: For x:=1 to 35 do If 2*x+4*(36-x)=100 then Writeln(‘So ga:’,x,’So cho:’,36-x); - Gọi học sinh lên bảng viết chương trình hoàn chỉnh. Program Bai6; Var x:byte; Begin For x:=1 to 35 do If 2*x+4*(36-x)=100 then Writeln(‘So ga:’,x,’So cho:’,36-x); Readln End. - Trường hợp ngược lại nếu ta đặt số chó là x, vậy có tìm được kết quả không? Vòng lặp ở đây thực hiện bao nhiêu lần? - Trường hợp nếu ta đặt số chó là x thì số gà sẽ là 36-x. Hoàn toàn thu được kết quả như trên. Vì chó có 4 chân nên x có thể nhận các giá trị từ 1 đến 24. Vòng lặp giảm đi 10 lần - Vậy sử dụng cách nào tối ưu? - Nên sử dụng cách đặt số chó là x sẽ tối ưu vì giảm được số lần lặp, tiết kiệm thời gian và bộ nhớ. IV. Củng cố và dặn dò Học sinh - Giáo viên nhận xét khâu chuẩn bị bài và học bài của các em và nhấn mạnh những điểm mà các em hay m -Về nhà các em làm lại cho hoàn chỉnh các chương trình đã chữa và chuẩn bị các bài sau: bài 7, 8 trang 51.
Tài liệu đính kèm: