Tuần : Tiết : 13+14+15 Ngày soạn: Ngày giảng: Bài10. Cấu trúc lặp I. mục tiêu của bài: 1. Kiến thức - Hiểu nhu cầu của cấu trúc lặp trong biểu diễn thuật toán. - Hiểu cấu trúc lặp với số lần biết trớc, cấu trúc lặp kiểm tra điều kiện trớc. 2. Kĩ năng - Biết vận dụng đúng đắn từng loại cấu trúc lặp vào tình huống cụ thể. - Biết 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 lệnh lặp với số lần biết trớc, lệnh lặp kiểm tra điều kiện trớc. - Viết đợc thuật toán của một số bài toán đơn giản. 3. Thái độ - Tiếp tục khơi gợi lòng ham thích giải toán bằng lập trình 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. II. Chuẩn bị của Giáo viên và học sinh: 1. Giáo viên: SGK, giáo án, STK (máy chiếu nếu có). 2. Học sinh: SGK, chuẩn bị trớc bài ở nhà. III. Phơng pháp giảng dạy - Thuyết trình, đàm thoại. IV. Tiến trình bàihọc và các hoạt động: 1. ổn định tổ chức: 1 2. Kiểm tra bài cũ: Em hãy cho biết sự giống và khác nhau của hai dạng lệnh If Then. 3. Bài mới: Tiết 13 * Hoạt động 1: Giới thiệu cho HS biết rẽ nhánh là gì? Hoạt động của GV và HS Nội dung - GVV: bi trc chỳng ta ó hc v lnh r nhỏnh nhng khụng phi lỳc no chỳng ta cng cú th s dng c cu trỳc r nhỏnh. Nhiu bi toỏn cũn phc tp hn m cu trỳc r nhỏnh khụng đáp ứng được. Hôm nay chúng ta làm quen với một dạng cấu trúc khác đó là cấu trúc lặp. - GV: Đưa ra hai bài toán, yêu cầu HS tìm cách để giải bài toán này. - HS: Đưa ra cách giải bài toán của mình, có thể có nhiều cách giải khác nhau. - GV: Trình bày cách giải bài toán từng bước một. S 1 := 0; S 1 :=S 1 +1/a; S 1 :=S 1 +1/(a+1); ……. S 1 :=S 1 +1/(a+N); Sau đó gọi học sinh nhận xét về cách giải bài toán này. - HS: Nếu giải theo cách này thì ta phải viết 100 lần câu lệnh nếu như N=100, Nêu N>100 thì số lần phải viết chưa biết trước. Nếu áp dụng cho cả hai bài toán thì đều quá dài. - GVDD: Vậy ta có thể giải bài toán này theo cách nào ngắn nhất mà vẫn chính xác. - GV: Lấy 1 ví dụ thực tế về việc tính toán lặp đi lặp lại nhiều lần để học sinh hiểu được khái niệm lặp. 1. Lặp - Xét 2 bài toán với a là số nguyên và a>2 Bài toán 1: Tính và đưa ra kết quả màn hình tổng: 100 1 . 2 1 1 11 1 + ++ + + + += aaaa S Bài toán 2: Tính và đưa ra kết quả màn hình tổng: Naaaa S + ++ + + + += 1 . 2 1 1 11 2 cho đến khi 0001,0 1 < + Na Cách giải: - B 1 : Khởi tạo S:=1/a; - B 2 : Tiếp theo mỗi lần thì cộng thêm vào S là 1/(a+N) với N=1,2,3, - Với bài toán 1 thì việc cộng thêm dừng khi N=100 có nghĩa là đã biết được số lần lặp biết trước. - Với bài toán 2 thì việc cộng thêm dừng khi 1/(1+N)<0,0001. Có nghĩa là số lần lặp chưa biết trước. Vậy: Trong lập trình có những thao tác phải lặp đi lặp lại nhiều lần, khi đó gọi là cấu trúc lặp. Trong lập trình thường có hai loại cấu trúc lặp: + Lặp vớí số lần biết trước. + Lặp với số lần không biết trước. Ý nghĩa của cấu trúc lặp: Cấu trúc lặ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 một điều kiện nào đó còn đúng. * Hoạt động 2: Trình bày cho HS biết Lặp với số lần biết trước và cấu trúc lệnh lặp For-do trong ngôn ngữ lập trình Pascal. Ho¹t ®éng cña GV vµ HS Néi dung GV dẫn dắt vào vấn đề: Trong lập trình có hai loại cấu trúc lặp, đó là lặp với số lần biết trước và lặp với số lần không biết trước. Chúng ta đi tìm hiểu lần lượt từng cấu trúc lặp. GV: Dùng bảng phụ để đặt câu hỏi cho HS. GV: Gọi 2 HS lên bảng biểu diễn 2 thuật toán trên bảng phụ bằng phương pháp vẽ sơ đồ khối. HS: Lên bảng biểu diễn sơ đồ khối của hai thuật toán trên. GV: Thuật toán trên có lặp không? HSTL: Thuật toán trên lặp. GV: Hai thuật toán trên giống và khác nhau như thế nào? HS: Trả lời theo sự hiểu biết của mình. GV: Nhận xét tổng họp những ý kiến của HS và dẫn dắt đưa HS biết dạng lặp với số lần biết trước và sau đó đưa ra hai dạng cấu trúc lặp với số lần biết trước trong Pascal. GV: Nói rõ cho HS biết khi nào dùng dạng lặp tiến và khi nào dùng dạng lặp lùi. 2. Lặp với số lần biết trước và câu lệnh for-do - Dạng lặp với số lần biết trước dùng để thực hiện câu lệnh một số lần xác định. Dạng này dùng biến điều khiển để điều khiển vòng lặp. - Để mô tả cấu trúc lặp với số lần biết trước, Pascal dùng câu lệnh lặp for-do với hai dạng tiến lùi. + 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> to <giá trị đầu> do <câu lệnh>; - Trong đó: + Biến đếm thường là kiểu số nguyên. + Giá trị đầu, giá trị cuối là các biểu thức cùng kiểu với biến đếm. Giá trị đầu nhỏ hn giỏ tr cui. + Dng lp tin: Bin m t tng dn t giỏ tr u n giỏ tr cui. + Dng lp lựi: Bin m t gim dn t giỏ tr cui n giỏ tr u. * Chỳ ý: Trong vũng lp khụng c cha lnh lm thay i giỏ tr ca bin iu khin. Tiết 14 * Hoạt động 3: Rèn luyện kỹ năng vận dụng lệnh For - do Hoạt động của GV và HS Nội dung - ổn định lớp: - Kiểm tra bài cũ: HĐ 1: Kiểm tra kiến thức cũ MT: Nhắc lại cú pháp, hoạt động của câu lệnh For Do - GV: Hãy nêu cú pháp của hai câu lệnh lặp với số lần lặp biết trớc và hoạt động của chúng? - HS: 1/ Lặp dạng tiến: for<biếnđếm>:=<gtđ>to<gtc>do<câu lệnh>; 2/ Lặp dạng lùi: for<biếnđếm>:=<gtc> downto <gtđ>do <câu lệnh>; Hoạt động của lệnh: - Lặp dạng tiến: câu lệnh sau DO đc thực hiện tuần tự, với biến đếm lần lợt nhận các giá trị tăng dần từ GTĐ đến GTC. - Lặp dang lùi: Câu lệnh sau DO đc thực hiện tuần tự với biến đếm lần lợt nhận các giá trị giảm dần từ GTC đến GTĐ HS: Trả lời câu hỏi GV: Nhận xét. HĐ 2: Vận dụng kiến thức . * Các ví dụ về câu lệnh lặp: MT: Vận dụng câu lệnh For do vào biểu diễn thuật toán Tong_1a. GV: Ví dụ cài đặt thuật toán Tong_1a. HS: Nghe giảng, ghi bài HS: Nghiên cứu 2 ví dụ GV: Hãy so sánh hai thuật toán trên. HS: Nhắc lại kiến thức cũ về thuật toán GV: Củng cố thêm trả lời của học sinh GV: áp dụng vào thuật toán Tong_1a hãy trình bày thuật toán của Tong_1b. HS: Lên trình bày thuật toán Tong_1b. GV: Nhận xét cách làm của học sinh HĐ 3: Vận dụng câu lệnh vào bài toán cụ thể: MT: Viết đợc chơng trình theo yêu cầu của VD 2. GV: Giới thiệu ví dụ 2 HS: Quan sát ví vụ HS: Nghe giảng, ghi bài VD1: Thuật toán Tong_1a. Program Tong_1a; Uses crt; Var s: real; a, N:Integer; Begin Clrscr; Write(Nhap gia tri a vao: ); Readln(a); S:=1/a; For N:=1 to 100 do S:=S+1/(a+N); Writeln(Tong s la: ,S:8:4); Readln End. VD2: Nhập vào từ bàn phím 2 số nguyên dơng M và N, 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. Program VD2; Uses crt; Var M,N,i: Integer; T: longint; Begin Clrscr; Write(Nhap so M nho hon N: ); Write(Nhap M: ); readln(M); Write(Nhap N: ); readln(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: , T); Readln End. Tiết 15 Hoạt động 4: Trỡnh b y cho HS bi t Lp vi s ln cha bit trc v c u trỳc lnh lp For-do trong ngụn ng lp trỡnh Pascal. Hoạt động của GV và HS Nội dung t vn : Treo ni dung bi toỏn Tong_2 lờn bng. - GV: S khỏc nhau v gii hn lp ca bi toỏn ny vi bi toỏn 1? - HS: Quan sỏt suy ngh v tr li. Bi toỏn 1: Cho gii hn l N. Bi toỏn 2: Cho gii hn l S. - GV: Lp bao nhiờu ln? - HS: Quan sỏt suy ngh v tr li. Bi toỏn 1: Lp 100 ln. Bi toỏn 2: Cha xỏc nh c. - GV: Lp n khi no? - HS: Quan sỏt suy ngh v tr li. Bi toỏn 1: Lp n khi N>100. Bi toỏn 2: Lp n khi iu kin 1/ (1+N)<0.0001 c tha món. - GV: Nhận xét và đa ra kết luận. * KL: Qua vớ d ta thy cú mt dng bi toỏn cú s lp li mt s lnh nhng khụng bit trc c s ln lp. Cn cú mt cu trỳc iu khin lp li mt cụng vic nht nh khi tha món mt iu kin no ú. - GV: Trong bi toỏn 2 iu kin lp li l gỡ? - HS: Suy nghĩ và trả lời. - GV: Trong bi toỏn 2 lnh cn lp l gỡ? - HS: Suy nghĩ và trả lời. - GV: S khỏc nhau trong lnh cn lp For v While l gỡ? - HS: Quan sát và Suy nghĩ trả lời. - GV: Da vo cu trỳc cho bit mỏy s 3. Lặp với số lần cha biết trớc Câu lệnh While do. Cu trỳc chung: While <iu kin> do <cõu lnh lp>; Gii thớch: + <iu kin>: L biu thc quan h hoc biu thc logic, l iu kin lp li. + <cõu lnh lp>: L cỏc lnh cn phi lp li. - Chú ý: Trong cấu trúc lặp While do phải có lệnh tăng biến chỉ số. * ý nghĩa: Khi điều kiện còn đúng thì cong thực hiện câu lẹnh sau Do sau đó lại quay lại kiểm tra điều kiện. * Vớ d 1: Tớnh v a kt qu ra mn hỡnh tng: . 1 . 2 1 1 11 Naaaa S ++ + + += cho n khi 0001.0 1 < + Na thực hiện tính điều kiện trước hay thực hiện lệnh cần lặp trước. Kết luận: Treo sơ đồ cấu trúc của câu lệnh While – do lên bảng và giải thích. - GV: Trong bài toán này điều kiện lặp là gì? - HS: Not (1/(a+N)<0.0001) - GV: Trong bài toán này lệnh cần lặp là gì? - HS: N: = N + 1; S : = S + 1/(a+N); - GV: Nếu bỏ Not đi thì điều kiện thực hiện câu lệnh lặp sẽ được viết như thế nào? - HS: Suy nghÜ tr¶ lêi - GV: Đối với bài lập trình này câu lệnh sau do ta sử dụng là câu lệnh đơn hay câu lệnh ghép?Tại sao? - HS: Suy nghÜ tr¶ lêi - GV: LÊy vÝ dô vÒ thuËt to¸n t×m íc sè chung lín nhÊt cña hai sè M, N. - GV: Điều kiện để tiếp tục lặp là gì? - HS: M<>N - GV: Các lệnh cần lặp là gì? - HS: M: = M – N ; N: = N – M; Gọi hs nên viết câu lệnh lặp While – do cho bài toán này. KL: Treo chương trình cài đặt trên giấy A 0 và giải thích. - GV: Có thể lấy câu lệnh While – do để thay thế câu lệnh For – do trong bài toán tong_1a được không? Nếu được thì viết lại như thế nào? - HS: Có thể thay thế được. N : = 0;S:=1/a; While (N<=100) do Begin N: = N + 1; S: = S + 1/(a+N); End; Ví dụ 2: Tìm ƯCLN của hai số nguyên dương M, N Phân tích để xác định <điều kiện> và <lệnh cần lặp>. VD: M = 25 M = 10 N = 15 N = 15 M = 10 M = 5 N = 5 N = 5 ƯCLN (25,15) = 5 M:=M-N N:=N-M M:=M-N IV. cñng cè dÆn dß.– 1. Nội dung đã học. - Ý nghĩa của cấu trúc lặp có số lần chưa biết trước. - Cấu trúc chung của lệnh lặp While trong ngôn ngữ Pascal. - Sơ đồ thực hiện lệnh lặp While. - Sự thực hiện của máy khi gặp lệnh While. 2. Câu hỏi và bài tập về nhà. - Giải bài tập 4, 5 b,7,8 SGK/trang 51. - Xem nội dung bài thực hành 2 SGK trang 49. - Xem nội dung phụ lục B SGK trang 131; lệnh rẽ nhánh và lặp. - Xem nội dung phụ lục C SGK trang 139; lệnh rẽ nhánh và lặp. . toán này. - HS: Nếu giải theo cách này thì ta phải viết 100 lần câu lệnh nếu như N =100 , Nêu N> ;100 thì số lần phải viết chưa biết trước. Nếu áp dụng cho. màn hình tổng: 100 1 . 2 1 1 11 1 + ++ + + + += aaaa S Bài toán 2: Tính và đưa ra kết quả màn hình tổng: Naaaa S + ++ + + + += 1 . 2 1 1 11 2 cho đến