1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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

34 128 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 34
Dung lượng 10,14 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Mọi vấn đề về logic đều được giải quyết bằng cách sử dụnglinh hoạt ba cấu trúc điều khiển là: 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 Pas

Trang 1

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 3

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 1

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 3

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

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 16

a Câu lệnh While – do 16

b Câu lệnh lặp repeat_until 16

2 Một số ví dụ 18

IV 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 4

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ươngphá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ênlogic của chương trình Mọi vấn đề về logic đều được giải quyết bằng cách sử dụnglinh hoạt ba cấu trúc điều khiển là:

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ể

- 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 Tinhọ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 Tinhọc

Trang

Trang 5

6 NGÀY SÁNG KIẾN ĐƯỢC ÁP DỤNG

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áthuy 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ộtcá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ọcsinh 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áchkhoa 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àitậ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íchcực, chủ động tích lũy kiến thức Qua đó, học sinh phát triển được tư duy logic thôngqua 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ôngqua 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 sinhgiỏ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 6

Đề tài được đề cập với đồng nghiệp và thực nghiệm sư phạm qua các em họcsinh 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ọclớp 10 năm học 2019-2020

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àitoá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ữngbà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ậptrì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ảisô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áytí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ườngtô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ọcchí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àngkhó 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ặptrong 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ônngữ lập trình Pascal

Trang 7

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ựchiệ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ếtthú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 ită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ậttoá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 8

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 tong1agọ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:

+ Biến đếm là biến đơn thường có kiểu nguyên hoặc kiểu kí tự;

+ <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> 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ì 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ừ <giá trị đầu> đến <giá trị cuối>;

+ Ở 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ừ <giá trị cuối> đến <giá trị đầu>.

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 <biến đếm> > <giá trị

cuối> trong câu lệnh for –to-do để kết thúc vòng lặp mà kiểm tra <biến đếm> = <giá

trị cuối> để 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 <giá trị cuối> , <giá trị đầu> đượ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 <giá trị cuối> , <giá trị

đầu> 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ậttoán tong1a và tong1b chương trình có thể được cài đặt như sau:

Trang 10

- 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

if i mod 2 <>0 then inc(dem);

write(‘Co ‘,dem,’ so le trong doan tu 20 den 100’);

- Dùng 2 biến đếm kiểu nguyên (d_chan, d_le) để đếm số lượng số chẵn và số lượng

số lẻ Ban đầu khởi tạo d_chan:=0; d_le:=0;

- Sử dụng vòng lặp for tiến hoặc lùi với biến đếm i chạy từ n+1 đến m-1

- Nếu i chẵn ( i mod 2 = 0) thì tăng biến d_chan lên 1 đơn vị Nếu i lẻ ( i mod 2 <> 0)thì tăng biến d_le lên 1 đơn vị

b Code tham khảo

Program dem_So_chan_le_2;

Trang 11

Writeln(‘Co ‘,d_chan,’ so chan trong khoang tu ‘,n,’ den ‘,m);

Writeln(‘Co ‘,d_le,’ so le trong khoang tu ‘,n,’ den ‘,m);

- 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ộngthê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 nkhông là số hoàn chỉnh

b Code tham khảo

Program So_Hoan_Chinh;

uses crt;

var n, i, s: int64;

begin

Trang 12

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:

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');

- 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

Program Tim_uoc_2;

uses crt;

Trang 13

- Nếu n không chia hết mọi số i trong đoạn từ 2 đến n - 1 thì n là số nguyên tố.

- Sử dụng biến ok có kiểu boolean và có giá trị ban đầu là true

- Cho biến i chạy từ 2 đến n – 1 Xét n mod i = 0 thì gán ok = false

- Nếu ok = true thì n là số nguyên tố, ngược lại thì n không phải là số nguyên tố

b Code tham khảo

if n mod i = 0 then ok :=false;

if ok then write(n,' la so nguyen to')

Trang 14

else write(n, ' khong la so nguyen to');

readln

end.

c Nhận xét

+ Ở đây ta sử dụng biến có kiểu logic (Đúng, sai) Chỉ cần một lần n mod i = 0 thì sau

khi thực hiện xong vòng lặp ok có giá trị là false

+ Mọi số nguyên N nếu có ước khác 1 và chính nó thì chắc chắn có ước trong đoạn

từ 2 đến phần nguyên căn bậc 2 của N Vì vậy thay vì kiểm tra n có chia hết cho số

nào trong đoạn từ 2 đến n -1 hay không, ta chỉ cần kiểm tra n có chia hết cho số nàotrong đoạn từ 2 đến trunc(sqrt(n)) hay không, việc làm này sẽ giúp giảm đáng kể sốlần lặp, giúp tiết kiệm thời gian thực hiện chương trình

Giá trị của N Các ước của N ( Khác 1 và N) Trunc(sqrt(n))

Trang 15

Chương trình trên có thể được viết lại như sau:

for i:= 2 to trunc(sqrt(n)) do

if n mod i = 0 then ok :=false;

if ok then write(n,' la so nguyen to')

else write(n, ' khong la so nguyen to');

readln

end.

+ Trong chương trình Nguyen_to_2 nếu đã phát hiện n chia hết cho 1 số trong đoạn từ

2 đến trunc(sqrt(n)) rồi (thuật toán có thể kết thúc và thông báo kết quả) nhưng vònglặp vẫn tiếp tục kiểm tra các số tiếp theo Điều này làm thời gian thực hiện chươngtrình chưa được tối ưu

Để khắc phục nhược điểm này ta sử dụng thủ tục Break, cho phép thoát khỏi vòng lặp

for i:= 2 to trunc(sqrt(n)) do

if n mod i = 0 then begin

ok :=false;

break;

end;

Trang 16

if ok then write(n,' la so nguyen to')

else write(n, ' khong la so nguyen to');

Đặt gtn = n!, theo công thức trên ta có

b Code tham khảo

Dãy số fibonaci được định nghĩa như sau:

Viết chương trình in ra số fibonaci thứ n (n <= 1000);

a Ý tưởng

- Nếu n <= 2, ta có f1 = f2 = 1;

- Nếu n > 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

Trang 17

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:

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ếttrướ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 18

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:

dùng for … down … to là thích hợp nhất

b Code tham khảo

Var i,n : integer;

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 <câu lệnh>;

n dấu căn

Trang 19

Trong đó:

+ Điều kiện là biểu thức logic

+ Câu lệnh là một câu lệnh trong pascal

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

<dãy lệnh>;

Until <điều kiện>;

Trong đó: <điều kiện> là biểu thức quan hệ hoặc logic.

Trang

Điều kiện

Câu lệnh

SaiĐúng

Sơ đồ hoạt động của câu lệnh While – do

Điều Câu lệnhSai

Ngày đăng: 31/05/2020, 07:17

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w