1. Trang chủ
  2. » Tất cả

Skkn 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

24 3 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 24
Dung lượng 2,57 MB

Nội dung

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: Hồng Thanh Hà Chu Thị Quỳnh Nga Tổ chun mơn: Tố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:skkn Phan Thị Dung MC LC PHN I: T VẤN ĐỀ I Lý chọn đề tài II Mục tiêu điểm đề tài III Đối tượng nghiên cứu ứng dụng IV Phương pháp nghiên cứu V Ý nghĩa đóng góp đề tài PHẦN II: NỘI DUNG NGHIÊN CỨU I Cơ sở khoa học II Giải pháp Sinh mảng số nguyên ngẫu nhiên Sinh mảng tỉ lệ 1:1 Sinh mảng tỉ lệ 1:K Sinh ngẫu nhiên theo khoảng 12 Sinh ngẫu nhiên tăng 12 Sinh hoán vị ngẫu nhiên 13 Sinh ngẫu nhiên 14 Sinh ngẫu nhiên tệp cấp số cộng 16 Sinh ngẫu nhiên mảng đối xứng 17 10 Sinh số độ cao H 18 III Nhận xét kết sau thực đề tài 19 Về lực làm 19 Thực nghiệm sư phạm 19 Đánh giá kết thực nghiệm sư phạm 19 PHẦN III KẾT LUẬN 21 I Về mặt lý thuyết thực tiễn: 21 II Phạm vi áp dụng, hạn chế, hướng phát triển kiến nghị: 21 Tài liệu tham khảo: 22 skkn PHẦN I: ĐẶT VẤN ĐỀ I Lý chọn đề tài Khi ta vừa đọc nội dung yêu cầu toán tin học, thuật giải nảy sinh đầu; giải thuật thường gọi giải thuật tự nhiên bắt tay vào viết chương trình cho tốn với ngơn ngữ lập trình mà lựa chọn Kết thu chạy chương trình với liệu đơn giản mà tự suy nghĩ để test sử dụng test ví dụ Tuy nhiên, kết tương đối sai Để đánh giá giải thuật sử dụng đáp ứng yêu cầu toán hay chưa lỗi giải thuật hay hiệu theo nghĩa chương trình địi hỏi q nhiều nhớ, chạy q lâu hay sai kết cần có 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 liệu đủ lớ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” lý chúng tơi chọn đề tài II Mục tiêu điểm đề tài Mục tiêu đề tài - Tạo nguồn tài liệu tham khảo cho giáo viên giảng dạy môn tin học phương pháp tạo test để kiểm thử chương trình; - Góp phần nâng cao kết kết học tập dạy học giáo viên học sinh; - Giúp giáo viên, học sinh tự đánh giá chương trình viết, tạo hưng phấn lập trình, tìm giải thuật tối ưu, đáp ứng yêu cầu toán Điểm đề tài - Khác với số phần mềm miễn phí có mạng internet “Tiện ích sinh test tự động cho phần mềm chấm điểm tự động Themis ” thầy giáo Nguyễn Tô Sơn muốn tạo test cần phải có code chuẩn Cịn đề tài tơi đưa chưa có code chuẩn - Tạo test đủ lớn mang tính ngẫu nhiên mà chưa 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á chương trình viết, tạo hưng phấn lập trình, tìm giải thuật tối ưu, đáp ứng yêu cầu toán III Đối tượng nghiên cứu ứng dụng Đố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ỹ skkn chuyên đề lập trình; - Học sinh tuyển chọn chuẩn bị cho kỳ thi học sinh giỏi tham gia kỳ thi cao Ứng dụng - Tạo test cho bải tốn lập trình chưa có test chương trình nguồn chuẩn để tạo test; - Tạo test cho phần mềm chấm 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 thực nghiệm; - Nghiên cứu các da ̣ng tốn q trình dạy học bồi dưỡng lập trình; - Tự đánh giá thuật tốn kỹ thuật lập trình V Ý nghĩa đóng góp đề tài - Tạo test để đánh giá code chưa có code chuẩn để sinh test; - Phát triển tư lập trình; - Tối ưu cài đặt thuật toán; - Căn để đánh giá, lựa chọn thuật toán skkn PHẦN II: NỘI DUNG NGHIÊN CỨU I Cơ sở khoa học Cơ sở lý luận Để kiểm tra tính đắn thuật tốn, chương trình kỹ thuật lập trình cần phải có test đủ lớn, thông qua phần mềm chấm tự động “Chương trình chấm tự động Themis” TS Lê Minh Hoàng để đánh giá, chấm điểm Việc kiểm tra đánh giá chương trình viết đạt đến mức độ mặt tối ưu thuật toán, cần kiểm thử chương trình test đủ lớn mang tính ngẫu nhiên mà đảm bảo độ xác cao Cơ sở thực tiễn (thực trạng) Trong thực tế mạng internet có số phần mềm tiện ích miễn phí để sinh test tự động “Tiện ích sinh test tự động cho phần mềm chấm điểm tự động Themis” thầy giáo Nguyễn Tô Sơn Tuy nhiên theo thân tơi tìm hiểu để sử dụng phần mềm tiện ích cần phải có code chuẩn Từ thực trạng đưa giải pháp tạo test đủ lớn mang tính ngẫu nhiên mà chưa có khơng cần chương trình mẫu (code chuẩn); II Giải pháp Nội dung sáng kiến trình bày 10 phương pháp sinh ngẫu nhiên ứng dụng tạo test cho số toán cụ thể từ mức độ đơn giản đến phức tạp sau: 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, Pascal hàm random(k) sinh số kiểu nguyên nằm đoạn từ đến k-1 skkn Chương trình: 1.2 Ví dụ ứng dụng tạo test cho toán đếm 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 số ngun dương có dãy Nhiệm vụ: Sử dụng chương trình tạo file input có M số nguyên có giá trị phạm vi [-x;x] có N số nguyên dương đoạn [1;x] N-M số số nguyên dương phạm vi [-x;0] file output N Hay nói cách khác ta tạo test mà file Test1.input gồm M số nguyên a1, a2, a3, …,aM file Test1.output chứa số nguyên dương N skkn Chương trình: 1.3 Ví dụ ứng dụng tạo test cho toán chia hết Cho dãy gồm N số nguyên dương a1, a2, a3, …,aN Hãy lấy K số liên tiếp để tổng chúng chia hết cho N với K lớn 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 phần tử hai đoạn Ý tưởng thuật toán: Để tạo mảng a thành hai đoạn a[1 d] a[d+1 N] có tổng nhau, ta phải có tổng t=sum(a[1 N]) số chẵn tồn d mà tổng sum(a[1 d]=t div Chọn ngẫu nhiên điểm cắt d khoảng n-1 tức random(n-2)+1 Tiếp theo ta tạo giá trị ngẫu nhiên 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), skkn có tổng t=sum(a[1 d]) Ta tạo giá trị ngẫu nhiên 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) t:=t-a[i], cuối a[N]:=t Trong trường hợp vô nghiệm a[N] khởi tạo ngẫu nhiên Chương trình: skkn 2.2 Ví dụ ứng dụng tạo test cho toán đưa số i chia hai đoạn có tổng Bài tốn cho dãy gồm N số nguyên không âm a1, a2, a3, …,aN Đưa số i mà tổng phần tử hai đoạn a[1 i] a[i+1 N] có tổng Dữ liệu vào: Đọc vào từ file DAY.INP: - Dòng đầu ghi N - Dòng ghi số a1, a2, a3, …,aN Kết quả: Ghi file văn DAY.OUT ghi số i Giới hạn: N ai.1) có tổng phần tử đoạn gấp K lần tổng phần tử đ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] a[d+1 N] có tổng sum(a[1 d]) =k*sum(a[d+1 N) sum(a[d+1 N)=k*sum(a[1 d]) (nghĩa đoạn đầu k đoạn cuối đoạn cuối k đoạn đầu) ta chọn ngẫu nhiên điểm cắt d khoảng n-1 tức random(n-2)+1 Tiếp theo ta tạo giá trị ngẫu nhiên 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), có tổng t=sum(a[1 d]) Chọn đoạn đầu k đoạn cuối đoạn cuối k đoạn đầu (có thể chọn ngẫu nhiên random(2)=0 =1, tương ứng a[d]:=a[d]+(k-1)*t t:=t*k) Ta tạo giá trị ngẫu nhiên 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) t:=t-a[i], cuối a[N]:=t Trong trường hợp vô nghiệm a[N] khởi tạo ngẫu nhiên Chương trình: skkn 3.2 Ví dụ ứng dụng tạo test cho tốn: Cho dãy số ngun khơng âm a1, a2, a3, …,aN (N>1) Hãy đưa số i mà tổng phần tử đoạn a[1 i] gấp K lần tổng phần tử đoạn a[i+1 N] Dữ liệu vào: Đọc vào từ file DAY.INP: - Dòng đầu ghi N K - Dòng ghi số a1, a2, a3, …,aN Kết quả: Ghi file văn DAY.OUT ghi số i Giới hạn: N ai

Ngày đăng: 09/02/2023, 14:44

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

TÀI LIỆU LIÊN QUAN