Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (156.14 KB, 6 trang )
<span class='text_page_counter'>(1)</span>CHUYÊN ĐỀ: “SỬ DỤNG HỆ THỐNG CÂU LỆNH LẶP ĐỂ GIẢI MỘT SỐ BÀI TẬP TRONG PASCAL CÓ HIỆU QUẢ.” I./ LÍ DO CHỌN ĐỀ TÀI Trong quá trình giảng dạy, tôi nhận thấy Pascal là môn học khó đối với các em học sinh Khối 8, vì có một số thuật toán các em chưa được học ở bộ môn Toán, thêm vào đó là các em chỉ sử dụng các câu lệnh bằng Tiếng Anh để thể hiện khi lập trình. Do đó việc học tập của học sinh vẫn còn mang tính mơ hồ, như bị ép buộc, có nhiều học sinh rất sợ môn Tin học 8 vì tính chất khô khan, khó hiểu trong khi học. Vì thế tôi đã đưa ra những tóm lược cơ bản nhất của các câu lệnh lặp và một số ví dụ mẫu vận dụng cấu trúc lặp để giải quyết có hiệu quả là nhằm giúp học sinh tiếp thu bài nhanh, nhớ kiến thức lâu hơn và cảm thấy thích thú trong học tập. Đó cũng là lí do tôi chọn chuyên đề này II./ NỘI DUNG CHUYÊN ĐỀ * CẤU TRÚC LẶP VỚI LỆNH FOR...DO: - Tác dụng: Dùng để xây dựng chu trình với số lần lặp xác định. - Cú phá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 đó: + for, to, do là các từ khóa. + Biến đếm có kiểu nguyên. + Giá trị đầu và giá trị cuối là các biểu thức có cùng kiểu với biến đếm và giá trị cuối phải lớn hơn hoặc bằng giá trị đầu.+ Câu lệnh có thể là câu lệnh đơn giản hay câu lệnh ghép. * Nguyên lý hoạt động cấu trúc For dạng tiến:. Begin bđ := gt đ bđ gt c ĐÚNG. do <Câu lệnh> bđ :=succ(b). SAI. End.
<span class='text_page_counter'>(2)</span> 1. Biến đếm nhận giá trị của giá trị đầu. 2. Máy kiểm tra xem giá trị của biến đếm còn nhỏ hơn giá trị của biểu thức giá trị cuối hay không (biến đếm ≤ giá trị cuối). 3. Nếu việc kiểm tra: - Cho giá trị sai câu lệnh sẽ bị bỏ qua. - Cho giá trị đúng: +Máy sẽ thực hiện câu lệnh sau từ khóa do. + Tăng giá trị của biến đếm lên giá trị đứng liền sau của nó (biến đếm:=succ(b)) - Quay trở lại bước 2 Trong cấu trúc For dạng tiến, câu lệnh được thực hiện lặp đi lặp lại cho đến khi giá trị của biến đếm lớn hơn giá trị cuối. Mỗi lần thực hiện xong câu lệnh, giá trị của biến đếm được tăng lên đến giá trị liền sau của nó. * Nguyên lý hoạt động cấu trúc For dạng lùi:. Begin bđ := gt cuối Bđ ≥ gt đ. SAI. ĐÚNG. do <Câu lệnh>. End. bđ := Pred(b) 1. Biến đếm nhận giá trị cuối. 2. Máy kiểm tra xem giá trị của biến đếm còn lớn hơn giá trị đầu không? 3. Nếu việc kiểm tra: - Cho giá trị sai: máy bỏ qua câu lệnh. - Cho giá trị đúng: + Máy sẽ thực hiện câu lệnh. + Giảm giá trị của biến đếm b đến giá trị đứng liền trước của nó (biến đếm:=pred(b)) - Quay trở lại bước 2 Trong cấu trúc For dạng lùi, câu lệnh được thực hiện lặp đi lặp lại cho đến khi giá trị của biến đếm nhỏ hơn giá trị của giá trị đầu. Mỗi lần thực hiện xong câu lệnh, giá trị của biến đếm được giảm đi đến giá trị liền trước của nó. 1. Ví dụ 1: Tính tổng S = 1 + 1/2 + 1/3 + .... + 1/n • Nhận xét: - Trong biểu thức trên, số hạng thứ i của tổng có thể tính được theo công thức S(i) = 1/i (i=1,2,...,n) - Trường hợp này có thể sử dụng được một trong hai dạng cấu trúc của FOR • Chương trình:.
<span class='text_page_counter'>(3)</span> Phương án 1: Sử dụng cấu trúc For dạng tiến. Var i, n : Integer; S:Real; Begin Write('Hay nhap vao so nguyen n='); Readln(n); S:=0; For i:=1 to n do S:= S + 1 / i; Writeln( ' Tong S =', S : 6 : 2 ); Readln; End. Phương án 2: Sử dụng cấu trúc For dạng lùi. Var i, n : Integer; S:Real; Begin Write('Hay nhap vao so nguyen n='); Readln(n); S:=0; For i:=n downto 1 do S:= S + 1 / i; Writeln( ' Tong S =', S : 6 : 2 ); Readln; End. 2. Ví dụ 2: In ra màn hình hai dòng chữ. Dòng trên gồm các chữ cái in hoa từ A..Z. Dòng dưới gồm các chữ cái thường theo thứ tự ngược lại từ z đến a *Nhận xét: Ta có thể giải quyết được bài toán bằng cách sử dụng cấu trúc FOR dạng tiến và dạng lùi với biến điều khiển dạng ký tự nhận các giá trị trong khoảng từ A đến Z *Chương trình Program in_dong; Var ch: char; Begin Writeln; For ch := 'A' to 'Z' do Write(ch:2); Writeln; For ch := 'z' downto 'a' do Write(ch:2); Writeln; Readln; End. 3. Ví dụ 3: Đọc vào n số thực, tìm Max của chúng * Thuật toán tìm Max trong một dãy số: - Cho Max là số thứ nhất - Duyệt toàn bộ dãy số từ số thứ hai trở đi, nếu thấy số nào lớn hơn Max thì lấy số đó làm Max. Sau khi duyệt xong dãy số, ta sẽ có Max là số lớn nhất. • Nhận xét: - Dãy số có một số lượng hữu hạn các số. Ta có thể biết được số lượng từ khi bắt đầu thực hiện thuật toán..
<span class='text_page_counter'>(4)</span> - Thích hợp cho việc sử dụng cấu trúc FOR dạng tiến để thực hiện. Chương trình Program tim_max; Var n, i: integer; max, x: real; Begin Write(‘n = ‘); Readln(n); For i := 2 to n do Begin Write(‘Cho so thu ’, i);Readln(X); if Max < X then Max := X; End; Writeln(‘Max = ‘, Max:8:2); Readln; End. *. CẤU TRÚC LẶP VỚI LỆNH WHILE...DO: • Tác dụng: Dùng để xây dựng chu trình với số lần lặp chưa xác định trước. • Cú pháp: While <điều kiện> do <câu lệnh>; Câu lệnh là thân chu trình và có thể là câu lệnh đơn hoặc câu lệnh ghép. •. Begin. Điều kiện. `. SAI ĐÚNG. Câu lệnh. End. *Nguyên lý hoạt động: 1. Máy tính xác định giá trị của điều kiện. 2. Tuỳ thuộc vào giá trị của điều kiện: - Nếu điều kiện có giá trị đúng, máy tính sẽ thực hiện câu lệnh sau đó quay lại bước 1. - Nếu điều kiện có giá trị sai, câu lệnh sẽ bị bỏ qua và việc thực hiện lệnh lặp kết thúc. • Nhận xét: - Câu lệnh được thực hiện lặp đi lặp lại cho đến khi <điều kiện> nhận giá trị sai. Câu lệnh sẽ không được thực hiện lần nào nếu <điều kiện> nhận giá trị sai ngay từ khi bắt đầu vào chu trình. - Trong thân chu trình phải có câu lệnh làm thay đổi giá trị của <điều kiện> để tránh xảy ra vòng lặp vô tận. 1 2 3 n S= + + +. ..+ Ví dụ 1: Tính tổng , Sao cho S >= 10 2 5 10 1+n2.
<span class='text_page_counter'>(5)</span> Var i : Integer; S:Real; Begin S:=0; i:=0; While S < 10 do Begin i := i + 1; S := S + i / (1+SQR( i ) ); End; Writeln( ' Tong S =', S : 6 : 2 ); Writeln( ‘So lan lap la:’, i ); Readln; End. 2. Ví dụ 2: Tìm bội số chung nhỏ nhất của hai số nguyên dương • Thuật toán: Lấy một trong hai số lần lượt nhân với 1, 2, 3,... cho đến khi nào tích số chia hết cho số thứ hai thì tích số chính là BSCNN • Nhận xét: - Thuật toán cho thấy là trong quá trình tính toán, không thể biết trước được quá trình nhân phải thực hiện lặp lại bao nhiêu lần. Trường hợp này phải sử dụng cấu trúc lặp với số lần lặp không xác định. - Điều kiện để dừng là tích số chia hết cho số thứ hai • Chương trình Program Boisochungnhonhat; Var Bscnn, n, m, k: Integer; Begin Write(‘m= ‘); Readln(m); Write(‘n= ‘); Readln(n); bscnn := m; k := 2; While (BSCNN mod n <> 0) do Begin BSCNN := k*m; k:= k + 1; End; Writeln(‘BSCNN = ‘, BSCNN); Readln; End. 3.Ví dụ 3: Tìm Ước số chung lớn nhất của hai số nguyên dương m, n. • Thuật toán: Nếu m>n thì lấy m = m – n Nếu m vẫn lớn hơn n thì tiếp tục lấy m = m - n Nếu m< n thì lấy n = n - m Nếu n vẫn lớn hơn m thì tiếp tục lấy n = n – m Lặp lại thuật toán trên cho đến khi m = n. Lúc đó m = n là ƯSCLN • Nhận xét: Thuật toán cho thấy không thể xác đinh trước được phép trừ phải thực hiện lặp lại bao nhiêu lần. Trường hợp này phải sử dụng cấu trúc lặp với số lần lặp không xác.
<span class='text_page_counter'>(6)</span> định. Điều kiện để dừng là hai số bằng nhau. *Chương trình Program USCLN; Var x, y: Integer; Begin Write(‘x = ‘);Readln(x); Write(y = ‘);Readln(y); While x <> y do If x>y then x := x – y else y := y – x; Writeln(‘USCLN la: ‘, x) Readln; End. III. BÀI HỌC KINH NGHIỆM * Ưu điểm: - Kích thích động cơ học tập của học sinh. - Nâng cao chất lượng dạy và học. * Nhược điểm: - Một số học sinh yếu kém mất kiến thức căn bản ở môn Toán, thêm vào đó có một số thuật toán các em chưa được học trong chương trình, nên giáo viên phải kiên trì, nhẫn nại, thậm chí mất nhiều thời gian trong việc hướng dẫn các thuật toán cho học sinh. VI. KẾT LUẬN: Trên đây là tóm lược nội dung cú pháp, cách thực hiện các câu lệnh thuộc cấu trúc lặp và phân tích trên ngôn ngữ lập trình Pascal, một số ví dụ của các bài toán điển hình cho từng dạng lặp cụ thể mà bản thân đã đúc kết được trong quá trình giảng dạy môn tin học ở trường. Qua đó giúp học sinh làm tài liệu tham khảo trong quá trình học tập của mình có hiệu quả. Trong phạm vi là một sáng kiến kinh nghiệm có thể việc phân tích về nội dung câu lệnh và ví dụ về các dạng lệnh có thể chưa thật chi tiết và phong phú rất mong nhận được sự góp ý chân thành từ quý đồng nghiệp, để đề tài được hoàn thiện hơn.. Tập Ngãi, ngày 27 tháng 9 năm 2012 Người Viết. Nguyễn Chí Dũng.
<span class='text_page_counter'>(7)</span>