Tải bản đầy đủ (.docx) (25 trang)

Sáng kiến kinh nghiệm, SKKN Rèn luyện kỹ năng lập trình Môn Tin học 11 cho học sinh qua cấu trúc rẽ nhánh và cấu trúc lặp

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 (152.54 KB, 25 trang )

1

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập- Tự do- Hạnh phúc
THUYẾT MINH MÔ TẢ GIẢI PHÁP
VÀ KẾT QUẢ THỰC HIỆN SÁNG KIẾN

1. Tên sáng kiến: Rèn luyện kỹ năng lập trình Mơn Tin học 11 cho học sinh qua cấu

trúc rẽ nhánh và cấu trúc lặp.
2. Ngày sáng kiến được áp dụng lần đầu: 09/2019
3. Các thông tin cần bảo mật (nếu có): Khơng
4. Mơ tả các giải pháp cũ thường làm: Trước khi áp dụng giải pháp này thì bản

thân tơi chưa xây dựng được hệ thống bài tập phù hợp với nhiều đối tượng học sinh.
Hạn chế khi chưa áp dụng giải pháp là học sinh tiếp cận với việc lập trình chậm, mất
nhiều thời gian hơn trong việc làm các bài tập và giải quyết các bài tốn 1 cách khó
khăn, học sinh khơng hứng thú khi học Tin học.
Khi chưa áp dụng giải pháp học sinh thường lúng túng trong việc tìm kiếm các
thuật toán phù hợp với bài toán cơ bản.
5. Sự cần thiết phải áp dụng giải pháp sáng kiến: Sau một thời gian áp dụng giải

pháp này tôi nhận thấy kỹ năng lập trình của các em tăng lên đáng kể, có hứng thú
học tập hơn. Nhiều học sinh đã biết vận dụng các thuật toán của các bài toán cơ bản
đã biết để giải quyết các bài toán mở rộng. Học sinh thấy u thích mơn Tin học hơn.
6. Mục đích của giải pháp sáng kiến: Sáng kiến này giúp học sinh có hứng thú
trong học tập mơn Tin học, đặc biệt là đối với việc rèn luyện kỹ năng lập trình để giải
quyết các bài tốn trong Tin học. Ngồi ra khi được rèn luyện kỹ năng lập trình với
các bài tốn cơ bản, học sinh sẽ có hứng thú tiếp tục tìm hiểu và giải quyết các bài
tốn khác khó hơn.



2

- Sáng kiến giúp cho giáo viên, cũng như học sinh có tư duy linh hoạt trong việc
lựa chọn, tìm kiếm và rèn luyện kỹ năng lập trình để phát triển năng lực tư duy. Sáng
kiến còn giúp cho học sinh thấy u thích mơn Tin học.
- Sáng kiến giúp cho giáo viên, học sinh có thêm hệ thống bài tập ở các chủ đề
về cấu trúc rẽ nhánh, cấu trúc lặp.
- Việc học sinh được rèn luyện kỹ năng lập trình ở các bài tốn cơ bản sẽ phát
triển được phẩm chất, năng lực của học sinh, giúp các em có tư duy tốt hơn khi học
tập các mơn khác như Toán học, khoa học tự nhiên. Và giúp các em có được những
kết quả cao hơn trong các kỳ kiểm tra, kỳ thi.
7. Nội dung:
7.1.

Thuyết minh giải pháp mới hoặc cải tiến

Môn Tin học đã được đưa vào các trường THPT trong phạm vi cả nước là một
môn học bắt buộc. Khi mới làm quen với môn Tin học, học sinh tỏ ra rất hào hứng vì
đây là mơn học rất bổ ích, hiện đại và mang tính thực tế cao. Tuy nhiên, khi học sang
Tin học 11 thì học sinh lại có thái độ thờ ơ trong việc học cũng như vận dụng Tin
học vào cuôc sống hằng ngày vì khi làm quen với việc lập trình học sinh thấy khó
khăn. Xuất phát từ thực tế giảng dạy bộ môn Tin học ở trường THPT Lạng Giang số
1 tôi luôn đặt ra câu hỏi tại sao một mơn học có tính tư duy cao, mới mẻ, hấp dẫn
vậy mà không thu hút được học sinh tiếp thu bài và vận dụng vào cuộc sống. Tuy
nhiên trong cùng một trường với các đối tượng học sinh khác nhau giáo viên có thể
áp dụng nhiều biện pháp khác nhau để rèn luyện kỹ năng lập trình để đạt kết quả tốt.
Các giáo viên đều hướng dẫn cho học sinh biết một bài tốn có thể giải được với
nhiều thuật toán khác nhau và mỗi thuật toán chỉ giải được một bài toán hoặc một
lớp bài toán, nhưng thực tế cho thấy đứng trước một bài toán tin học học sinh thường

