Sáng kiến kinh nghiệm THPT: Sử dụng phương pháp sinh test để kiểm thử chương trình lập trình trong dạy học và bồi dưỡng học sinh THPT
lượt xem 5
download
Mục đích nghiên cứu sáng kiến "Sử dụng phương pháp sinh test để kiểm thử chương trình lập trình trong dạy học và bồi dưỡng học sinh THPT" nhằm tạo ra nguồn tài liệu tham khảo cho giáo viên giảng dạy bộ môn tin học về phương pháp tạo test để kiểm thử chương trình; Góp phần nâng cao kết quả kết quả học tập và dạy học của giáo viên và học sinh; Giúp giáo viên, học sinh tự đánh giá các chương trình mình viết, tạo hưng phấn trong lập trình, tìm ra được giải thuật tối ưu, đáp ứng yêu cầu bài toán.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Sáng kiến kinh nghiệm THPT: Sử dụng phương pháp sinh test để kiểm thử chương trình lập trình trong dạy học và bồi dưỡng học sinh THPT
- SỞ GD & ĐT NGHỆ AN TRƯỜNG THPT CỜ ĐỎ -----*******----- SÁNG KIẾN KINH NGHIỆM §Ò tµi: SỬ DỤNG PHƯƠNG PHÁP SINH TEST ĐỂ KIỂM THỬ CHƯƠNG TRÌNH LẬP TRÌNH, TRONG DẠY HỌC VÀ BỒI DƯỠNG HỌC SINH THPT Bé m«n: Tin häc Người viết: Hoàng Thanh Hà Chu Thị Quỳnh Nga Tổ chuyên môn: Toán tin Năm thực hiện: 2022 Số điện thoại: 0983 807 246 – 0373 697 113 Năm học: 2021 - 2022 Gi¸o viªn: Phan ThÞ Dung
- MỤC LỤC PHẦN I: ĐẶT VẤN ĐỀ ............................................................................................... 1 I. Lý do chọn đề tài ..................................................................................................... 1 II. Mục tiêu và điểm mới của đề tài ........................................................................... 1 III. Đối tượng nghiên cứu và ứng dụng ...................................................................... 1 IV. Phương pháp nghiên cứu...................................................................................... 2 V. Ý nghĩa và đóng góp của đề tài ............................................................................. 2 PHẦN II: NỘI DUNG NGHIÊN CỨU....................................................................... 3 I. Cơ sở khoa học ........................................................................................................ 3 II. Giải pháp ................................................................................................................ 3 1. Sinh mảng số nguyên ngẫu nhiên ....................................................................... 3 2. Sinh mảng tỉ lệ 1:1.............................................................................................. 5 3. Sinh mảng tỉ lệ 1:K ............................................................................................. 9 4. Sinh ngẫu nhiên theo khoảng ........................................................................... 12 5. Sinh ngẫu nhiên tăng ........................................................................................ 12 6. Sinh hoán vị ngẫu nhiên ................................................................................... 13 7. Sinh ngẫu nhiên đều ......................................................................................... 14 8. Sinh ngẫu nhiên tệp cấp số cộng ...................................................................... 16 9. Sinh ngẫu nhiên mảng đối xứng ....................................................................... 17 10. Sinh số độ cao H ............................................................................................. 18 III. Nhận xét kết quả sau khi thực hiện đề tài .......................................................... 19 1. Về năng lực làm bài.......................................................................................... 19 2. Thực nghiệm sư phạm ...................................................................................... 19 3. Đánh giá kết quả thực nghiệm sư phạm ........................................................... 19 PHẦN III. KẾT LUẬN .............................................................................................. 21 I. Về mặt lý thuyết và thực tiễn: ............................................................................... 21 II. Phạm vi áp dụng, hạn chế, hướng phát triển và kiến nghị: ................................. 21 Tài liệu tham khảo: ................................................................................................... 22 2
- PHẦN I: ĐẶT VẤN ĐỀ I. Lý do chọn đề tài Khi ta vừa đọc nội dung yêu cầu của một bài toán trong tin học, một thuật giải lập tức nảy sinh trong đầu; giải thuật đó thường được gọi là giải thuật tự nhiên và chúng ta bắt tay vào viết chương trình cho bài toán đó với ngôn ngữ lập trình mà chúng ta đã lựa chọn. Kết quả thu được khi chạy chương trình với những bộ dữ liệu đơn giản mà chúng ta tự suy nghĩ để test hoặc sử dụng các bộ test ví dụ. Tuy nhiên, kết quả này chỉ là tương đối là đúng hoặc sai. Để đánh giá giải thuật sử dụng đã đáp ứng yêu cầu của bài toán hay chưa hoặc là lỗi giải thuật hay kém hiệu quả theo nghĩa chương trình đòi hỏi quá nhiều bộ nhớ, chạy quá lâu hay sai kết quả thì chúng ta cần có những bộ test chuẩn đủ lớn để kiểm tra chương trình. Để góp phần vào việc đánh giá chương trình cài đặt với những bộ dữ liệu đủ lớn chúng tôi “SỬ DỤNG PHƯƠNG PHÁP SINH TEST ĐỂ KIỂM THỬ CHƯƠNG TRÌNH LẬP TRÌNH TRONG DẠY HỌC VÀ BỒI DƯỠNG HỌC SINH THPT” đó là lý do chúng tôi chọn đề tài này. II. Mục tiêu và điểm mới của đề tài 1. Mục tiêu của đề tài - Tạo ra nguồn tài liệu tham khảo cho giáo viên giảng dạy bộ môn tin học về phương pháp tạo test để kiểm thử chương trình; - Góp phần nâng cao kết quả kết quả học tập và dạy học của giáo viên và học sinh; - Giúp giáo viên, học sinh tự đánh giá các chương trình mình viết, tạo hưng phấn trong lập trình, tìm ra được giải thuật tối ưu, đáp ứng yêu cầu bài toán. 2. Điểm mới của đề tài - Khác với một số phần mềm miễn phí có trên mạng internet hiện nay như “Tiện ích sinh test tự động cho phần mềm chấm điểm tự động Themis ” của thầy giáo Nguyễn Tô Sơn là khi muốn tạo test cần phải có code chuẩn. Còn đề tài của tôi đưa ra là chưa có code chuẩn. - Tạo ra những bộ test đủ lớn mang tính ngẫu nhiên mà khi chưa có hoặc không cần chương trình mẫu (code chuẩn); qua đó giúp giáo viên, học sinh tự đánh giá các chương trình mình viết, tạo hưng phấn trong lập trình, tìm ra được giải thuật tối ưu, đáp ứng yêu cầu bài toán. III. Đối tượng nghiên cứu và ứng dụng 1. Đối tượng nghiên cứu - Giáo viên giảng dạy môn Tin học, học sinh muốn nâng cao kỹ năng về 1
- chuyên đề lập trình; - Học sinh được tuyển chọn chuẩn bị cho kỳ thi học sinh giỏi và tham gia các kỳ thi cao hơn. 2. Ứng dụng - Tạo test cho các bải toán lập trình khi chưa có bộ test và chương trình nguồn chuẩn để tạo test; - Tạo bộ test cho phần mềm chấm bài tự động Themis qua đó chỉnh sửa chương trình, đánh giá thuật toán. IV. Phương pháp nghiên cứu - Nghiên cứu lý luận và thực nghiệm; - Nghiên cứu các da ̣ng bài toán trong quá trình dạy học và bồi dưỡng về lập trình; - Tự đánh giá thuật toán và kỹ thuật lập trình. V. Ý nghĩa và đóng góp của đề tài - Tạo test để đánh giá code khi chưa có code chuẩn để sinh test; - Phát triển tư duy lập trình; - Tối ưu trong cài đặt thuật toán; - Căn cứ để đánh giá, lựa chọn thuật toán. 2
- PHẦN II: NỘI DUNG NGHIÊN CỨU I. Cơ sở khoa học 1. Cơ sở lý luận Để kiểm tra tính đúng đắn của thuật toán, chương trình và cũng như các kỹ thuật trong lập trình thì chúng ta cần phải có các bộ test đủ lớn, rồi thông qua các phần mềm chấm bài tự động như “Chương trình chấm bài tự động Themis” của TS Lê Minh Hoàng để đánh giá, chấm điểm. Việc kiểm tra đánh giá được chương trình mình viết đã đạt đến mức độ nào về mặt tối ưu về thuật toán, cần kiểm thử chương trình bằng bộ test đủ lớn mang tính ngẫu nhiên mà vẫn đảm bảo độ chính xác cao. 2. Cơ sở thực tiễn (thực trạng) Trong thực tế trên mạng internet đã có một số phần mềm tiện ích miễn phí để sinh test tự động như “Tiện ích sinh test tự động cho phần mềm chấm điểm tự động Themis” của thầy giáo Nguyễn Tô Sơn. Tuy nhiên theo bản thân tôi tìm hiểu để sử dụng phần mềm tiện ích này chúng ta cần phải có code chuẩn. Từ thực trạng này tôi đưa ra giải pháp tạo ra những bộ test đủ lớn mang tính ngẫu nhiên mà khi chưa có hoặc không cần chương trình mẫu (code chuẩn); II. Giải pháp Nội dung chính của sáng kiến trình bày 10 phương pháp sinh ngẫu nhiên và ứng dụng tạo test cho một số bài toán cụ thể từ mức độ đơn giản đến phức tạp hơn như sau: 1. Sinh mảng số nguyên ngẫu nhiên 1.1. Bài toán: Sinh ngẫu nhiên N số nguyên dương cho mảng A. Ý tưởng thuật toán: Tạo mảng gồm N số nguyên dương, trong Pascal hàm random(k) sinh một số kiểu nguyên nằm trong đoạn từ 0 đến k-1. 3
- Chương trình: 1.2. Ví dụ ứng dụng tạo test cho bài toán đếm các số nguyên dương: Cho dãy gồm M (M>=N) số nguyên a1, a2, a3, …,aM. Hãy viết chương trình đếm các số nguyên dương có trong dãy trên. Nhiệm vụ: Sử dụng chương trình tạo ra file input trên có M số nguyên có giá trị trong phạm vi [-x;x] trong đó có N số nguyên dương trong đoạn [1;x] và N-M số không phải là số nguyên dương phạm vi [-x;0] và file output chính là N. Hay nói cách khác ta tạo một bộ test mà file Test1.input gồm M số nguyên a1, a2, a3, …,aM và file Test1.output chứa số nguyên dương N. 4
- Chương trình: 1.3. Ví dụ ứng dụng tạo test cho bài toán chia hết Cho dãy gồm N số nguyên dương a1, a2, a3, …,aN. Hãy lấy ra K số liên tiếp để tổng của chúng chia hết cho N với K lớn nhất. 2. Sinh mảng tỉ lệ 1:1 2.1. Bài toán: Tạo dãy số nguyên a1, a2, a3, …,aN. (N>1) có tổng các phần tử trong hai đoạn bằng nhau. Ý tưởng thuật toán: Để tạo mảng a thành hai đoạn a[1..d] và a[d+1..N] có tổng bằng nhau, ta phải có tổng t=sum(a[1..N]) là số chẵn và tồn tại d mà tổng sum(a[1..d]=t div 2. Chọn ngẫu nhiên một điểm cắt d trong khoảng 1..n-1 tức là random(n-2)+1. Tiếp theo ta tạo giá trị ngẫu nhiên trong phạm vi từ (-M+1) đến (M-1) cho d phần tử đầu cho mảng a[1..d] ta sử dụng a[i]:=random(M)-Random(M), khi đó sẽ 5
- có tổng t=sum(a[1..d]). Ta tạo giá trị ngẫu nhiên trong phạm vi từ (0..t) cho (N-d-1) phần tử ở gần cuối cho mảng a[d+1..N-1] ta sử dụng a[i]:=random(t) và t:=t-a[i], cuối cùng a[N]:=t. Trong trường hợp vô nghiệm a[N] cũng được khởi tạo ngẫu nhiên. Chương trình: 6
- 2.2. Ví dụ ứng dụng tạo test cho bài toán đưa ra chỉ số i chia hai đoạn có tổng bằng nhau Bài toán cho dãy gồm N số nguyên không âm a1, a2, a3, …,aN. Đưa ra chỉ số i mà tổng các phần tử trong hai đoạn a[1..i] và a[i+1..N] có tổng bằng nhau. Dữ liệu vào: Đọc vào từ file DAY.INP: - Dòng đầu ghi N. - Dòng tiếp theo ghi các số a1, a2, a3, …,aN. Kết quả: Ghi ra file văn bản DAY.OUT ghi số i. Giới hạn: N và các ai.
- 8
- 3. Sinh mảng tỉ lệ 1:K 3.1. Bài toán: Tạo dãy số nguyên không âm a1, a2, a3, …,aN. (N>1) có tổng các phần tử trong một đoạn gấp K lần tổng các phần tử trong đoạn kia, K nguyên dương. Ý tưởng thuật toán: Để tạo mảng a thành hai đoạn a[1..d] và a[d+1..N] có tổng sum(a[1..d]) =k*sum(a[d+1..N) hoặc sum(a[d+1..N)=k*sum(a[1..d]) (nghĩa là đoạn đầu bằng k đoạn cuối hoặc đoạn cuối bằng k đoạn đầu) và ta chọn ngẫu nhiên một điểm cắt d trong khoảng 1..n-1 tức là random(n-2)+1. Tiếp theo ta tạo giá trị ngẫu nhiên trong phạm vi từ (-M+1) đến (M-1) cho d phần tử đầu cho mảng a[1..d] ta sử dụng a[i]:=random(M)-Random(M), khi đó sẽ có tổng t=sum(a[1..d]). Chọn đoạn đầu bằng k đoạn cuối hoặc đoạn cuối bằng k đoạn đầu (có thể chọn ngẫu nhiên random(2)=0 hoặc =1, tương ứng a[d]:=a[d]+(k-1)*t hoặc t:=t*k) Ta tạo giá trị ngẫu nhiên trong phạm vi từ (0..t-1) cho (N-d-1) phần tử ở gần cuối cho mảng a[d+1..N-1] ta sử dụng a[i]:=random(t) và t:=t-a[i], cuối cùng a[N]:=t. Trong trường hợp vô nghiệm a[N] cũng được khởi tạo ngẫu nhiên. Chương trình: 9
- 3.2. Ví dụ ứng dụng tạo test cho bài toán: Cho dãy số nguyên không âm a1, a2, a3, …,aN (N>1). Hãy đưa ra chỉ số i mà tổng các phần tử trong đoạn a[1..i] gấp K lần tổng các phần tử trong đoạn a[i+1..N]. Dữ liệu vào: Đọc vào từ file DAY.INP: - Dòng đầu ghi N và K - Dòng tiếp theo ghi các số a1, a2, a3, …,aN. Kết quả: Ghi ra file văn bản DAY.OUT ghi số i. Giới hạn: N và các ai
- Chương trình: 11
- 4. Sinh ngẫu nhiên theo khoảng 4.1. Bài toán: Sinh ngẫu nhiên cho mảng nguyên a, n phần tử trong khoảng (-M..M) Ý tưởng thuật toán: Ta xây dựng thủ tục Sinh(N,x,y) sinh ngẫu nhiên N số nguyên trong khoảng x đến y (x
- Chương trình: 6. Sinh hoán vị ngẫu nhiên 6.1. Bài toán: Sinh ngẫu nhiên cho mảng nguyên a một hoán vị của 1..n. Ý tưởng thuật toán: Xuất phát từ hoán vị đơn vị a=(1,2,…,n) ta đổi chỗ a[1] với một phần tủ tùy ý (được chọn ngẫu nhiên) a[j] sẽ được một hoán vị. Ta có thể thực hiện việc đổi chỗ nhiều lần. Chương trình: 13
- 7. Sinh ngẫu nhiên đều 7.1. Bài toán: Sinh ngẫu nhiên N phần tử cho mảng nguyên A thỏa mãn điều kiện N phần tử tạo thành K đoạn liên tiếp có tổng các phần tử trong mỗi đoạn bằng nhau và bằng giá trị T cho trước. Ý tưởng thuật toán: Số lượng phần tử trong mỗi đoạn pt=random(N div K)+1, tức là số lượng phần tử trong mỗi đoạn không nhất thiết bằng nhau. Chương trình: 14
- 15
- 8. Sinh ngẫu nhiên tệp cấp số cộng 8.1. Bài toán: Sinh ngẫu nhiên một dãy số cấp số cộng gồm N số hạng. Ý tưởng thuật toán: Sinh ngẫu nhiên phần tử thứ nhất a[1] công sai d Sinh các phần tử thứ a[i], i=2..N (For i:=2 to n do a[i]:=a[i-1]+d) Chương trình: 16
- 9. Sinh ngẫu nhiên mảng đối xứng 9.1. Bài toán: Sinh ngẫu nhiên các giá trị để ghi vào mảng hai chiều a[1..n,1..n] sao cho các phần tử đối xứng nhau qua đường chéo chính, tức là: a[i,j]=a[j,i], 1
- 10. Sinh số độ cao H 10.1. Bài toán: Độ cao của một số tự nhiên là tổng giá trị các chữ số của số đó. Sinh toàn bộ các số tự nhiên có tối đa ba chữ số và độ cao H cho trước. Chương trình: 18
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Sáng kiến kinh nghiệm THPT: Thiết kế và ứng dụng học liệu số trong nâng cao hứng thú và hiệu quả dạy học Lịch sử lớp 10 Bộ Cánh diều
49 p | 64 | 29
-
Sáng kiến kinh nghiệm THPT: Tăng cường sử dụng phương pháp dạy học trực quan vào giảng dạy môn Toán THPT
37 p | 43 | 13
-
Sáng kiến kinh nghiệm THPT: Sử dụng sơ đồ phân bố thời gian giúp học sinh giải nhanh bài tập trắc nghiệm liên quan đến thời điểm và khoảng thời gian trong mạch dao động
24 p | 26 | 9
-
Sáng kiến kinh nghiệm THPT: Dạy học theo mô hình STEM bài Sự điện li của nước. pH. Chất chỉ thị axit – bazơ và bài Ankan, Hoá học 11 ở trường THPT
56 p | 21 | 8
-
Sáng kiến kinh nghiệm THPT: Sử dụng hoạt động làm phim, lồng tiếng nhằm nâng cao chất lượng dạy và học tiếng Anh và định hướng nghề nghiệp cho học sinh THPT
60 p | 36 | 8
-
Sáng kiến kinh nghiệm THPT: Sử dụng kĩ thuật giao nhiệm vụ nhằm nâng cao hiệu quả về năng lực tự quản, khả năng giao tiếp và hợp tác nhóm cho học sinh lớp 11B4 - Trường THPT Lê Lợi
13 p | 119 | 8
-
Sáng kiến kinh nghiệm THPT: Sử dụng sơ đồ tư duy hệ thống, khắc sâu kiến thức Hoá học hữu cơ lớp 12 cơ bản
30 p | 43 | 8
-
Sáng kiến kinh nghiệm THPT: Sử dụng phiếu học tập dưới dạng đề kiểm tra sau mỗi bài học, để học sinh làm bài tập về nhà, làm tăng kết quả học tập môn Hóa
13 p | 28 | 8
-
Sáng kiến kinh nghiệm THPT: Giáo dục kỹ năng sống và sử dụng ngôn ngữ cho học sinh THPT qua tác phẩm Chí Phèo
19 p | 29 | 7
-
Sáng kiến kinh nghiệm THPT: Sử dụng Infographic nhằm nâng cao hiệu quả và tăng hứng thú học tập Ngữ văn của học sinh THPT
15 p | 20 | 7
-
Sáng kiến kinh nghiệm THPT: Phát triển tư duy lập trình và khắc phục sai lầm cho học sinh lớp 11 thông qua sử dụng cấu trúc rẽ nhánh
24 p | 32 | 7
-
Sáng kiến kinh nghiệm THPT: Lồng ghép một số kỹ năng chăm sóc và bảo vệ sức khỏe vào giảng dạy Sinh học 10 bài 30 - Sự nhân lên của virut trong tế bào chủ
21 p | 23 | 7
-
Sáng kiến kinh nghiệm THPT: Tìm hiểu một số tính chất của đất trồng nhằm nâng cao hiệu quả sử dụng đất canh tác trong nông nghiệp
35 p | 41 | 6
-
Sáng kiến kinh nghiệm THPT: Một số giải pháp nhằm nâng cao chất lượng bồi dưỡng học sinh giỏi phần Lịch sử thế giới hiện đại (1945 - 2000)
24 p | 119 | 6
-
Sáng kiến kinh nghiệm THPT: Hướng dẫn học sinh lớp 12 ôn tập môn Lịch Sử theo định hướng 5 bước 1 vấn đề, đáp ứng yêu cầu mới của kỳ thi THPT Quốc gia
29 p | 35 | 5
-
Sáng kiến kinh nghiệm THPT: Tích hợp kiến thức văn học vào giảng dạy một số bài trong chương trình lịch sử Việt Nam lớp 12
10 p | 15 | 5
-
Sáng kiến kinh nghiệm THPT: Lồng ghép giáo dục ý thức chống rác thải nhựa qua dạy học môn GDCD 11 trường THPT Nông Sơn
33 p | 22 | 5
-
Sáng kiến kinh nghiệm THPT: Thiết kế và sử dụng Bảng Luyện Từ trong dạy học từ vựng tiếng Anh nhằm củng cố vốn từ cho học sinh yếu kém lớp 12 trường THPT Kim Sơn A
12 p | 8 | 3
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn