Bài10CấuTrúcLặp Tuần : 6,7 Ngày soạn : 10/09/07 Tiết : 12,13,14 §10. CẤUTRÚCLẶP I/- Mục đích – yêu cầu : Về kiến thức : + Hiểu nhu cầu của cấutrúclặp trong biểu diễn thuật toán. + Hiểu cấutrúclặp với số lần biết trước, cấutrúclặp kiểm tra điều kiện trước. + Biết cách vận dụng đúng đắn từng loại cấutrúclặp vào tình huống cụ thể. Về kỹ năng : + Mô tả được thuật toán của một số bài toán đơn giản có sử dụng lệnh lặp. + Viết đúng các lệnh lặp kiểm tra điều kiện trước, lệnh lặp với số lần đònh trước. + Viết được thuật toán giải một số bài toán đơn giản. Về thái độ : + Tạo sự ham muốn cho HS giải toán bằng NNLT trên máy tính. + Tiếp tục rèn luyện các phẩm chất cần thiết của người lập trình như xem xét giải quyết vấn đề 1 cách cẩn thận, chu đáo, có sáng tạo, không thoả mãn với kết quả ban đầu đạt được Điều này thể hiện trong suốt quá trình từ khi phân tích bài toán đến khi lựa chọn dữ liệu, cấutrúc điều khiển thực hiện thuật toán, viết chương trình và cuối cùng là dòch, sửa lỗi, kiểm thử, cải tiến thích ứng với các bộ dữ liệu và trạng thái bài toán khác nhau. II/- Chuẩn bò : GV : + Phải có giáo án và các đồ dùng dạy học liên quan đến bài dạy. + Cần nêu rõ ý nghóa của cấutrúclặp ( thông qua ví dụ trong SGK 42). + Chuẩn bò minh hoạ Tong_1a và Tong_1b trên giấy khổ lớn. HS : + Đọc trước sách giáo khoa ở nhà. PP : + Diễn giảng ,phát vấn và các hình vẽ trực quan (nếu có ). III/- Hoạt động dạy học : 1. Ổn đònh lớp : Kiểm tra só số (1’) 2. Kiểm tra bài cũ : (4’) ? Hãy viết cú pháp của câu lệnh rẽ nhánh dạng thiếu và dạng đủ đồng thời nêu quá trình thực hiện lệnh ? 3. Nội dung bài mới : TG Hoạt Động Của GV Hoạt Động Của HS Nội Dung Bài Tiết 12 + Đặt vấn đề : Cấutrúclặp là điều khiển thực hiện công việc lặp đi lặp lại khi chưa đủ số lần lặp hoặc khi 1 điều kiện nào đó còn đúng. Sau đây ta xét khái Tin Học 11 Trang 1 Bài 10CấuTrúcLặp niệm lặp. Vd 1 : VCT tính điểm cho HS 1 lớp (giả sử lớp có 50 HS) sẽ phải lặp lại 1 số thao tác như sau với mỗi HS : + Nhập họ tên HS (hoặc SBD) + Nhập điểm các môn. + Tính tổng điểm hoặc tính điểm trung bình. - Nếu ctrình trên viết đi viết lại các câu lệnh trên nhiều lần thì rõ ràng không thuận tiện. Vì thế NNLT sẽ đưa ra cấutrúc lặp, ta chỉ cần viết các câu lệnh đó cho 1 HS. Sau đó cho ctrình thực hiện lặp lại các thao tác đó với các HS khác. Quá trình dừng lại khi ta nhập đủ số điểm cho 50 HS.hoặc nhập chưa đủ số điển cho 50 HS.( Lặp với số lần biết trước và lặp với số lần chưa biết trước). - Quá trình lặp không thể dừng được gọi là quá trình lặp vô hạn. Do đó cần phải có 1 đk sai để sau 1 số lần lặp thì vòng lặp sẽ kết thúc. Vd 2 : Bài toán gửi tiền tiết kiệm vào ngân hàng. Hàng tháng phải tính lãi và cộng thêm vào gốc đang gửi hay nói cách khác gốc của tháng sau = gốc + lãi tháng trước. Vd 3 : Tính tổng của một đoạn số nguyên mà không được dùng công thức. ? Hãy cho biết 2 thuật toán trên có những gì giống và khác nhau + Giống nhau : đều thực hiện vòng lặp 1/- Khái niệm lặp : Xét 2 bài toán như sau với a là số nguyên và a >2. Bài toán 1 : Tính và sau đó đưa kết quả ra màn hình tổng. S = 1 a + 1 1a + + 1 2a + + . + 1 100a + . Bài toán 2 : Tính và sau đó đưa kết quả ra màn hình tổng. S = 1 a + 1 1a + + 1 2a + + . + 1 a N + + . Cho đến khi 1 a N+ < 0,0001. Cách giải : S được gán giá trò 1 a ; Tiếp theo mỗi lần cộng vào tổng S một giá trò 1 a N+ với N= 1,2,3, . - Đối với bài toán 1, số lần lặp là 100 và việc cộng vào tổng S sẽ kết thúc khi đã thực hiện việc cộng 100 lần. - Đối với bài toán 2, số lần lặp chưa biết trước nhưng việc cộng vào tổng S sẽ kết thúc khi thoả điều kiện 1 a N+ < 0.0001 . Trong lập trình, có những thao tác phải thực hiện lặp đi lặp lại nhiều lần, khi đó ta gọi là cấutrúc lặp.Cấu trúclặp thường có 2 loại : - Lặp với số lần biết trước. - Lặp với số lần chưa biết trước. Các NNLT nào cũng cung cấp 1 số câu lệnh để mô tả các cấutrúc lặp. 2/- Lặp với số lần biết trước và câu lệnh For – Do : Xét 2 thuật toán Tong_1a và Tong_1b (Xem SGK trang 43 ) Tin Học 11 Trang 2 Bài 10CấuTrúcLặp Tiết 13 Sau khi so sánh và giải thích 2 thuật toán trên ta kết luận như : - Ở Tong_1a thì chúng ta áp dụng câu lệnh lặp dạng tiến - Ở Tong_1b thì chúng ta áp dụng câu lệnh lặp dạng lùi. + Sau đây chúng ta sang phần cú pháp. - Dạng tiến : Sau mỗi lần thực hiện biến đếm tăng lên 1 hoặc ta có thể dùng hàm succ(i) - Dạng lùi : Sau mỗi lần thực hiện biến đếm giảm đi 1 hoặc ta có thể dùng hàm Pred(i). ? Ở dạng tiến vòng lặp kết thúc khi nào ? ? Ở dạng lùi vòng lặp kết thúc khi nào ? + Đặt vấn đề: ở tiết trước chúng ta đã học câu lệnh lặp ở 2 dạng tiến và lùi, hôm nay chúng ta vận dụng 2 dạng này để áp dụng cho 2 thuật toán Tong_1a và Tong_1b như sau : và lặp lại 100 lần. + Khác nhau : ở thuật toán tong_1a tăng N lên 1 sau mỗi lần thực hiện (N → N+ 1 ) , còn ở thuật toán Tong_1b thì giảm đi 1 sau mỗi lần thực hiện (N → N-1) + Vòng lặp kết thúc khi Biến đếm >= giá trò cuối. + Vòng lặp kết thúc khi Biến đếm <= giá trò đầu. Cú pháp lặp : Dạng tiến : For < Biến đếm > := < giá trò đầu > To < giá trò cuối > Do < câu lệnh > ; Dạng lùi : For < Biến đếm > := < giá trò cuối > Downto <giá trò đầu>Do <câu lệnh>; Trong đó : - Biến đếm : là biến đơn có kiểu nguyên. - Giá trò đầu và giá trò cuối : là các biểu thức cùng kiểu với biến đếm và giá trò đầu phải nhỏ hơn hoặc bằng giá trò cuối.(Nếu giá trò đầu lớn hơn giá trò cuối thì dòng lặp không được thực hiện. Quá trình thực hiện lệnh : - Dạng tiến : Được thực hiện tuần tự, với biến đếm nhận lần lượt các giá trò liên tiếp tăng từ giá trò đầu đến giá trò cuối. - Dạng lùi : Được thực hiện tuần tự, với biến đếm nhận lần lượt các giá trò liên tiếp giảm từ giá trò cuối đến giá trò đầu. Ví dụ 1 : Xét 2 chương trình tính : Tong_1a và Tong_1b Program Tong_1a ; Uses crt ; Var S : real ; a, N : integer ; Begin Tin Học 11 Trang 3 Bài 10CấuTrúcLặp Vd 1 : VCT tính tổng các số nguyên chẳn hoặc lẽ từ 1 đến 50. Program sochan ; Uses crt ; Var T, I : integer ; Begin For I := 1 to 50 do If I (mod 2 = 0 ) Then T := T + I ; Writeln( Tong =’, T ); Readln ; End. Vd 2 : VCT tổng S = 1 + 2 + 3 + . + N . Program Vi_du 2; Uses crt ; Var N, I,S : integer ; Begin Write(‘Nhap vao gia tri N:’) ; Readln(N) ; S := 0 ; For I := 1 to N do S := S + I ; Writeln(‘ Tong S =’ , S ) ; Readln ; End. Write(‘Nhap vao gia tri a :’) ; Readn(a) ; S := 1/a ; For N := 1 to 100 do S := S + 1/(a+ N) ; Writeln(‘ Tong S la : ‘, S :8:2) ; Readln ; End. Program Tong_1b ; Uses crt ; Var S : real ; a,N : integer ; Begin Write(‘Nhap vao gia tri a :’) ; Readn(a) ; S := 1/a ; For N := 100 Downto 1 do S := S + 1/(a+ N) ; Writeln(‘ Tong S la : ‘, S :8:2) ; Readln ; End. Ví dụ 2 : VCT nhập vào 2 số nguyên dương dương M và N(M < N ) , sau đó tính và đưa ra màn hình tổng các số chia hết cho 3 hoặc 5 trong phạm vi từ M đến N. Program Vi_du 2 ; Uses crt ; Var M, N, I : integer ; T : longint ; Begin Write(‘Nhap vao 2 gia tri M va N (M < N) :’) ; Readn(M,N) ; T := 0 ; For I := M to N do If (I mod 3 =0) or (I mod 5 = 0) then T := T + I ; Writeln(‘ KET QUA LA : ‘, T) ; Tin Học 11 Trang 4 Điều Kiện Câu lệnh Bài 10CấuTrúcLặp Tiết 14 + Đặt vấn đề : ở phần trước chúng ta đã được học câu lệnh lặp dạng tiến và dạng lùi đó là 2 dạng lặp với số lần biết trước, nghóa là chúng ta sẽ biết được nó sẽ lặp lại bao nhiêu lần rồi sau đó kết thúc, hôm nay chúng ta tiếp tục tìm hiểu thêm 1 dạng lặp nữa nhưng chúng ta không biết trước số lần lặp và dừng lại khi nào. Đó là câu lệnh lặp dạng While – Do. ? Em hãy cho biết vòng lặp While – Do kết thúc khi nào ? - Mỗi lần thực hiện công việc có thể làm thay đổi giá trò của điều kiện nên đến 1 lúc nào đó đk lặp không còn đúng nữa và cấutrúc sẽ kết thúc. + Vòng lặp kết thúc khi 1 điều kiện cho trước được thoả mãn Readln ; End. 3/- Lặp với số lần chưa biết trước và câu lệnh While – Do : Để giải bài toán 2 ta xây dựng thuật toán Tong_2 như sau : B1 : S ¬ 1/a ; N ¬ 0 ; {ktạo s và N} B2 : Nếu 1/(a+N) < 0.0001 chuyển sang B5 ; B3 : N ¬ N + 1 ; B4 : S ¬ S + 1/(a+N) rồi quay lại B2; B5 : Đưa S ra màn hình, rồi kết thúc ; Cú pháp : While < điều kiện > Do < Câu lệnh > ; Trong đó : - Điều kiện : là biểu thức lôgic ; - Câu lệnh : là 1 câu lệnh đơn hoặc ghép. Lưu đồ : sai đúng Tin Học 11 Trang 5 Bài 10CấuTrúcLặp + Nhắc lại bài toán gửi tiền vào ngân hàng : Số tiền ban đầu là A, muốn gởi và ngân hàng và có số tiền là B và (B>A) thì cần gởi trong bao lâu với lãi suất hàng tháng là K % . + Trong thuật toán Tong_1a , câu lệnh lặp . For N := 1 to 100 do S := S + 1/(a+N) ; Đã bao gồm cả ba bước 2, 3, 4 của thuật toán. Quá trình thực hiện lệnh : - Kiểm tra và tính giá trò của biểu thức điều kiện. - Nếu điều kiện đúng thì thực hiện công việc(1 lần), ngược lại sẽ kết thúc vòng lặp. Sơ đồ khối,thuật toán và chương trình của 2 ví dụ hãy xem SGK trang 46,47và 48. Chú y ù : Các câu lệnh trong vòng lặp thường được lặp lại nhiều lần, vì vậy để tăng hiệu quả của chương trình thì những thao tác không cần lặp lại nên đưa ra ngoài vòng lặp. 4. Củng cố :(4’) - Nhắc lại các khái niệm về cấutrúclặp . - Cấutrúclặp với số lần biết trước : Dạng lặp tiến : For <Biến đếm> := <giá trò đầu > To <giá trò cuối> Do <câu lệnh > ; Dạng lặp lùi :For < Biến đếm > :=<giá trò cuối>Downto<giá trò đầu>Do<câu lệnh>; - Cấutrúclặp với số lần chưa biết trước : While < điều kiện > Do < Câu lệnh > ; 5. Dặn dò :(1’) - VCT Tính tổng S= 1/1 + 1/2 + 1/3 + . + 1/N ,sau đó in kết quả ra màn hình. - Học bài và chuẩn bò Bài Tập Và Thực Hành 2 trong SGK trang 49 và 50. Châu Thành,ngày……Tháng ……Năm 2007 Người Duyệt Tin Học 11 Trang 6 . Bài 10 Cấu Trúc Lặp Tuần : 6,7 Ngày soạn : 10/ 09/07 Tiết : 12,13,14 10. CẤU TRÚC LẶP I/- Mục đích – yêu cầu : Về kiến thức : + Hiểu nhu cầu của cấu. tác phải thực hiện lặp đi lặp lại nhiều lần, khi đó ta gọi là cấu trúc lặp .Cấu trúc lặp thường có 2 loại : - Lặp với số lần biết trước. - Lặp với số lần chưa