lúng túng khi xác định thuật tốn hoặc khơng xác định đươc thuật tốn, việc này có
thể do nhiều nguyên nhân … Tuy nhiên khi cho một bài toán tin học có dạng cơ bản
nào đó trong sách giáo khoa, hoặc bài tốn cơ bản nào đó mà các em biết thì các em
có thể xây dựng vàg hứng thú để xây dựng thuật toán cho bài toán đặt ra. Vì vậy


3

giáo viên có thể chọn các bài tốn cơ bản để học sinh hứng thú, phát triển để rèn
luyện kỹ năng lập trình cho học sinh. Dĩ nhiên cách làm này không mới với giáo
viên nhưng cách chọn các bài tốn cơ bản như thế nào để học sinh có thể vận dụng
và rèn luyện kỹ năng lập trình đó lại là điều đáng quan tâm.
Giải pháp “Rèn luyện kỹ năng lập trình Mơn Tin học 11 cho học sinh qua cấu
trúc rẽ nhánh và cấu trúc lặp” tôi muốn trình bày kinh nghiệm trong việc rèn luyện
kỹ năng lập trình cơ bản cho học sinh khi học mơn Tin học 11.
Giải pháp:

7.2.

- Tên giải pháp: Rèn luyện kỹ năng lập trình Mơn Tin học 11 cho học sinh qua
cấu trúc rẽ nhánh và cấu trúc lặp.
- Nội dung:
A. Các bước tiến hành thực hiện giải pháp
1. Xây dựng hệ thống bài tập để rèn luyện kỹ năng lập trình thông qua các buổi học,
mỗi buổi học nên chọn một số bài toán cơ bản để học sinh tiếp xúc và làm quen với
việc lập trình.
Bước 1: Chọn bài tốn cơ bản hoặc bài toán quen thuộc với học sinh
Bước 2: Xây dựng thuật toán cơ bản (Chỉ cần học sinh lập trình được mà chưa cần
quan tâm đến các yếu tố như dữ liệu, phạm vi giá trị của biến, thời gian chạy chương
trình …)

Bước 3: Xây dựng thuật toán ở mức cao hơn (Quan tâm đến các yếu tố như: Dữ liệu,
phạm vi giá trị của biến, thời gian chạy chương trình …)
2. Tổ chức cho học sinh hình thành kỹ năng lập trình thơng qua các buổi thực hành có
sự hướng dẫn của giáo viên tại phịng máy.
3. Tổ chức kiểm tra để thu thập thông tin về khả năng rèn luyện kỹ năng lập trình của
học sinh.


4

B. Nội dung của sáng kiến này được triển khai thơng qua các buổi học trực tiếp
trên lớp.
Trong chương trình Tin học lớp 11, chúng ta có thể sử dụng một số hệ thống bài
tập cơ bản sau để rèn luyện kỹ năng lập trình cho học sinh:
1. Các bài toán làm quen với câu lệnh gán
Cú pháp câu lệnh gán trong Pascal:
<tên biến>:= <Biểu thức>;
Trong đó: tên biến là tên của biến đơn, kiểu của giá trị biểu thức phải phù hợp với
kiểu của biến
Chức năng: đặt cho biến có tên ở vế trái dấu “:=” giá trị mới bằng giá trị của biểu
thức ở về phải.
VD: x1:=(-b-sqrt(b*b-4*a*c))/(2*a);
Chú ý: biến kiểu thực có thể nhận giá trị kiểu nguyên và biến kiểu xâu có thể nhận
kiểu kí tự, ngược lại thì khơng.
Trước tiên cho học sinh thấy được cái hay trong phép gán của tin học, qua một số
bài tập này chắc chắn ta sẽ phát huy được tính kích thích, hăng say của các học
sinh mà chưa từng được học về tin lập trình:
Bài tốn 1. Viết chương trình tráo đổi giá trị giữa hai biến a và b.
Phương pháp giải:
Cách 1: Dùng biến trung gian tg:

tg := a;
a := b;
b := tg;


5

