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

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 trường THPT quan sơn

21 32 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 21
Dung lượng 107,99 KB

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

Nội dung

Trong thời đại thông tin bùng nổ ngày nay, việc lập được các chương trình tự hoạt động cho máy tính, máy gia dụng là cần thiết và để làm được việc đó cần có một quá trình nghiên cứu, học

Trang 1

PHẦN I: MỞ ĐẦU I.Lý do chọn đề tài

Sự phát triển mạnh mẽ như vũ bão của tin học đã làm cho xã hội có nhiềunhận thức mới về cách tổ chức các hoạt động Nhiều quốc gia trên thế giới ýthức được rất rõ tầm quan trọng của tin học và có những đầu tư lớn cho lĩnh vựcnày, đặc biệt trong giáo dục nâng cao dân trí về tin học và đào tạo nguồn nhânlực có chất lượng cao Người Việt Nam có nhiều tố chất thích hợp với ngànhkhoa học này, vì thế chúng ta hi vọng có thể sớm hoà nhập với khu vực và trênthế giới

Trong thời đại thông tin bùng nổ ngày nay, việc lập được các chương trình

tự hoạt động cho máy tính, máy gia dụng là cần thiết và để làm được việc đó cần

có một quá trình nghiên cứu, học tập về ngôn ngữ lập trình lâu dài, qua đó nhàlập trình có thể chọn một ngôn ngữ lập trình thích hợp

Tin học là một môn học mới ở các trường phổ thông nên học sinh cònnhiều bỡ ngỡ khi tiếp cận với môn học này Nội dung tin học lập trình lớp 11 làmột nội dung mới lạ đối với đa số học sinh với nhiều khái niệm, thuật ngữ, cấutrúc dữ liệu mà học sinh mới được tiếp xúc lần đầu

Đặc biệt một trong những yếu tố quan trọng và không thể thiếu của mộttrươ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à:

sử dụng cấu trúc lặp

Xuất phát từ cơ sở 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 trường THPT Quan Sơn” 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ể

II.Mục đích nghiên cứu

Do gặp phải những khó khăn trên nên khi lập trình giải các bài toán họcsinh thường mắc rất nhiều lỗi, thậm chí có những lỗi các em mắc phải nhiều lần

do không hiểu nguyên nhân xuất hiện lỗi Vì vậy qua đề tài này tôi mong muốncung cấp cho học sinh một số 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

Trang 2

III.Đối tượng nghiên cứu

Đề tài này được áp dụng đối với sinh các lớp 11A1, 11A2, 11A3 trườngTHPT Quan Sơn năm học 2020 – 2021

Với nhiệm vụ chủ yếu là đưa ra hệ thống lý thuyết về cấu trúc lặp và ứngdụ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 sinhlĩ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ọcsinh phát triển được tư duy logic thông qua hệ thống bài tập giúp các em rènluyệ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ènluyện tốt của học sinh

Kế hoạch nghiên cứu: Các vấn đề về cấu trúc lặp trong chương trình tin họclập trình trên ngôn ngữ Pascal

IV.Phương pháp nghiên cứu

Để hoàn thành đề tài này, tôi đã tiến hành và áp dụng một số phương phápnghiên cứu sau:

- Dựa trên cơ sở lý thuyết của Ngôn ngữ lập trình Pascal Sự hoạt độngtuần tự từng bước của máy tính khi thực hiện chương trình

- Thu thập dữ liệu thông qua việc hỏi học sinh về mức độ biết, hiểu và vậndụng ngôn ngữ lập trình Pascal vào giải các bài toán trong các môn học khác

- Phân tích đánh giá mức độ học sinh hiểu vận dụng, giải được các bài tập,

từ đó xây dựng, giới thiệu các bài tập phù hợp với từng đối tượng học sinh

- Tổng kết rút kinh nghiệm

Trang 3

PHẦN II: NỘI DUNG I.Cơ sở lý luận

Đảng và Nhà nước ta đã nhận thấy được tầm quan trọng của ngành Tin học

và đã đưa môn học này vào nhà trường phổ thông như những môn khoa họckhác bắt đầu từ năm học 2006-2007

Chỉ thị số 55/2008/CT- BGTĐT ngày 30/9/2008 của Bộ trưởng Bộ GDĐT

