Sáng kiến kinh nghiệm Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh Lớp 10 tro

Năm học 2023 - 2024 bắt đầu áp dụng chương trình giáo dục phổ thông mới (GDPT 2018) cho lớp 10. Điểm mới quan trọng nhất của chươngtrình giáo dục lớp 10 năm nay là cho phép học sinh được lựachọn môn học theo năng lực, sở thích của mình và theo xu hướng nghề nghiệp dự định chọn trong tương lai, trong đó môn Tin học được nhiều học sinhlựa chọn. Chương trình môn Tin học lớp 10 kế thừa toàn bộ phẩm chất chung, năng lực chủ yếu chung và năng lực tin học đã được hình thành, phát triển ở giai đoạn giáo dục cơ bản. Nội dung cốt lõi của môn Tin học 10 được mô tả theo từng chủ đề, trong đó chủ đề “Giải quyết vấn đề với sự trợ giúp của máy tính” về Lập trình cơ bản, đây là một chủ đề lớn, quan trọng chiếm phần lớn nội dung cốt lõi của môn Tin học ở lớp 10. Nội dung lập trình cơ bản với những nội dung đổi mới rất căn bản: dùng NNLT Python để minh họa và thực hành. Lập trình cơ bản là nội dung chung cho cả hai định hướng Tin học ứng dụng và Khoa học máy tính. Với mục tiêu hình thành và phát triển tư duy máy tính, nội dung Lập trình cơ bản được chọn lọc để thích hợp với tư duy học sinh phổ thông.

Trong các NNLT bậc cao đều có câu lệnh thể hiện cấu trúc lặp của thuật toán, với lập trình trên Python thì việc học sinh nắm chắc các vòng lặp là chìa khóa để giải quyết các vấn đề liên quan tới dãy dữ liệu. Là một giáo viên dạy môn Tin học, bên cạnh bên cạnh dạy học các kiến thức phổ thông về tin học thì việc bồi dưỡng học sinh khá giỏi cũng hết sức quan trọng, trách nhiệm của người giáo viên Tin học là tổ chức các hoạt động học tập cho học sinh để phát triển hệ thống năng lực mà một học sinh phổ thông cần phải có.

Qua quá trình dạy học, tôi thấy chủ đề “Câu lệnh lặp” là môt nội dung rất quan trọng trong việc tiếp cận NNLT bậc cao, xử lý cấu trúc lặp cũng là yêu cầu trong việc xây dựng các phần mềm ứng dụng thực tiễn, nhưng việc dạy học chủ đề này vẫn còn gặp nhiều khó khăn, hiệu quả chưa cao. Với niềm đam mê chuyên môn, ham học hỏi tôi luôn tìm tòi nghiên cứu và đã có những giải pháp tốt nhất nhằm đem lại hiệu quả cao trong công tác dạy học và bồi dưỡng học sinh khá giỏi và đã đạt được những kết quả như mong đợi. Vì vậy tôi mạnh dạn chia sẻ sáng kiến chủ đề “Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 trong NNLT Python”.

docx 31 trang Chăm Nguyễn 16/03/2025 330
Bạn đang xem 20 trang mẫu của tài liệu "Sáng kiến kinh nghiệm Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh Lớp 10 tro", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

Tóm tắt nội dung tài liệu: Sáng kiến kinh nghiệm Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh Lớp 10 tro

Sáng kiến kinh nghiệm Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh Lớp 10 tro
hư sau:
Viết chương trình in ra số fibonaci thứ n với n nhập từ bàn phím.
Ý tưởng giải thuật
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.
Tham khảo chương trình sau:
n = int (input("n = ")) if n <= 2:
print ("Số fibonaci thứ ", n , " là ", 1) else :
f1 = 1
f2 = 1
for i in range(3, n+1): f = f1 + f2
f1 = f2 f2 = f
print ("Số fibonaci thứ ", n , " là ", f)
Bài toán 1.8:
Viết chương trình tính tổng 𝑆 = √2 + √4 + ⋯ + √2𝑛 , với n là một số tự nhiên
nhập từ bàn phím.
Ý tưởng giải thuật
n dấu căn
Đặt 𝑆𝑖 = √2𝑖 + √2(𝑖 + 1) + ⋯ + √2𝑛	ta có công thức truy hồi sau:
{𝑆𝑛+1 = 0,	𝑆𝑛 = √2𝑛
𝑆𝑖	=	√2𝑖 + 𝑆𝑖+1
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 câu lệnh for là thích hợp nhất.
Tham khảo chương trình sau:
import math
n= int (input ("n="))
S=0
for i in range (n, 0, -1): S = math.sqrt(2*i + S)
print (S)
Bài toán 1.9:
Viết chương trình tính tổng sau:
S = 1 + 2 + 3 + .. + n +  cho đến khi S > 105
Ý tưởng giải thuật
Ta có thể mô tả thuật toán giải bài toán trên bằng cách liệt kê như sau: B1: Gán S ← 0, i ← 0;
B2: Nếu S>105 thì chuyển đến B5; B3: i ← i+1;
B4: S = S+i, rồi quay lại B2;
B5: Đưa ra S rồi kết thúc.
Số lần lặp chưa biết trước (phụ thuộc vào tổng S) nên ta sử dụng cấu trúc lặp while
Tham khảo chương trình sau:
S=0
i=0
while S < 100000 : i = i+1
S = S +i
print (S)
Bài luyện tập 2:
Mục tiêu: Rèn luyện kỹ năng sử dụng câu lệnh lặp lồng nhau để áp dụng giải các bài toán liên quan.
Bài toán 2.1:
Viết chương trình nhập vào số nguyên dương n và in ra các số hoàn hảo nhỏ hơn n.
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 hảo. Ví dụ: Số nguyên 6 có các ước thực sự là 1, 2, 3. Tổng là 1 + 2 + 3 = 6.
Ý tưởng giải thuật
Sử dụng 2 vòng lặp for lồng nhau để kiểm tra tính hoàn hảo và in ra các số hoàn hảo từ 1 đến n-1.
Để kiểm tra số x là hoàn hảo thì
+ Dùng biến x 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 chạy i chạy từ 1 đến x-1, nếu i là ước của x thì cộng thêm i vào S.
Nếu S = x thì in số x.
Quay lại kiểm tra giá trị tiếp theo (x+1).
Ước lớn nhất của số nguyên x không kể chính nó luôn ≤ [𝑥]. Vì vậy, thay vì
2
duyệt i từ 1 đến x-1 ta chỉ cần duyệt i từ 1 đến [𝑥], việc làm này sẽ làm giảm đáng kể
2
số lần lặp do đó có thể tiết kiệm thời gian chạy chương trình (nhất là với n lớn).
Tham khảo chương trình sau:
n = int (input("n = ")) for x in range(1, n):
S = 0;
for i in range(1, x//2+1): if x % i == 0:
S=S+i
if S == x : print(x, end=", ")
Bài toán 2.2:
Viết chương trình in bảng số từ 1 đến 100 In một bảng số thỏa mãn điều kiện:
+ Bảng số gồm 10 hàng và 10 cột
+ Các giá trị trong Pythonột là liên tiếp nhau
+ Các giá trị trong hàng hơn kém nhau 10
Ý tưởng giải thuật
Với bài toán này, chúng ta sử dụng lồng vòng lặp: vòng lặp bên ngoài sẽ điều khiển các hàng và vòng lặp bên trong điều khiển các cột.
Tham khảo chương trình sau:
print("In bang so:") for i in range(0, 10):
for j in range(i+1, 101, 10): print("{:<3}".format(j), end=" ")
print()
Bài toán 2.3:
Viết chương trình in bảng cửu chương rút gọn.
Ý tưởng giải thuật
Bảng cửu chương rút gọn là bảng có hàng là kết quả của phép nhân một số với các giá trị từ 1 tới 10. Chúng ta sẽ in 9 hàng tương ứng với các số từ 2 tới 10.
Với bài toán này, chúng ta sẽ sử dụng lồng vòng lặp: vòng lặp bên ngoài điều khiển số hàng và vòng lặp bên trong điều khiển số cột của bảng.
Tham khảo chương trình sau:
start = 2
end = 11
print("In bang cuu chuong rut gon:"); for i in range(start, end):
count = i;
for j in range(1, 11): print("{:<3}".format(count*j), end=" ")
print(""
Bài luyện tập 3:
Mục tiêu: Rèn luyện kỹ năng lựa chọn và sử dụng điều khiển vòng lặp break và continue để áp dụng giải các bài toán liên quan.
Bài toán 3.1:
Viết chương trình nhập vào số nguyên dương n và in ra các số nguyên tố nhỏ hơn n. Số nguyên tố là số chỉ có 2 ước là 1 và chính nó.
. Ví dụ: Số nguyên 17 là số nguyên tố vì nó chỉ có ước 1 và 17.
Ý tưởng giải thuật
Sử dụng 2 vòng lặp for lồng nhau để kiểm tra và in ra các số nguyên tố từ 1 đến
n-1.
Để kiểm tra số x là nguyên tố thì:
+ Sử dụng biến ok có kiểu logic và có giá trị ban đầu là True.
+ Nếu x < 2 thì ok = False.
+ Nếu 𝑥 ≥ 2 và không chia hết mọi số i trong đoạn từ 2 đến [√𝑥] thì x là số nguyên tố. Cho biến i chạy từ 2 đến [√𝑥] . Nếu x % i == 0 thì gán ok = False và dùng Break thoát khỏi vòng lặp gần nhất.
Nếu ok = true thì n là số nguyên tố.
Quay lại kiểm tra giá trị tiếp theo (x+1).
Tham khảo chương trình sau:
import math
n = int (input("n = ")) for x in range(1, n):
ok = True
if x < 2: ok = False k = int(math.sqrt(x))
for i in range(2, k+1): if x % i == 0:
ok=False break
if ok == True : print(x, end=" ")
Bài toán 3.2:
Viết chương trình cho phép tính tổng của nhiều số (chưa biết bao nhiêu số).
Nhập số 0 để kết thúc quá trình nhập.
Ý tưởng giải thuật
Do trong Python không có câu lệnh repeat - until, mà thay vào đó, ta có thể sử dụng vòng lặp while với điều kiện luôn luôn đúng và câu lệnh break để thoát khỏi vòng lặp.
Tham khảo chương trình sau:
S=0
i=1
print("Hãy nhập các số - Nhập số 0 để ngừng") while True :
print("Nhập số thứ ", i , " là=") so = int(input())
if so == 0: break
else :
S = S +so i = i+1
print ("Tổng các số vừa nhập là", S)
Bài toán 3.3:
Viết chương trình in ra số tự nhiên từ 1 đến 100 mà không chia hết cho 3 hoặc 5.
Ý tưởng giải thuật
Với bài toán này, chúng ta sẽ sử dụng vòng lặp for hoặc while và sử dụng lệnh
continue để bỏ qua các giá trị chia chia hết cho 3 hoặc 5.
Tham khảo chương trình sau:
i = 0
while i <= 100: i = i + 1
if (i % 5 == 0) or (i % 3 ==0):
continue
print ('Giá trị biến hiện tại là: ', i) print ("OK!")
Bài toán 3.4:
Viết chương trình đưa ra màn hình tổng các số nguyên chỉ chia hết cho 3 hoặc 5 nhưng không đồng thời chia hết cho cả 3 và 5 trong phạm vi các số nguyên từ m đến n
– 1. Ngừng tính tổng khi nhận được tổng lớn hơn hoặc bằng b cho trước. Các số nguyên m, n, b được nhập từ bàn phím với m < n.
Ý tưởng tưởng giải thuật:
Với bài này ta có thể dùng vòng lặp for với biến chạy i và range(m,n). Sử dụng thêm các câu lệnh rẽ nhánh if để kiểm tra các điều kiện i chia hết cho 3 hoặc 5 và i không chia hết đồng thời cho 3 và 5 (tức là 15). Đồng thời sử dụng câu lệnh break để thoát khỏi vòng lặp khi Tổng đã lớn hơn hoặc bằng b.
Tham khảo chương trình sau:
print("Nhập các số m, n (m < n) và b")
m = int (input("m = "))
n = int (input("n = "))
b = int (input("b = ")) sum = 0
for i in range (m,n):
if i%3 == 0 or i%5 == 0 :
if i%15 !=0: sum = sum + i if sum >= b: break
print (" Tổng cần tìm là =", sum)
Bài tập áp dụng
Bài 1: Viết chương trình in một bảng nhân của một số bất kỳ với các số từ 1 tới 10 và hiển thị kết quả.
Bài 2: Viết chương trình đếm và in ra số lượng các số nguyên chia hết cho 2 hoặc 3 trong phạm vi từ 1 đến 1000.
Bài 3: Viết chương trình nhập vào số nguyên n từ bàn phím, tính và đưa ra tổng sau: S = 1 - 2 + 3 - 4 ... + (-1)n+1n
Bài 4: Viết chương trình in ra các số lẻ nhỏ hơn hoặc bằng n và tính tổng các số đó với n nhập từ bàn phím.
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ó.
Bài 6: Viết chương trình nhập 2 số nguyên m,n từ bàn phím. Đếm xem trong đoạn [m,n] có bao nhiêu số chia hết cho cả 2 và 5, tính tổng các số đó.
Bài 7: Viết chương trình liệt kê tất cả số nguyên tố có 5 chữ số trong Python.
Bài 8: Viết chương trình tính n!! (giai thừa kép) với n!! được định nghĩa như sau:
n!! = 1 với n = 0
n!! = 1.3.5..n với n lẻ.
n!! = 2.4.6..n với n chẵn.
Yêu cầu: Sử dụng vòng lặp với số lần chưa biết trước:
Bài 9: Dãy số fibonaci được định nghĩa như sau:
f1 = 1, f2=1
fn = fn-1 + fn-2
Viết chương trình in ra n số fibonaci đầu tiên.
Bài 10: Sử dụng vòng lặp while – do viết chương trình tính tổng	𝑆 =
√2 + √2 + ⋯ + √2
n dấu căn
với n là một số tự nhiên nhập từ bàn phím.
HIỆU QUẢ MANG LẠI CỦA SÁNG KIẾN
Sau khi áp dụng thử đề tài rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 và học sinh khá giỏi trong NNLT Python tại trường. Bước đầu đã đem lại hiệu quả rõ rệt. Ngoài ra, các bài tập trong đề tài mà tôi đã nghiên cứu có thể áp dụng rộng rãi, xen kẽ giữa các bài tập, trong giảng dạy tin học lớp 10 nhằm nâng cao tố chất sáng tạo trong lập trình cho các em học sinh.
Để đánh giá hiệu quả của đề tài trên tôi đã chọn 2 lớp học sinh khối 10 (lớp chọn có lựa chọn môn Tin học) năm học 2022-2023 tại trường tôi có số lượng, chất lượng tương đương nhau. Ở lớp thực nghiệm, tôi áp dụng đề tài vào giảng dạy còn lớp đối chứng tôi sử dụng dạy học thông thường.
Lớp thực nghiệm và lớp đối chứng cùng giáo viên giảng dạy, đồng đều về thời gian, nội dung kiến thức và hệ thống các yêu cầu thực hành với các mức độ đánh giá khác nhau sau mỗi buổi học.
Kết quả cụ thể như sau:
TT

Lớp

Số lượng
Kết quả kiểm tra
Giỏi
Khá
TB
Yếu
SL
%
SL
%
SL
%
SL
%

1
10A5
(Lớp đối chứng)

38

9

23.1

12

30.8

15

38.4

3

7.7

2
10A6
(Lớp thực nghiệm)

39

15

39.5

18

47.4

5

13.1

0

0
Kết quả thực nghiệm cho thấy tỷ lệ học sinh đạt mức khá, giỏi của lớp thực nghiệm (86,9%) cao hơn nhiều so với lớp đối chứng (53,9%), tỷ lệ học sinh ở mức trung bình, yếu của lớp thực nghiệm (13,1%) giảm hẳn so với lớp đối chứng (46,1%). Điều này cho thấy hiệu quả rõ rệt và hướng đi đúng đắn của đề tài.
Không những vượt trội về mặt định lượng mà về mặt định tính, thông qua việc lên lớp mời các giáo viên dự giờ, trao đổi với giáo viên bộ môn và học sinh, qua việc phân tích chất lượng lĩnh hội của học sinh, chúng tôi nhận thấy ở lớp thực nghiệm số số tham gia phát biểu, xây dựng bài và thực tốt các thao tác lớn hơn nhiều so với lớp đối chứng. Học sinh hứng thú học tập, không khí các nhóm học sôi nổi. Đa số học sinh đều tích cực tham gia các hoạt động học tập, các em không còn thụ động mà tự tin, chủ động thực hiện các hoạt động.
KHẢ NĂNG ỨNG DỤNG VÀ TRIỂN KHAI
Sáng kiến có khả năng áp dụng cho tất cả các đối tượng học sinh lớp 10 có lựa chọn môn Tin học và bồi dưỡng học sinh khá giỏi tham dự các kì thi chọn học sinh giỏi cấp môn Tin học.
Đề tài có thể ứng dụng vào giải quyết các bài toán thực tiễn, có thể phát triển, mở rộng đề tài để giải quyết các bài toán phức tạp hơn.
Có thể áp dụng tư tưởng, cách thức, phương pháp của đề tài vào các phần nội dung khác, chủ đề khác của chương trình Tin học.
Ý NGHĨA CỦA SÁNG KIẾN
Với bản thân nghiên cứu đề tài SKKN là việc làm tốt để nghiên cứu khoa học làm quen với phương pháp làm khoa học tuy chỉ trong phạm vi hẹp nhưng với nỗ lực của bản thân và sự giúp đỡ của đồng nghiệp đã có những đề tài khoa học tốt, lý thú và hiệu quả.
Đề tài có thể làm tài tiệu tham khảo hữu ích đối với các đồng nghiệp trong việc thực hiện chương trình GDPT mới, góp phần nâng cao chất lượng, hiệu quả công tác giảng dạy môn Tin học.
Nội dung đề tài có thể làm tài liệu tham khảo quý cho học sinh các trường THPT, góp phần nâng cao kiến thức, kỹ năng giải các bài tập. Tạo niềm đam mê môn học cũng như yêu thích ngành Công nghệ thông tin.
Cũng qua đề tài, tôi muốn cùng đồng nghiệp trao đổi, trau dồi chuyên môn nhằm góp phần nâng cao trình độ chuyên môn nghiệp vụ và khả năng mở rộng kiến thức.
PHẦN III: KẾT LUẬN
BÀI HỌC KINH NGHIỆM:
Sau một thời gian áp dụng cách làm này tôi nhận thấy kỹ năng lập trình các vấn đề về cấu trúc lặp của các em tăng lên đáng kể, đặc biệt là hứng thú học tập, khả năng sáng tạo. Nhiều học sinh đã biết vận dụng linh hoạt cấu trúc lặp để mô tả thuật toán của các bài toán cơ bản và các bài toán mở rộng, biết cải tiến thuật toán để đưa ra thuật toán tối ưu hơn (giảm số lần lặp, tiết kiệm thời gian thực hiện chương trình). Đặc biệt là đội tuyển học sinh giỏi môn Tin học lớp 10 năm nay đã có tiến bộ rất nhiều so với đội tuyển những năm trước. Mặc dù thời gian ôn luyện trên trường với giáo viên không được nhiều, ở nhà lại không có máy tính để thực hành nhưng các em vận dụng thành thục cấu trúc lặp, biết lựa chọn cấu trúc phù hợp để mô tả thuật toán, hơn thế nữa biết cải tiến thuật toán để giảm tới mức tối thiểu số lần lặp. Điều đó cho thấy hiệu quả của cách rèn luyện kỹ năng lập trình bằng việc mở rộng bài toán cơ bản. Với cách làm đơn giản này các em 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 toán khác, các thầy, cô có thể áp dụng cách làm này với nhiều dạng bài tập khác nhau để thấy được hiệu quả của sáng kiến.
Qua thực tiễn tiến hành áp dụng các biện pháp của đề tài trên đây tôi nhận thấy đã tạo cho các em học sinh hứng thú học tập hơn, kết quả học tập nâng cao rõ rệt và hơn nữa xây dựng cho các em tác phong làm việc hợp tác theo nhóm. Việc dạy học với các biện pháp đã nêu đòi hỏi người giáo viên phải tìm tòi, đổi mới phương pháp dạy học phù hợp và hiệu quả. Trên đây là một số kinh nghiệm bản thân tôi rút ra được trong quá trình dạy học. Rất mong nhận được sự góp ý của quý thầy cô, bạn bè đồng nghiệp để tôi có thể hoàn chỉnh hơn đề tài này, góp phần nâng cao chất lượng, hiệu quả giảng dạy môn Tin học.
KIẾN NGHỊ, ĐỀ XUẤT
Giáo viên cần tích cực xây dựng nội dung khoa học, lựa chọn phương pháp phù hợp, tạo sự hứng thú, tạo động cơ học tập cho học sinh. Tăng cường trao đổi học tập kinh nghiệm lẫn nhau, tích cực đổi mới phương pháp, kỹ thuật dạy học, vận dụng các kiến thức bộ môn để giải quyết các vẫn đề của thực tiễn cuộc sống.
Đối với các tổ chức quản lý chỉ đạo cần tạo điều kiện để giáo viên được giao lưu với các đơn vị trên địa bàn thông qua các cuộc hội thảo chuyên đề, sinh hoạt chuyên môn liên trường,  Chỉ đạo giáo viên tích cực nghiên cứu, đổi mới phương pháp dạy học, nâng cao trình độ chuyên môn, nghiệp vụ.
SKKN là những đề tài hay được các giáo viên đúc rút trong quá trình dạy học. Vì vậy những sáng kiến đã được ngành thẩm định công nhận cần được làm thành kỹ yếu, công khai trên website của ngành để cho toàn thể giáo viên trong ngành tham khảo, học tập để nâng cao trình độ chuyên môn nghiệp vụ.
Xin trân trọng cảm ơn!
TÀI LIỆU THAM KHẢO
SGK Tin học lớp 10 – NXB Đại học sư phạm - Hồ Sĩ Đàm tổng chủ biên.
Sách bài tập Tin học 10 – NXB Đại học sư phạm - Hồ Sĩ Đàm tổng chủ biên.
Lý luận dạy học hiện đại - Nguyễn Thị Phương Hoa.
Lý luận dạy học hiện đại: Một số vấn đề chung về đổi mới phương pháp dạy học ở trường trung học phổ thông - Nguyễn Văn Cường.
Thông tư số 32/2018/TT-BGDĐT, ngày 26/12/2018 của Bộ Giáo dục và Đào tạo về Ban hành chương trình GDPT mới.
Lời giải bài tập Python cơ bản, NXB Đại Học Quốc Gia Hà Nội - Bùi Việt Hà –Bùi Vũ Huy.
Một số thông tin, tài liệu từ các website, diễn đàn, trên mạng Internet.

File đính kèm:

  • docxsang_kien_kinh_nghiem_ren_luyen_ky_nang_lap_trinh_voi_chu_de.docx
  • pdfSáng kiến kinh nghiệm Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh Lớp 10 tro.pdf