Đoạn chương trình khơng dùng biến trung gian sau là sai vì giá trị ban đầu của
biến a bị mất, khi đó a = b và nhận giá trị ban đầu của b:
a := b;
b := a;
Cách 2: Không dùng biến trung gian:
a := a + b;
b := a - b;
a := a – b;
Bài toán 2. Cho a, viết chương trình tính a10 và a3 với u cầu khơng được dùng
quá bốn phép toán.
Phương pháp giải:
Dùng thêm biến b để nhận giá trị:
b := a*a;
a := a*b; writeln( ‘a mu 3= ’, a);
a := a*b;
a := a*a; writeln(‘a mu 10= ’, a)
Bài tốn 3. Cho a, viết chương trình tính a5 và a13 với u cầu khơng được dùng
q năm phép toán.
Phương pháp giải:
Dùng thêm biến b:
b := a;
a := a*a; { ta có a2 }
a := a*a; { ta có a4 }

b := b*a; { ta có a5 }
writeln(‘a mu 5= ’, b);
a := a*a*b; { ta có a13 }
writeln(‘a mu 13= ’, a);


6

Bài tốn 4. Cho a, viết chương trình tính a 4 , a12 và a28 với yêu cầu không được
dùng quá sáu phép toán.
Phương pháp giải:
Dùng thêm biến b:
a := a*a; { ta có a2 }
a := a*a; writeln( ‘a mu 4= ’, a);
b:=a;
a := a*a*a; writeln( ‘a mu 12= ’, a);
a := a*a; { ta có a2 }
a := a*b; writeln(‘a mu 28= ’, a)
2. Các bài toán với cấu trúc rẽ nhánh và cấu trúc lặp
* Cú pháp câu lệnh rẽ nhánh:
Câu lệnh if – then
Dạng thiếu
if <điều kiện> then <Câu lệnh1>;…
Nếu điều kiện đúng thì thực hiện <câu lệnh 1>;
Dạng đủ
if <điều kiện> then <Câu lệnh1> Else <Câu lệnh2>;
Nếu điều kiện đúng thì thực hiện <câu lệnh1> ngược lại thực hiện <câu lệnh2>;
* Cú pháp câu lệnh lặp
· Trong lập trình, có những thao tác phải lặp lại nhiều lần, khi đó ta gọi là cấu trúc lặp.
Lặp thường có 2 loại:



7

- Lặp với số lần biết trước.
- Lặp với số lần chưa biết trước.
Cấu trúc lặp với số lần biết trước và câu lệnh for-do.
· Lặp dạng tiến:
for <biến đếm> := <giá trị đầu>
to <giá trị cuối> do <câu lệnh> ;
· Lặp dạng lùi:
for <biến đếm> := <giá trị cuối>
downto <giá trị đầu> do <câu lệnh> ;

Trong đó:
+ Biến đếm thường là biến kiểu 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 phải
nhỏ hơn hay bằng giá trị cuối.
+ Ở dạng lặp tiến: biến đếm tự tăng dần từ giá trị đầu đến giá trị cuối.
+ Ở dạng lặp lùi: biến đếm tự giảm dần từ giá trị cuối đến giá trị đầu.
+ Tương ứng với mỗi giá trị của biến đếm, câu lệnh sau do thực hiện 1 lần.
Cấu trúc lặp với số lần chưa biết trước và câu lệnh while-do.


8

Cú pháp:
while <điều kiện> do <câu lệnh> ;
Trong đó:
- Điều kiện là biểu thức quan hệ hoặc logic.

- Câu lệnh là một câu lệnh trong Pascal.
- Ý nghĩa: Khi điều kiện cịn đúng thì cịn thực hiện câu lệnh sau do, sau đó lại quay
lại kiểm tra điều kiện.
Qua nội dung lý thuyết về cấu trúc rẽ nhánh và cấu trúc lặp. Giới thiệu với
học sinh định lí Bohn Jacopini: Mọi q trình tính tốn đều có thể mơ tả và thực
hiện dựa trên ba cấu trúc cơ bản là cấu trúc tuần tự, cấu trúc rẽ nhánh và cấu trúc
lặp. Vậy qua đó học sinh sẽ cần nắm chắc việc sử dụng cấu trúc tuần tự, cấu trúc rẽ
nhánh và cấu trúc lặp để giải quyết các bài toán trong Tin học.
Sau khi học sinh hiểu ý nghĩa và vận dụng thành thạo lệnh gán ta hình
thành cho học sinh biết cách tư duy để giải và tối ưu các bài toán chỉ sử dụng hai
cấu trúc cơ bản là: cấu trúc rẽ nhánh và lặp.
Bài toán 5. Cho hai số a, b. Viết chương trình tìm số lớn nhất.
Phương pháp giải:
Cách 1: Sử dụng câu lệnh If .. Then dạng thiếu
If a> b then writeln(‘a la so lon nhat’);
If b>a then writeln(‘b la so lon nhat’);
Cách 2: Sử dụng câu lệnh If .. then dạng đủ
If a>b then writeln(‘a la so lon nhat’)