về tăng cường giảng dạy, đào tạo và ứng dụng công nghệ thông tin trong ngànhgiáo dục giai đoạn 2008-2011

Trong bối cảnh toàn ngành Giáo dục và Đào tạo đang nỗ lực đổi mớiphương pháp dạy học theo hướng phát huy tính tích cực chủ động của học sinhtrong hoạt động học tập Điều 24.2 của Luật giáo dục đã nêu rõ: “Phương phápgiáo dục phổ thông phải phát huy tính tích cực, tự giác, chủ động, sáng tạo củahọc sinh, phù hợp với đặc điểm của từng lớp học, môn học; bồi dưỡng phươngpháp tự học, rèn luyện kỹ năng vận dụng kiến thức vào thực tiễn, tác động đếntình cảm, đem lại niềm vui, hứng thú học tập cho học sinh” Như vậy, chúng ta

có thể thấy định hướng đổi mới phương pháp dạy học đã được khẳng định,không còn là vấn đề tranh luận Cốt lõi của việc đổi mới phương pháp dạy học ởtrường phổ thông là giúp học sinh hướng tới việc học tập chủ động, chống lạithói quen học tập thụ động Với một số nội dung trong đề tài này, học sinh cóthể tự học, tự rèn luyện thông qua một số bài tập, dạng bài tập cụ thể

II.Thực trạng vấn đề

Qua thực tế giảng dạy ở trường THPT Quan Sơn các năm qua, tôi nhậnthấy khi học đến chương trình tin học lớp 11 đa số học sinh đều nhận xét bộmôn này rất khó

Theo thống kê kết quả học tập môn tin học 11 năm học 2019 – 2020 nhưsau:

- Các học sinh thường gặp khó khăn khi làm các bài toán sử dụng cấu trúclặp dẫn đến gặp khá nhiều lỗi khi viết một chương trình trong ngôn ngữ lập trìnhPascal

- Tuy nhiên cũng có một số lượng không nhỏ học sinh rất yêu thích tin học

và thích tìm hiểu một số bài toán, dạng toán ngoài phạm vi sách giáo khoa

III.Các giải pháp đã tiến hành để giải quyết vấn đề

1.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

Trang 4

Đố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ặplạ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

2.Lặp với số lần biết trước và câu lệnh FOR – DO

2.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 > 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

Thuật toán tong1b

Bước 1: S ← 0; i ← 101;

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

Trong thuật toán tong1a, giá trị i khi bắt đầu tham gia vòng lặp là 1 và saumỗ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 100lầ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 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

+ 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>

Trang 5

+ Ở 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 ấn 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ặptrong 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;

For i:= 1 to 100 do S:= S+i;

Write (‘Tong S la: ‘, S);

For i:= 100 downto 1 do S:= S+i;

Write (‘Tong S la: ‘, S);

Trang 6

- Nếu i lẻ (i mod 2 <> 0) thì tăng biến đếm dem lên 1 đơn vị.

Code tham khảo:

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

- 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ị

Code tham khảo:

Trang 7

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<108) được nhập từ bàn phím có phải là sốhoàn chỉnh không

Ý 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 nthì 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ôngbáo n không là số hoàn chỉnh

Code tham khảo:

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

Chương trình giải bài toán trên có thể được cài đặt lại như sau:

Trang 8

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

Trang 9

Ví dụ 7: Dãy số fibonaci được định nghĩa như sau:

Code tham khảo:

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:

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

Trang 10

Câu lệnh

SaiĐúng

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

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ầntính là Y0

Code tham khảo:

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:

3.Lặp với số lần chưa biết trước

3.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>;

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 do)

while-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ậngiá trị sai

Trang 11

Điều kiện

Câu lệnh Sai

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 đổigiá 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ònglặp

+ Nếu dùng while - do và repeat - until để cùng giải một bài toán, cùng mộtgiải thuật như nhau thì điều kiện sau while và điều kiện sau until là phủ địnhnhau

+ 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:

Là câu lệnh lặp kểm tra điều kiện

trước

Là câu lệnh lặp kiểm tra điều kiện sau

Câu lệnh sau while được lặp lại khi

điều kiện đúng

Dãy lệnh nằm giữa repeat – until đượclặp lại khi điều kiện sai

Câu lệnh sau while có thể không được

thực hiện lần nào (Khi ngay từ đầu

điều kiện đã sai)

