Đăng ký Đăng nhập
Trang chủ Giáo dục - Đào tạo Trung học cơ sở Skkn rèn luyện kĩ năng sử dụng cấu trúc lặp trong lập trình pascal cho học sinh ...

Tài liệu Skkn rèn luyện kĩ năng sử dụng cấu trúc lặp trong lập trình pascal cho học sinh lớp 11

.PDF
34
156
104

Mô tả:

SỞ GIÁO DỤC VÀ ĐÀO TẠO VĨNH PHÚC TRƯỜNG THPT YÊN LẠC 2 ---------- BÁO CÁO KẾT QUẢ NGHIÊN CỨU, ỨNG DỤNG SÁNG KIẾN Tên sáng kiến: RÈN LUYỆN KĨ NĂNG SỬ DỤNG CẤU TRÚC LẶP TRONG LẬP TRÌNH PASCAL CHO HỌC SINH LỚP 11 Tác giả sáng kiến: NGUYỄN THỊ NỤ Mã sáng kiến: 28.62.02 Vĩnh Phúc, năm 2020 Trang 1 DANH MỤC CÁC CHỮ VIẾT TẮT 1. 2. 3. 4. 5. 6. THPT: Trung học phổ thông HSG: Học sinh giỏi HS: Học sinh SKKN: Sáng kiến kinh nghiệm NXB: Nhà xuất bản SGK: Sách giáo khoa Trang 2 MỤC LỤC 1. LỜI GIỚI THIỆU ..........................................................................................................1 2. TÊN SÁNG KIẾN.........................................................................................................1 3. TÁC GIẢ SÁNG KIẾN ................................................................................................1 4. CHỦ ĐẦU TƯ SÁNG TẠO RA SÁNG KIẾN ............................................................1 5. LĨNH VỰC ÁP DỤNG SÁNG KIẾN ..........................................................................1 6. NGÀY SÁNG KIẾN ĐƯỢC ÁP DỤNG .....................................................................1 7. MÔ TẢ BẢN CHẤT CỦA SÁNG KIẾN .....................................................................2 7.1. Tổng quan các vấn đề nghiên cứu ...........................................................................2 7.1.1. Mục đích nghiên cứu .......................................................................................2 7.1.2. Bản chất đối tượng nghiên cứu ........................................................................2 7.1.3. Đối tượng, phạm vi nghiên cứu .......................................................................2 7.1.4. Phương pháp nghiên cứu .................................................................................2 7.1.5. Giới hạn về không gian của phương pháp nghiên cứu ....................................2 7.2. Phần nội dung ..........................................................................................................3 7.2.1. Cơ sở lý luận ....................................................................................................3 7.2.2. Cơ sở thực tiễn .................................................................................................3 7.2.3. Nội dung cụ thể ................................................................................................3 I. Lặp ...................................................................................................................4 II. Lặp với số lần biết trước và câu lệnh FOR – DO ............................................4 1. Cú pháp và hoạt động của câu lệnh For – do ...............................................4 2. Một số ví dụ .................................................................................................6 III. Lặp với số lần chưa biết trước .......................................................................16 Cú pháp và hoạt động của lệnh lặp với số lần chưa biết trước ..................16 1. 2. IV. a. Câu lệnh While – do ...............................................................................16 b. Câu lệnh lặp repeat_until ........................................................................16 Một số ví dụ ...............................................................................................18 Bài tập áp dụng...........................................................................................23 7.3. Khả năng áp dụng của sáng kiến ...........................................................................24 8. NHỮNG THÔNG TIN CẦN BẢO MẬT...................................................................24 9. CÁC ĐIỀU KIỆN CẦN THIẾT ĐỂ ÁP DỤNG SÁNG KIẾN ..................................24 10. LỢI ÍCH THU ĐƯỢC ................................................................................................24 11. DANH SÁCH TỔ CHỨC, CÁ NHÂN ĐÃ THAM GIA ÁP DỤNG SÁNG KIẾN ..29 KẾT LUẬN ........................................................................................................................30 TÀI LIỆU THAM KHẢO .................................................................................................31 Trang 3 BÁO CÁO KẾT QUẢ NGHIÊN CỨU, ỨNG DỤNG SÁNG KIẾN 1. LỜI GIỚI THIỆU Một trong những yếu tố quan trọng và không thể thiếu của một trương trình là “việc điều khiển”, cụ thể là các cấu trúc điều khiển, cũng là thành tố kết hợp đồng thời giữa dữ liệu và tác vụ. Cấu trúc điều khiển là một trong các đặc trưng cơ bản của phương pháp lập trình cấu trúc. Trong đó người ta sử dụng ba cấu trúc điều khiển để tạo nên logic của chương trình. Mọi vấn đề về logic đều được giải quyết bằng cách sử dụng linh hoạt ba cấu trúc điều khiển là: • Cấu trúc tuần tự • Cấu trúc rẽ nhánh • Cấu trúc lặp Trong chương trình tin học lớp 11, các em học sinh đã được làm quen với lập trình có cấu trúc trong đó có cấu trúc lặp nhưng trong quá trình học tập và rèn luyện học sinh vẫn gặp phải một số khó khăn trong lập trình, chưa biết cách tối ưu hóa thuật toán, thậm chí còn mắc sai lầm khi lập trình giải các bài toán có sử dụng cấu trúc lặp. Vì những lý do trên tôi chọn đề tài “Rèn luyện kĩ năng sử dụng cấu trúc lặp trong lập trình Pascal cho học sinh lớp 11” nhằm cung cấp cho học sinh những kiến thức khái quát hơn về cấu trúc lặp và rèn luyện kỹ năng lập trình cho học sinh thông qua một số bài toán cụ thể. 2. TÊN SÁNG KIẾN “Rèn luyện kĩ năng sử dụng cấu trúc lặp trong lập trình Pascal cho học sinh lớp 11” 3. TÁC GIẢ SÁNG KIẾN - Họ tên: Nguyễn Thị Nụ Địa chỉ: Trường THPT Yên Lạc 2 – Huyện Yên Lạc – Tỉnh Vĩnh Phúc Số điện thoại: 0965170380 E_mail: [email protected] 4. CHỦ ĐẦU TƯ SÁNG TẠO RA SÁNG KIẾN - Họ tên: Nguyễn Thị Nụ Trình độ chuyên môn: Cử nhân Tin Học Đơn vị công tác: Trường THPT Yên Lạc 2 – Huyện Yên Lạc – Tỉnh Vĩnh Phúc 5. LĨNH VỰC ÁP DỤNG SÁNG KIẾN Rèn luyện kĩ năng sử dụng cấu trúc lặp trong lập trình Pascal giảng dạy môn Tin học lớp 11 và bồi dưỡng học sinh tham gia kì thi chọn học sinh giỏi các cấp môn Tin học. 6. NGÀY SÁNG KIẾN ĐƯỢC ÁP DỤNG Trang 1 Từ ngày 01/08/2019 7. MÔ TẢ BẢN CHẤT CỦA SÁNG KIẾN 7.1. Tổng quan các vấn đề nghiên cứu 7.1.1. Mục đích nghiên cứu Góp phần đổi mới phương pháp dạy học sinh giỏi môn Tin học theo hướng phát huy tính tích cực, chủ động và sáng tạo của học sinh giúp học sinh tiếp thu tri thức một cách có hiệu quả. Góp phần gây hứng thú học tập môn Tin học cho học sinh tham gia thi chọn học sinh giỏi, tránh việc học thụ động, học vẹt. Giúp học sinh lĩnh hội tri thức một cách khoa học, củng cố và khắc sâu kiến thức. Qua đề tài này tôi mong muốn cung cấp cho học sinh một những vấn đề mà các em đang gặp phải về kĩ năng sử dụng cấu trúc lặp trong khi lập trình giúp các em chủ động hơn trong học tập, tích luỹ kiến thức, kỹ năng lập trình. 7.1.2. Bản chất đối tượng nghiên cứu Đưa ra hệ thống lý thuyết về cấu trúc lặp và ứng dụng cấu trúc lặp giải các bài tập trong ngôn ngữ lập trình Pascal giúp học sinh lĩnh hội tri thức, giúp các em tích cực, chủ động tích lũy kiến thức. Qua đó, học sinh phát triển được tư duy logic thông qua hệ thống bài tập giúp các em rèn luyện được tính tự giác, tính kỉ luật, thói quen tự học đó là những đức tính rèn luyện tốt của học sinh. 7.1.3. Đối tượng, phạm vi nghiên cứu - Đối tượng: Cấu trúc lặp trong lập trình Phạm vi: Các vấn đề về cấu trúc lặp trong chương trình tin học lập trình trên ngôn ngữ Pascal. 7.1.4. Phương pháp nghiên cứu Phương pháp Nghiên cứu lí luận chung. Khảo sát điều tra thực tế dạy học. Tổng hợp đúc rút kinh nghiệm. Cách thực hiện Trao đổi với đồng nghiệp, tham khảo ý kiến giáo viên cùng bộ môn. Liên hệ thực tế trong nhà trường, áp dụng và đúc rút kinh nghiệm qua quá trình giảng dạy. Thông qua việc giảng dạy trực tiếp học sinh lớp 11 và học sinh tham gia thi chọn học sinh giỏi môn Tin học khối 10 tại trường THPT Yên Lạc 2 năm học 2019 -2020. 7.1.5. Giới hạn về không gian của phương pháp nghiên cứu Trang 2 Đề tài được đề cập với đồng nghiệp và thực nghiệm sư phạm qua các em học sinh lớp 11A2 và các em học sinh tham gia dự kì thi chọn học sinh giỏi môn Tin học lớp 10 năm học 2019-2020 7.1.6. Phạm vi nghiên cứu Tôi đã nghiên cứu đề tài này trong suốt quá trình giảng dạy và thực nghiệm đề tài này trong năm học 2019-2020. 7.2. Phần nội dung 7.2.1. Cơ sở lý luận Cấu trúc lặp là là một trong ba cấu trúc cơ bản trong lập trình có cấu trúc. Tuy nhiên trước một bài toán lập trình tin học có các thao tác lặp đi lặp lại nhiều học sinh thường lúng túng, không biết nên lựa chọn và sử dụng câu lệnh lặp nào cho phù hợp với yêu cầu bài toán và tối ưu hóa thuật toán? Một số học sinh khá, giỏi có thể sử dụng cấu trúc lặp để mô tả nhưng đa số chưa biết tối ưu hóa thuật toán để giảm số lần lặp và điều đó gây tâm lý chán nản cho các em. Với tình hình ấy để giúp học sinh có kĩ năng tốt hơn trong việc sử dụng cấu trúc lặp để mô tả thuật toán, thì người giáo viên cần tăng cường rèn luyện cho học sinh kĩ năng sử dụng cấu trúc lặp từ các các bài toán cơ bản quen thuộc mà các em đã biết, khai thác các yếu tố đặc trưng của một số bài toán cơ bản để tìm thuật toán cho các bài toán mới, dựa vào đặc điểm cụ thể của từng bài toán để tối ưu hóa thuật toán. Việc rèn luyện kĩ năng lập trình cho học sinh từ những bài toán cơ bản để xây dựng thuật toán cho các bài toán tương tự hoặc các bài toán mở rộng từ các bài toán cơ bản đó là một quá trình giúp học sinh rèn luyện kỹ năng lập trình. 7.2.2. Cơ sở thực tiễn Trường THPT Yên lạc 2 là ngôi trường ở vùng nông thôn nằm dưới chân đê dải sông Hồng nên đa số học sinh chưa có cơ hội, điều kiện tiếp xúc với công nghệ và máy tính. Vì vậy, tin học là một môn học tương đối lạ lẫm và khó đối với học sinh trường tôi. Đặc biệt là chương trình tin học 11, với các em học lập trình còn khó hơn học toán, lí, hóa, .. vì điều kiện cơ sở vật chất của trường còn nhiều khó khăn, học sinh chỉ học chính khóa trên lớp về nhà lại không có máy tính để thực hành. Điều này dẫn đến ý thức tự giác của học sinh chưa cao, đặc biệt là các em học để thi học sinh giỏi lại càng khó. Với đội tuyển học sinh giỏi 10, hầu hết các em đều chưa có bất kì kiến thức cơ bản nào liên quan đến lập trình, gia đình chưa có máy tính để các em thực hành. Vì vậy giáo viên dạy đội tuyển phải bắt đầu rèn luyện cho các em từ những câu lệnh cơ bản nhất. Cơ sở trên đã giúp tôi áp dụng đề tài rèn luyện kĩ năng sử dụng cấu trúc lặp trong lập trình Pascal giảng dạy cho học sinh khối 11 và áp dụng cho học sinh tham dự kì thi chọn học sinh giỏi Tin học 10 tại trường THPT Yên Lạc 2. 7.2.3. Nội dung cụ thể Tất cả các nội dung, các ví dụ, bài tập trong đề tài này được xây dựng trên ngôn ngữ lập trình Pascal Trang 3 I. Lặp Xét 2 bài toán sau đây: Bài toán 1: Tính và đưa kết quả ra màn hình tổng S = 1+2+3+…+100 Bài toán 2: Tính và đưa kết quả ra màn hình tổng S = 1+2+3+..+n+… cho đến khi S > 105 Với cả 2 bài toán trên, dễ thấy cách để tính tổng S có nhiều điểm tương tự: • Xuất phát, S được gán giá trị 0; • Tiếp theo công vào tổng S một giá trị i với i = 1,2,3,4,5,…. Việc cộng này được lặp lại một số lần. Đố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 cồn việc 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 điều kiện S > 105 được thỏa mãn. Nói chung, ta thấy trong một số thuật toán có những thao tác phải lặp đi lặp lại nhiều lần. Cấu trúc lặp mô tả thao tác lặp được phân biệt 2 loại là 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. Các ngôn ngữ lập trình đều có các câu lệnh để mô tả cấu trúc lặp. II. Lặp với số lần biết trước và câu lệnh FOR – DO 1. Cú pháp và hoạt động của câu lệnh For – do Có 2 thuật toán tong1a và tong1b để giải bài toán 1 như sau: Thuật toán tong1a Bước 1: S ← 0; i ← 0; Bước 2: i ← i+1; Bước 3: Nếu i < 1 thì chuyển đến bước 5; Bước 4: S ← S+i rồi quay lại bước 2; Bước 5: Đưa S ra màn hình rồi kết thúc. Thuật toán tong1b Bước 1: S ← 0; i ← 101; Bước 2: i ← i-1; Bước 3: Nếu i > 100 thì chuyển đến bước 5; Bước 4: S ← S+i rồi quay lại bước 2; Bước 5: Đưa S ra màn hình rồi kết thúc. Trong thuật toán tong1a, giá trị i khi bắt đầu tham gia vòng lặp là 1 và sau mỗi lần lặp i tăng lên 1 đơn vị cho đến khi i > 100 thì kết thúc lặp (thực hiện 100 lần). Trong thuật toán tong1b giá trị i khi bắt đầu tham gia vòng lặp là 100 và sau mỗi lần lặp giảm đi 1 Trang 4 cho đến khi i < 1 thì kết thúc lặp (thực hiện 100 lần). Cách lặp trong thuật toán tong1a gọi là dạng lặp tiến và trong thuật toán tong1b là dạng lặp lùi. Trong Pascal, cấu trúc lặp với số lần biết trước ứng với 2 dạng lặp tiến và lặp lùi được mô tả với cú pháp như sau: • Dạng lặp tiến: For := to do ; • Dạng lùi: For := downto do ; Trong đó: + Biến đếm là biến đơn thường có kiểu nguyên hoặc kiểu kí tự; + , là các biểu thức cùng kiểu với biến đếm, phải nhỏ hơn hoặc bằng . Nếu lớn hơn thì vòng lặp không được thực hiện. Hoạt động: + Ở dạng lặp tiến: câu lệnh viết sau từ khóa do được thực hiện tuần tự, với biến đếm lần lượt nhận các giá trị liên tiếp tăng từ đến ; + Ở dạng lặp lùi: câu lệnh viết sau từ khóa do được thực hiện tuần tự, với biến đếm lần lượt nhận các giá trị lien tiếp giảm từ đến . Chú ý: + Giá trị biến đếm được điều khiển tự động vì vậy câu lệnh sau do không được thay đổi giá trị biến đếm; + Không giống với các ngôn ngữ khác pascal không kiểm tra > trong câu lệnh for –to-do để kết thúc vòng lặp mà kiểm tra = để thực hiện lần lặp cuối cùng. Vì lẽ đó việc can thiệp vào biến đếm có thể gây ra sự cố “vòng lặp vô tận”. Ngay cả khi biến đã duyệt hết phạm vi của kiể dữ liệu thì biến lại quay lại giá trị 0 và mọi thứ lại tiếp tục… trừ khi gõ CTRL+ Break; + Trong câu lệnh for , được tính từ khi bắt đầu vòng lặp để tính số lần lặp, nên trong vòng lặp dù có câu lệnh thay đổi , thì số lần lặp vẫn không thay đổi. Sử dụng cấu trúc lặp dạng tiến và dạng lùi như trên để mô tả quá trình lặp trong thuật toán tong1a và tong1b chương trình có thể được cài đặt như sau: Program tong1a; Var S, i: longint; Begin S:=0; Trang 5 For i:= 1 to 100 do S:= S+i; Write (‘Tong S la: ‘, S); Readln; End. Program tong1b; Var S, i: longint; Begin S:=0; For i:= 100 downto 1 do S:= S+i; Write (‘Tong S la: ‘, S); Readln; End. 2. Một số ví dụ Ví dụ 1: Viết chương trình in ra các số lẻ nhỏ hơn hoặc bằng n (0<=n<=106). a. Ý tưởng - Sử dụng vòng lặp tiến với biến đếm i chạy từ đến n để duyệt lần lượt các số từ 1 đến n; - Nếu i lẻ ( i mod 1 <> 0) thì in ra số i. b. Code tham khảo Program In_So_le; Uses crt; var i,n: longint; Begin Clrscr; Write('Nhap so n ='); readln(n); For i:=1 to n do Trang 6 if i mod 2 <>0 then Write(i,', '); readln end. Ví dụ 2: Viết chương trình đếm xem có bao nhiêu số lẻ trong đoạn từ 20 đến 100. a. Ý tưởng - Dùng 1 biến đếm kiểu nguyên (dem) để đếm số lượng số lẻ. Ban đầu khởi tạo dem:=0; - Sử dụng vòng lặp for tiến với biến đếm i chạy từ 20 đến 100 ( vì xét trong đoạn từ 20 đến 100 ( KH:[20,100] nên ta phải xét cả 2 đầu mút: i=20 và i=100) - Nếu i lẻ ( i mod 2 <> 0) thì tăng biến đếm dem lên 1 đơn vị. b. Code tham khảo Program dem_So_le; Uses crt; var i, dem: integer; Begin Clrscr; dem:=0; For i:=20 to 100 do if i mod 2 <>0 then inc(dem); write(‘Co ‘,dem,’ so le trong doan tu 20 den 100’); readln end. Ví dụ 3: Viết chương trình đếm xem có bao nhiêu số chẵn, bao nhiêu số lẻ trong khoảng từ n đến m (0 0) thì tăng biến d_le lên 1 đơn vị. b. Code tham khảo Trang 7 Program dem_So_chan_le_2; Uses crt; var i,n,m, d_chan, d_le: qword; Begin Clrscr; Write('Nhap so n ='); readln(n); Write('Nhap so m ='); readln(m); d_chan:=0; d_le:=0; For i:=n+1 to m-1 do if i mod 2 <>0 then inc(d_le) else inc(d_chan); Writeln(‘Co ‘,d_chan,’ so chan trong khoang tu ‘,n,’ den ‘,m); Writeln(‘Co ‘,d_le,’ so le trong khoang tu ‘,n,’ den ‘,m); readln end. Ví dụ 4: Một số có tổng các ước thực sự (là các ước không kể chính nó) bằng chính nó được gọi là số hoàn chỉnh. Ví dụ: Số nguyên 6 có các ước thực sự là 1, 2, 3. Tổng là 1 + 2 + 3 = 6. Viết chương trình xét xem một số n (n<1018) được nhập từ bàn phím có phải là số hoàn chỉnh không. a. Ý tưởng - Dùng biến n lưu số cần xét. - Biến S lưu trữ tổng các ước thực sự, khởi tạo s:= 0; - Sử dụng vòng lặp for với biến đếm i chạy từ 1 đến n-1. nếu i là ước của n thì cộng thêm i vào S. - Nếu S = n thì đưa ra thông báo n là số hoàn chỉnh, ngược lại đưa ra thông báo n không là số hoàn chỉnh . b. Code tham khảo Program So_Hoan_Chinh; uses crt; var n, i, s: int64; Trang 8 begin write('nhap so n: ');readln(n); s:=0; for i:= 1 to n -1 do if n mod i = 0 then s:=s+i; if s = n then write(n, ' la so hoan chinh') else writeln(n, ' khong phai la so hoan chinh'); readln end. c. Nhận xét Ước lớn nhất của số nguyên N không kể chính nó luôn <= N div 2. Vì vậy, thay vì duyệt i từ 1 đến n-1 ta chỉ cần duyệt i từ 1 đến n div 2, việc làm này sẽ làm giảm đáng kể số lần lặp do đó có thể tiết kiệm time chạy chương trình (nhất là với n lớn). Chương trình giải bài toán trên có thể được cài đặt lại như sau: Program So_Hoan_Chinh; uses crt; var n, i, s: int64; begin write('nhap so n: ');readln(n); s:=0; for i:= 1 to n div 2 do if n mod i = 0 then s:=s+i; if s = n then write(n, ' la so hoan chinh') else writeln(n, ' khong phai la so hoan chinh'); readln end. Ví dụ 5: Viết chương trình tìm các số hoàn chỉnh nhỏ hơn n (n<1015). a. Ý tưởng - Sử dụng 2 vòng lặp for lồng nhau để kiểm tra tính hoàn hảo của các số từ 1 đến n-1. b. Code tham khảo Trang 9 Program Tim_uoc_2; uses crt; Var S, n, i, j: longint; Begin clrscr; Write('Nhap so n ='); readln(n); For i:=1 to n-1 do Begin S:=0; For j:=1 to i div 2 do if i mod j = 0 then S:=S+j; if S = i then write(i,', '); end; readln end. Ví dụ 6: Viết chương trình xét xem một số n có phải là số nguyên tố không (0 2: Dựa vào công thức truy hồi của dãy fibonaci ta có thể dẽ dàng tính được fn dựa vào fn-1 và fn-2. Sử dụng biến f để tính fi ứng với mỗi giá trị của i (i= 3..n) , theo công thức truy hồi ta có f = f1+f2, sau đó f1 và f2 được thay đổi giá trị để tính phần tử tiếp theo của dãy. b. Code tham khảo Var i, f, f1, f2: longint; Begin Write(‘Nhap n: ‘); Readln(n); If n <= 2 then writeln(‘So fibonacithu ‘,n,’ la: ‘,1) Else begin f1:=1; f2:=1; For i:=3 to n do Begin f:=f1+f2; f1:=f2; f2:=f; End; Write(‘So fibonaci thu ‘,n,’ la: ‘,f); End; Readln End. - Ví dụ 9: 50 n n=1 n+1 Lập trình tính tổng sau: Y =  (SGK Tin học 11 – Trang 51) a. Ý tưởng Với bài toán trên có thể sử dụng cấu trúc lặp với số lần biết trước dạng tiến hay lùi đều được. Nếu sử dụng cấu trúc lặp For …downto … do ta có thể xây dựng công thức truy hồi để tính giá trị Y như sau: Yn = 0 Yn −1 = Yn + n n +1 Với n từ 50 giảm dần về 1 Việc cộng vào tổng Y được lặp lại 50 lần, giá trị n khi tham gia vòng lặp là 50 và sau mỗi lần lặp n giảm đi 1 cho đến khi n =1 thì dừng. Như vậy số lần lặp là biết trước, biến n được sử dụng là một biến đếm giảm từ 50 về 1, tổng cần tính là Y0 b. Code tham khảo Trang 14 var Y: real; n : integer; begin Y := 0; for n := 50 downto 1 do Y := Y + n/(n+1); writeln('Tong Y la: ',Y:10:4); readln; end. Tuy nhiên trong một số trường hợp thì chỉ có thể dùng một cấu trúc, đặc biệt là khi tính các công thức truy hồi. Ta xét một ví dụ dùng for … downto … do thích hợp hơn: Ví dụ 10: Tính tổng S= 2+ 4 + ... 2n với n là một số tự nhiên nhập từ bàn phím. n dấu căn a. Ý tưởng Đặt si = 2i + 2(i + 1) + ... 2n  s n +1 = 0 , s n =  2i + s i +1  si = ta có công thức truy hồi sau: 2n Tổng cần tính là si. Công thức truy hồi là truy hồi ngược (vì tính si qua si+1) nên dùng for … down … to là thích hợp nhất. b. Code tham khảo Var i,n : integer; s : real; begin write('Nhap mot so tu nhien n = '); readln(n); s:=0; for i := n downto 1 do s := sqrt (2 * i + s); writeln('Ket qua can tinh: s = ',s:10:5); Trang 15 readln; end. III. Lặp với số lần chưa biết trước 1. Cú pháp và hoạt động của lệnh lặp với số lần chưa biết trước a. Câu lệnh While – do Cú pháp: While <điều kiện> do ; Trong đó: + Điều kiện là biểu thức logic + Câu lệnh là một câu lệnh trong pascal Đúng Điều kiện Sai Câu lệnh Sơ đồ hoạt động của câu lệnh While – do Hoạt động: B1: Máy tính và kiểm tra điều kiện sau while B2: Nếu điều kiện đúng thì thực hiện câu lệnh sau do rồi quay lại B1(quá trình lặp) B3: Thực hiện câu lệnh tiếp theo trong chương trình (câu lệnh sau while- do) Nói một cách khác ta có thể hiểu: Câu lệnh while - do là lệnh lặp kiểm tra điều kiện trước, câu lệnh sau do sẽ được thực hiện cho đến khi điều kiện nhận giá trị sai b. Câu lệnh lặp repeat_until Cú pháp: Repeat ; Trang 16 Until <điều kiện>; Trong đó: <điều kiện> là biểu thức quan hệ hoặc logic. Câu lệnh Sai Điều kiện Đúng Sơ đồ hoạt động của câu lệnh repeat – until Hoạt động: B1: Thực hiện dãy lệnh nằm giữa repeat và until B2: Kiểm tra điều kiện sau until, nếu điều kiện sai thì quay lại B1(quá trình lặp) B3: Thực hiện câu lệnh tiếp theo của chương trình (câu lệnh sau repeat – until) Nói cách khác câu lệnh repeat – until là câu lệnh lặp kiểm tra điều kiện sau. Chú ý: + Không giống với vòng lặp for - do, cả repeat - until và while - do đều là các vòng lặp không xác định trước số lần lặp. Vì vậy cần có câu lệnh thay đổi giá trị biến điều khiển vòng lặp để đến một lúc nào đó có thể thoát ra khỏi vòng lặp; + Nếu dùng while - do và repeat - until để cùng giải một bài toán, cùng một giải thuật như nhau thì điều kiện sau while và điều kiện sau until là phủ định nhau; + Các câu lệnh trong vòng lặp repeat- until không cần phải đặt trong cặp từ khóa begin_end. • Sự giống và khác nhau giữa while – do và repeat – until - Giống nhau: Cả hai đều là câu lệnh lặp với số lần chưa biết trước - Khác nhau While - do Repeat - until Trang 17
- Xem thêm -

Tài liệu liên quan