9

Else writeln(‘b la so lon nhat’);
Khi sử dụng 2 cách trên học sinh sẽ biết được cách sử dụng cấu trúc lệnh rẽ
nhánh ở 2 dạng cơ bản: dạng thiếu và dạng đủ.
Bài toán 6. Cho ba số a, b, c. Viết chương trình tìm số lớn nhất và nhỏ nhất
trong ba số.
Phương pháp giải:
Cách 1: Sẽ sử dụng các thông thường mà học sinh hay làm
If (a>b)and(a>c) then writeln(‘a la so lon nhat’);

If (aIf (b>a)and(b>c) then writeln(‘b la so lon nhat’);
If (bIf (c>b)and(c>a) then writeln(‘c la so lon nhat’);
If (cỞ cách này học sinh sẽ hiểu về cấu trúc rẽ nhánh trong lập trình.
Cách 2: Sử dụng thuật tốn tối ưu hơn dùng biến Min và biến Max
Max: = a; Min:=a;
If b>Max then Max:= b;
If c>Max then Max:=c;
If bIf cSau khi thực hiện cách 2 học sinh sẽ hiểu hơn về cách sử dụng cấu trúc rẽ
nhanh trong lập trình.


10

Bài tốn 7. Viết chương trình giải bất phương trình bậc 1 (ax + b >0)
Phương pháp giải: Dựa vào kiến thức giải phương trình bậc 1 trong tốn học.
Học sinh có thể đưa ra thuật tốn biện luận giải bài toán. Bài toán này là bài toán cơ
bản giúp học sinh làm quen với cấu trúc rẽ nhánh.
If a<>0 then
If a>0 then Writeln('Bat phuong trinh co nghiem: x>=',-b/a: 4: 2) Else
Writeln('Bat phuong trinh co nghiem: x<=',-b/a: 4: 2)
Else
If b>=0 then Writeln('Bat phuong trinh co vo so nghiem') Else
writeln('Bat phuong trinh vo nghiem');
Bài tốn 8. Viết chương trình giải phương trình (ax2 + bx + c =0)
Phương pháp giải: Sau khi học sinh rèn luyện khả năng lập trình với bài tốn

giải phương trình bậc 1. Bài tốn này sẽ là bài tốn cơ bản phát triển khả năng lập
trình của học sinh với mức độ khó hơn. Học sinh sẽ dùng câu lệnh rẽ nhánh dạng đủ
để giải quyết.
If a=0 then
If b=0 then
If c=0 then
Writeln('Phuong trinh co vo so nghiem')
Else Writeln('Phuong trinh vo nghiem')
Else Writeln('Phuong trinh co mot nghiem: x=',-c/b: 4: 2)
Else
Begin


11

d:=b*b-4*a*c;
If d=0 then Writeln('Phuong trinh co nghiem kep: x=',-b/(2*a): 4: 2) Else
if d<0 then Writeln(‘phuong trinh vo nghiem’)
Else
Begin
x1 :=(-b+sqrt(d))/(2*a); x2:=(-b - sqrt(d))/(2*a);
Write('Phuong trinh co hai nghiem: ‘);
Writeln(‘ x1=',x1: 4: 2,' va x2=',x2: 4: 2);
End;
End;
Bài tốn 9. Viết chương trình nhập ba số dương bất kỳ, kiểm tra ba số vừa nhập có
phải là ba cạnh của tam giác khơng? Nêu phải thì tính chu vi và diện tích của tam giác
đó.
Phương pháp giải: Trong Tốn học học sinh đã biết điều kiện cần và đủ để ba
số là chiều dài ba cạnh của một tam giác, biết cách tính chu vi và diện tích của tam

giác khi biết chiều dài ba cạnh. Qua bài toán này học sinh sẽ thực hiện tốt cấu trúc rẽ
nhánh vào lập trình
If(a+b>c) And(a+c>b) And(b+c>a) then
Begin
Cv:=a+b+c; p:=c/2; s:=sqrt(p*(p-a)*(p-b)*(p-c));
Writeln(‘ba so vua nhap la ba canh cua tam giac’);
Writeln(‘ chu vi cua tam gia la’, cv: 4: 2, ‘ dien tich cua tam giac la’,
s:6:2);


12

End
Else Writeln(‘ba so vua nhap khong phai la ba canh cua tam giac’);
Bài tốn 10. Viết chương trình nhập vào số nguyên dương N từ bàn phím. Sử dụng
1+

câu lệnh lặp FOR tính tổng sau: S=

1 1
1
+ + ... +
2 3
N

và đưa kết quả ra màn hình.

Phương pháp giải: Đây là bài tốn có trong sách giáo khoa và học sinh cũng
đã được làm quen thơng qua các ví dụ nên dễ dàng lập trình được:
S:=0;

For i:=1 to N do S:=S + 1/i;
Writeln(‘Tong = ‘, S:10:2);
Từ bài toán này ta yêu cầu học sinh làm bài tập 2 như sau:
Bài tập 11: Sửa lại chương trình ở bài tập 1 nhưng sử dụng câu lệnh lặp WHILE tính
1+

tổng sau: S=

1 1
1
+ + ... +
2 3
N

và đưa kết quả ra màn hình.

Phương pháp giải:
+ Từ màn hình soạn thảo của Pascal yêu cầu học sinh vào File chọn Save As để lưu lại
tên tệp với tên bài 2 sau đó sửa lại chương trình bài 1 để được bài 2, bỏ bớt các biến
không dùng đến (cách làm này rất tiết kiệm thời gian vì chương trình bài 2 mở rộng từ
bài 1).
+ Ở bài này với học sinh khá, giỏi ở một số trường có chất lượng điểm đầu vào cao có
thể giải quyết đơn giản, cịn học sinh ở một số trường có điểm đầu vào thấp thì học
sinh có thể băn khoăn ở việc tìm điều kiện của vịng lặp WHILE, đến đây giáo viên có


13

thể hướng dẫn cách chuyển đổi từ vòng lặp For–To-Do (Bài tập 1) sang vòng lặp
WHILE , chẳng hạn:

i:= <GTđầu>;
While i <= <Gtcuối> Do
For i:= <GTđầu> To <Gtcuối> Do

Begin

<câu lệnh>;

<câu lệnh>;
i:=i+1;
End;

Học sinh sẽ tự mình hồn thành được chương trình.
Bài tập 12: Viết chương trình nhập từ bàn phím số nguyên dương N, tính tổng các
ước thực sự của N và in ra màn hình. Ví dụ: N=6 thì tổng các ước là 1+2+3 =6; N=9
thì tổng các ước là 1+ 3 =4
Phương pháp giải: Học sinh biết để kiểm tra xem số i có phải là ước của số N
hay khơng thì dùng phép tốn Mod (N mod i = 0), giáo viên chỉ cần hướng dẫn học
sinh duyệt các số i đó trong khoảng từ 1 đến (N div 2) là học sinh có thể làm được
nhanh chóng, ta sẽ có đáp án của bài này có thể như sau:
Tg:=0;
For i:=1 to N div 2 do
If n mod i =0 then tg:=tg+i;
Writeln(‘Tong cac uoc la= ‘, tg:5);
Giáo viên có thể yêu cầu học sinh nhập một vài giá trị N để xem kết quả. Sau đó yêu
cầu học sinh làm bài tập 13 như sau:


14


Bài tập 13: Số N được gọi là số hoàn hảo nếu tổng các ước thực sự của N bằng chính
nó. Viết chương trình nhập từ bàn phím số ngun dương N, thơng báo ra màn hình
DUNG nếu N là số hồn hảo, ngược lại thì thơng báo KHONG.
Phương pháp giải: Học sinh dễ dàng nhận thấy cách làm bài 2 sẽ tương tự cách
làm bài 1, chỉ thêm một cơng việc đó là kiểm tra xem tổng các ước đó có bằng N hay
khơng? Học sinh sẽ nhanh chóng sao chép chương trình bài 12 và sửa lại để được
chương trình bài 13 như sau:
Tg:=0;
For i:=1 to N div 2 do
If n mod i =0 then tg:=tg+i;
If tg=N then Writeln(‘DUNG’) else writeln(‘KHONG’);
Tương tự như vậy ta sẽ yêu cầu học sinh làm bài tập 14 như sau:
Bài tập 14: Viết chương trình in ra màn hình các số hồn hảo trong khoảng từ a đến b
(với 1Phương pháp giải: Giáo viên để cho học sinh tự làm, nếu còn học sinh nào
cịn lúng túng thì mới hướng dẫn. Tuy nhiên thì với bài 2 đã biết cách làm thì học sinh
cũng có thể nhanh chóng hồn thiện được bài 3 có thể chưa kiểm tra được điều kiện
nhập a,b như sau:
For k:=a to b do
Begin
Tg:=0;
For i:=1 to K div 2 do
If K mod i =0 then tg:=tg+i;


15

If tg=K then Writeln(k);
End;
Giáo viên yêu cầu học sinh test với một số bộ dữ liệu tương ứng với các giá trị của a,

b.
Bài tập 15: Viết chương trình nhập vào hai số nguyên dương a, b bất kỳ, hiển thị ước
chung lớn nhất của hai số và bội chung nhỏ nhất của hai số đó.
Phương pháp giải: Học sinh dựa vào kiến thức ước chung lớn nhất và bội
chung nhỏ nhất của 2 số được học trong Toán học để giải bài toán
While (a<>b) do Begin
If a>b then a:=a-b else b:=b-a;
End;
uc:=a; bc:=(a*b)/uc;
Writeln(‘uoc chung lon nhat cua ‘,a,’ va ’,b,’ la

‘,uc);

Writeln(‘boi chung nho nhat cua ‘,a,’va ’,b,’ la

‘,bc);

Bài tập 16: Tính hàm lũy thừa an ở đây a thực và n tự nhiên được nhập vào từ bàn
phím.
Phương pháp giải:
i:=1; giatri:=1;
While i <= n Do Begin
giatri:=giatri * a;
i:=i+1;
End;


16

Writeln(' a mu n bang: ', giatri: 8: 2 );

Bài tập 17: Viết chương trình nhập vào từ bàn phím số ngun N, Kiểm tra và thơng
báo ra màn hình N là số nguyên tố hoặc N không là số nguyên tố.
Phương pháp giải: Bài toán này học sinh đã được tìm hiểu thuật tốn từ lớp 10,
nếu học sinh qn giáo viên có thể nêu lại thuật tốn để học sinh nhớ lại. Ở đây ta
chưa cần hướng dẫn cho học sinh thuật toán tốt để kiểm tra số ngun tố. Chương
trình có thể như sau:
Program b17;
Var

i,n:integer;

kq:boolean;
begin
write('N = ');readln(n);
kq:=true;{Giả sử N là SNT, Gán kq bằng true}
if n<=1 then kq:=false
else
for i:=2 to trunc(sqrt(n)) do{i chạy từ 2 đến phần nguyên căn bậc 2 của
N}
if n mod i=0 then{Nếu n chia hết cho i thì}
begin
kq:=false;{Gán kq=false}
break;{thốt vịng lặp bằng lệnh Break}
end;


17

if kq then writeln('So nguyen to') else write('Khong la so nguyen to');
readln;

end.
Bài tập 18: Viết chương trình nhập vào từ bàn phím số ngun N (N>10), in ra màn
hình các số nguyên tố trong khoảng từ 1 đến N.
Phương pháp giải: Học sinh sẽ áp dụng thuật toán của bài 17 để giải quyết bài
18. Giáo viên nên để học sinh tự làm, nếu cịn lúng túng thì mới hướng dẫn thuật toán.
Sau khi áp dụng bài 17, sao chép và sửa lại chương trình bài 17 để có chương trình
bài 18, chương trình có thể được học sinh viết như sau:
Program b18;
Var

i,k,n:integer;

kq:boolean;
begin
write('N = ');readln(n);
For k:=1 to N do
begin
kq:=true;{Giả sử k là SNT, Gán kq bằng true}
if K<=1 then kq:=false
else
for i:=2 to trunc(sqrt(K)) do{i chạy từ 2 đến phần nguyên căn bậc 2 của k}
if k mod i=0 then{Nếu n chia hết cho i thì}
begin


18

kq:=false;{Gán kq=false}
break;{thốt vịng lặp trong bằng lệnh Break}
end;

if kq then write(k:5);
end;
readln;
end.
Sau khi học sinh hồn thành chương trình giáo viên nên đưa ra một số bộ test tương
ứng với các giá trị của N để học sinh chạy thử và hồn thiện điều khiện nhập dữ liệu
cho chương trình
Bài tập 19: Cho số nguyên N(nhập từ bàn phím), lập chương trình phân tích N thành
tổng 2 số ngun tố. Nếu có in ra các cách phân tích. VD: 6 = 3+ 3
Phương pháp giải: Học sinh sẽ vận dụng thuật toán của bài 1 và 2 để giải quyết bài 3.
Giáo viên nên để học sinh tự làm, nếu còn lúng túng thì mới hướng dẫn thuật tốn.
Chương trình có thể được học sinh viết như sau:
program bai19;
var N,i , j, k, m,d : longint;
kq1, kq2:boolean;
begin
writeln(‘Nhap N= ‘); readln(N);
for i:=2 to N-1 do

{vong lap 1}

begin {kiem tra xem so i co phai la so nguyen to hay khong}


19

kq1:=true;
for k:=2 to trunc(sqrt( i )) do

{vong lap 2}


if i mod k =0 then
begin
kq1:=false;{do i chia het cho k nen i khong nguyen to}
break;
end;
if kq1 then {neu so i la snto thi tim so j la so nto ma i+j=N}
for j := i to N-1 do

{vong lap 3}

begin {kiem tra xem so j co phai la so nguyen to hay khong}
kq2:=true;
for m:=2 to trunc(sqrt( j )) do
if j mod m=0 then
begin
kq2:=false;{Gan kq2=false, tuc j khong la so nto}
break;
end;
if kq2 then
if i+j = N then
begin
writeln(N ,' = ', i, ' + ', j);


20

d:=d+1;
end;
end;

end;
readln;
End.
Giáo viên giải thích cho học sinh tại sao ở {vong lap 1} biến i lại nhận giá trị
bắt dầu từ 2? Tại sao không cần câu lệnh kiểm tra i<=1 trước {vong lap 2} giống như
trong thuật toán kiểm tra tính nguyên tố của một số nguyên i? Tại sao ở {vong lap 3}
biến j lại nhận giá trị bắt dầu từ i mà không phải là 1?
3. Các bài tốn rèn luyện kỹ năng lập trình với cấu trúc rẽ nhánh và cấu trúc
lặp.
Bài tập 20: Lập chương trình tìm tất cả các số hồn hảo nhỏ hơn số nguyên N (N
>=10), in các số hoàn hảo và và các ước của số tìm được ra màn hình. Giá trị của N
được nhập từ bàn phím.
Tương tự ta yêu cầu học sinh sao chép sửa lại chương trình bài tập 14 để được bài tập
15.
Bài tập 21: Hai số a và b được gọi là bạn của nhau nếu tổng các ước của a bằng b và
ngược lại tổng các ước của b bằng a. Viết chương trình tìm các số bè bạn như trên
trong khoảng từ m đến n (m < n, m và n nhập từ bàn phím).
Tương tự ta yêu cầu học sinh sao chép sửa lại chương trình bài tập 15 để được bài tập
16.
Bài tập 22: (Bài tập về nhà)


21

Viết chương trình nhập vào 2 số a, b (1số lượng các số chẵn, số lượng các số lẽ, số lượng các số hoàn hảo trong khoảng từ a
đến b, với a, b được nhập từ bàn phím.
Bài tập 23: (Bài tập về nhà)
Em hãy dùng câu lệnh while để viết lại chương trình của bài 15 và bài 16.
Yêu cầu: Kiểm tra điều kiện nhập dữ liệu vào. Viết chương trình ra giấy và nộp lại

cho giáo viên.
Bài tập 24: (Bài tập về nhà)
Nhập vào một số tự nhiên N (1 < N ≤ 65355). Hãy kiểm tra số N vừa nhập có
phải là số ngun tố hay khơng? Nếu đúng thì thơng báo ra màn hình đây là số
nguyên tố, ngược lại thì phân tích số N thành tích các thừa số nguyên tố.
Ví dụ:
Dữ liệu vào

Dữ liệu ra

Nhap 1 so tu nhien: 37

37 la so nguyen to

Nhap 1 so tu nhien: 30

30 = 2. 3. 5

Nhap 1 so tu nhien: 3456

3456 = 2. 2. 2. 2. 2. 2. 2. 3. 3. 3

Nhap 1 so tu nhien: 677

677 la so nguyen to

Nhận xét: Dựa vào thuật toán kiểm tra số nguyên tố giáo viên nên để học sinh làm bài
tập này sau đó hướng dẫn và cũng cố lại thuật toán.
Bài tập 25: (Bài tập về nhà)
Số siêu nguyên tố là số nguyên tố mà khi bỏ một số tuỳ ý các chữ số bên phải

của nó thì phần cịn lại vẫn tạo thành một số nguyên tố.


22

Ví dụ 37337 là một số siêu ngun tố có 5 chữ số vì 3733, 373, 37,3 cũng là các số
nguyên tố.
Hãy viết chương trình đọc dữ liệu vào là một số nguyên N (0< N <10) từ bàn phím và
đưa ra kết quả ra màn hình là các số siêu nguyên tố có N chữ số cùng số lượng của
chúng.
Ví dụ khi chạy chương trình:
Dữ liệu vào

Dữ liệu ra

5

23333 23339 23399 23993 29399 31193
31379 37337 37339 37397 59393 59399
71933 73331 73939
Co 15 so sieu nguyen to co 5 chu so

- Kết quả khi thực hiện giải pháp:
+ Bảng thống kê chất lượng giảng dạy môn Tin học khối 11 3 năm liên tiếp:
Tổn
Năm học

g số
HS


8.0-10
SL

ĐIỂM
5.0-6.4

6.5-7.9

SL

3.5-4.9

%

SL

0-3.4
S

%

SL

%

%

17.7

41


70.0

597 106

6
21.7

8
37

2
58.4

68

9
19.1

0

0

0

0

647 141

9

27.9

8
32

2
50.6

124

7
20.8

1

0.15

0

0

634 177

2

1

3

132


2

4

0.63

0

0

L

(*)
2018 - 2019
2019 - 2020
Học kỳ I
2020 - 2022

%

11.3


23

Qua biểu đồ số liệu trên đã thấy được sự tiến bộ của học sinh khi học chương
trình Tin học lớp 11. Có sự thay đổi rõ ràng về chất lượng. Trước khi áp dụng giải
pháp tỷ lệ học sinh đạt học lực giỏi thấp hơn sau khi áp dụng từ năm 2019 – 2020.
+ Học sinh tham gia kỳ thi học sinh giỏi môn Tin học khối 11:

Số lượng học

Số lượng học

Năm học

sinh tham gia

sinh tham gia
thi

2018 -

học đội tuyển
2

2019
2019 -

4

2020
2021 -

5

Giải

2


Khơng có giải

2

1 Nhì, 1 Khuyến khích

Ghi
chú

2
1 Nhì
2022
Qua bảng số liệu trên đã thấy được số học sinh tham gia học đội tuyển tăng

lên, học sinh có hứng thú và u thích mơn Tin học hơn. Chất lượng giải cũng tăng
lên khi áp dụng sáng kiến.


24

Thuyết minh về phạm vi áp dụng sáng kiến

7.3.

- Sáng kiến của tôi được áp dụng tại các lớp mà bản thân tơi giảng dạy
trong chương trình Tin học lớp 11: Năm học 2019 – 2020: lớp 11A1, 11A11; Năm học
2020 – 2021: lớp 11A1, 11A11.
- Hiện nay, sáng kiến đã được áp dụng tại trường THPT Lạng Giang số 1
và mang lại hiệu quả. Hiện tại sáng kiến này không chỉ được bản thân tôi áp dụng khi
giảng dạy môn Tin học lớp 11 mà đã được chia sẻ đến các đồng nghiệp trong tổ cùng

áp dụng.
- Sáng kiến được áp dụng khi dạy đội tuyển học sinh giỏi mơn Tin học khối
11.
7.4.

Thuyết minh về lợi ích kinh tế, xã hội của sáng kiến (Đánh giá lợi ích thu

được hoặc dự kiến lợi ích có thể thu được do áp dụng giải pháp trong đơn kể cả áp
dụng thử tại cơ sở):
 Việc áp dụng sáng kiến này vào thực tế giảng dạy trong các năm học vừa qua

đã thể hiện hiệu quả khi kết quả cuối năm học môn Tin học của học sinh được
nâng cao.
 Học sinh có hứng thú và u thích mơn Tin học hơn.
 Học sinh được nâng cao khả năng lập trình với các bài tốn cơ bản, viết được

các chương trình đối với các bài toán mở rộng.
 Kết quả khi áp dụng sáng kiến này đối với đội tuyển học sinh giỏi lớp 11 của

nhà trường có kết quả như sau: Năm 2019 – 2020: 1 giải nhì, 1 giải khuyến
khích. Năm 2020 – 2021: 01 giải nhì.
* Cam kết: Chúng tôi cam đoan những điều khai trên đây là đúng sự thật và
không sao chép hoặc vi phạm bản quyền.


25

Xác nhận của cơ quan, đơn vị
(Chữ ký, dấu)


Tác giả sáng kiến
(Chữ ký và họ tên)

Thân Mạnh Cường


×