Dãy lệnh nằm giữa repeat – until đượcthực hiện ít nhất 1 lần (dù ngay từ đâuđiều kiện đã đúng)

Trang 12

Ví dụ 10: Viết chương trình tìm ước chung lớn nhất (UCLN) của hai số với yêu

cầu sử dụng thuật toán Euclid

Thuật toán Euclid: Nếu a chia hết cho b (a chia b dư 0) thì UCLN(a,b) bằng b

Nếu a chia b dư r thì UCLN(a,b) = UCLN(b,r)

Ý tưởng:

- Nhập a, b và gán r = a mod b

- Lặp với điều kiện r <> 0: b = r, a = b, r = a mod b

Code tham khảo:

Trang 13

- Cần hai biến F_1 và F có giá trị đầu là 1, 1.

- Thực hiện lặp cho đến khi F >= n

- Do yêu cầu chỉ in các số bé hơn n nên khi in cần thêm một lệnh kiểm tra

Code tham khảo:

Trang 14

- Khởi tạo i=1

- Sử dụng vòng lặp while – do với điều kiện i<=100 để tính tổng

- Sau mỗi lần lặp tăng i lên 1

Code tham khảo:

Var s,i: word;

- Khởi tạo i=1

- Sử dụng vòng lặp repeat – until với điều kiện i>100 để tính tổng

- Sau mỗi lần lặp tăng i lên 1

Code tham khảo:

Var s,i: word;

Trang 15

tổng quát hơn, có thể dùng cho mọi vòng lặp, nhưng thường sử dụng cho cáctrường hợp lặp với số lần chưa biết trước.

Ví dụ 15:

Viết chương trình in ra các số lẻ nhỏ hơn hoặc bằng số nguyên dương n(0<n<1018) Yêu cầu nhập lại nếu n <=0

Ý tưởng:

- Sử dụng kiến thức số lẻ đầu tiên bằng 1 Số lẻ sau bằng số trước cộng với 2

- Cho biến i có giá trị ban đầu bằng 1

- Dùng vòng lặp while do với điều kiện i < n và công việc bên trong là in i vàtăng i lên 2

Code tham khảo:

Bài 5: Viết chương trình kiểm tra một số có phải là số nguyên tố hay

không Biết số nguyên tố là số nguyên dương khác 1 và có đúng hai ước là 1 vàchính nó (0<n<=1010)

Bài 6: Đoạn chương trình sau dùng để làm gì? Hãy cho biết giá trị của biến

dem trong đoạn chương trình này:

Trang 16

For i:=1 to n do if i mod 3 =0 then dem:=dem+1;

Bài 7: Viết chương trình nhập 2 số nguyên m,n từ bàn phím (m<=n,

m,n<1015) Đếm xem trong đoạn [m,n] có bao nhiêu số chia hết cho cả 3 và 5,tính tổng các số đó

Bài 8: Nhập hai số nguyên a và b từ bàn phím (a<b) Xác định số lượng các

số nguyên lẻ i thỏa mãn điều kiện a<=i<=b Đưa ra màn hình số lượng tnhs được

Yêu cầu: Sử dụng vòng lặp với số lần chưa biết trước:

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

Viết chương trình in ra n số fibonaci đầu tiên (n <= 1000);

Bài 11:Sử dụng vòng lặp while – do viết chương trình 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

IV.Hiệu quả đạt được

Năm học 2019 – 2020, tôi được phân công giảng dạy môn Tin học các lớp11A1, 11A5, 11A6 tại trường THPT Quan Sơn khi chưa áp dụng phương phápcủa Sáng kiến kinh nghiệm kết quả học tập ở 3 lớp 11A1, 11A5, 11A6 như sau:

Bảng 1 Kết quả học tập cuối năm học 2019 – 2020

Qua bảng 1 kết quả học tập cuối năm học ta nhận thấy tỉ lệ học sinh có họclực khá ít, tỉ lệ học sinh học lực trung bình chiếm nhiều; bên cạnh đó vẫn còn số

ít học sinh có học lực yếu

Năm học 2020 – 2021, tôi được phân công giảng dạy môn Tin học các lớp11A1, 11A2, 11A3 tại trường THPT Quan Sơn tôi đã tiến hành áp dụng sáng

Ngày đăng: 21/05/2021, 22:36

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