intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Sáng kiến kinh nghiệm THPT: Giúp học sinh tiếp cận một số bài toán số học bằng ngôn ngữ lập trình C++ nhằm nâng cao chất lượng học sinh giỏi môn tin học trung học phổ thông

Chia sẻ: _ _ | Ngày: | Loại File: PDF | Số trang:22

1
lượt xem
0
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Nghiên cứu đề tài “Giúp học sinh tiếp cận một số bài toán số học bằng ngôn ngữ lập trình C++ nhằm nâng cao chất lượng học sinh giỏi môn tin học trung học phổ thông” với mong muốn phần nào giúp học sinh cũng như giáo viên có thêm tài liệu tham khảo phục vụ cho việc học tập và giảng dạy, ôn thi HSG.

Chủ đề:
Lưu

Nội dung Text: Sáng kiến kinh nghiệm THPT: Giúp học sinh tiếp cận một số bài toán số học bằng ngôn ngữ lập trình C++ nhằm nâng cao chất lượng học sinh giỏi môn tin học trung học phổ thông

  1. SỞ GIÁO DỤC & ĐÀO TẠO HÀ TĨNH Đơn vị: Trường THPT Hồng Lĩnh BIỆN PHÁP GIÚP HỌC SINH TIẾP CẬN MỘT SỐ BÀI TOÁN SỐ HỌC BẰNG NGÔN NGỮ LẬP TRÌNH C++ NHẰM NÂNG CAO CHẤT LƯỢNG HỌC SINH GIỎI MÔN TIN HỌC THPT Người thực hiện: Lê Thị Châu Long Tổ: Lý – Tin - CNCN Năm học: 2024 – 2025
  2. Phần 1. ĐẶT VẤN ĐỀ 1. 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ều nhậ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ực nà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ân lự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ành khoa 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ên thế giới. Tin học ngày càng có nhiều ứng dụng trong hầu hết các lĩnh vực hoạt động của xã hội loài người. Tuy nhiên, Tin học là một môn học khó vì cơ sở của nó là toán học, bài tập rất đa dạng và phong phú, việc học sinh của trường đi thi học sinh giỏi và để giành được giải không phải là đơn giản, do vậy giáo viên phụ trách đội tuyển cần nhiều kinh nghiệm và kiến thức sát với nội dung ôn thi để nâng cao thành tích đội tuyển tham gia các đợt thi học sinh giỏi hàng năm, Và để có được kết quả tốt cần có một quá trình nghiên cứu, học tập về ngôn ngữ lập trình và chọn một ngôn ngữ lập trình thích hợp. Hiện nay có rất nhiều ngôn ngữ lập trình bậc cao như: Pascal, Java, Basic, C, C++,. Tuy nhiên điều cơ bản của C++ là cho phép người lập trình hiểu và quản lí các chương trình lớn, phức tạp. Vì vậy, nó được sử dụng nhiều trong các kỳ thi học sinh giỏi Tin học. Xuất phát từ cơ sở trên, tôi đã chọn đề tài “GIÚP HỌC SINH TIẾP CẬN MỘT SỐ BÀI TOÁN SỐ HỌC BẰNG NGÔN NGỮ LẬP TRÌNH C++ NHẰM NÂNG CAO CHẤT LƯỢNG HỌC SINH GIỎI MÔN TIN HỌC THPT”. 2. Mục đích nghiên cứu Qua quá trình tham gia giảng dạy, bồi dưỡng học sinh giỏi và việc nghiên cứu các vấn đề về lập trình theo từng dạng bài tập từ cơ bản đến phức tạp của ngôn ngữ lập trình C++, các tài liệu về phương pháp giảng dạy phục vụ cho việc học tập, ôn thi học sinh giỏi của học sinh cũng như giảng dạy của giáo viên, tôi đã giải các bài toán bằng ngôn ngữ lập trình C++ với hệ thống lập trình CodeBlocks. Từ đó, tôi đưa ra đề tài “Giúp học sinh tiếp cận một số bài toán số học bằng ngôn ngữ lập trình C++ nhằm nâng cao chất lượng học sinh giỏi môn tin học trung học phổ thông” với mong muốn phần nào giúp học sinh cũng như giáo viên có thêm tài liệu tham khảo phục vụ cho việc học tập và giảng dạy, ôn thi HSG. 3. Đối tượng nghiên cứu Một số bài toán số học bằng ngôn ngữ lập trình C++ nhằm nâng cao chất lượng học sinh giỏi môn tin học trung học phổ thông. 4. Phương pháp nghiên cứu. Kinh nghiệm bản thân qua các kỳ ôn thi HSG, nghiên cứu các tài liệu về C++ qua sách tham khảo, mạng internet, sưu tầm tài liệu, thử nghiệm thực tế, rút kinh nghiệm từ các tiết dạy bồi dưỡng HSG. 1
  3. 5. Phạm vi nghiên cứu Đề tài chủ yếu nghiên cứu giải một số bài toán số học từ cơ bản đến nâng cao bằng ngôn ngữ C++. Đề tài có khả năng áp dụng rộng rãi vào giảng dạy, bồi dưỡng học sinh giỏi Tin học cho giáo viên và học sinh THPT trên địa bàn toàn tỉnh Hà Tĩnh 6. Tính mới của đề tài - Đề tài nghiên cứu về vận dụng các kiến thức đã học về thuật toán, từ đó viết chương trình trên ngôn ngữ lập trình C++ - Mô tả được thực trạng về vấn đề cấp thiết cho cho học sinh THPT ở cách học lập trình và lựa chọn ngôn ngữ lập trình đặc biệt là trong các kỳ thi học sinh giỏi Tỉnh. Phần 2. NỘI DUNG ĐỀ TÀI 1. Cơ sở lý luận và thực tiễn 1.1. Cơ sở lí luận: C++ được biết đến như là ngôn ngữ mới bao trùm lên C và do Bjarne Stroustrup sáng tác ra vào năm 1980 tai bang New Jersey, Mĩ. Lúc đầu ông đặt tên là “C với các lớp”, tuy nhiên đến năm 1983 thì ông đổi tên thành C++. Trong C++ chẳng những đưa vào tất cả các khái niệm, công cụ của lập trình hướng đối tượng mà còn đưa vào nhiều khả năng mới mẻ cho hàm. Nó có một thư viện hàm chứa mã đối tượng cho những hàm đã được tạo sẵn. Những hàm này thực hiện các tác vụ thường dùng như nhập một chuổi ký tự từ bàn phím (gets()), tính căn bậc hai (sqrt()), ... mà chương trình được viết có thể sử dụng mà không phải viết lại. 1.2. Cơ sở thực tiễn: Qua thực tế giảng dạy ở trường THPT các năm qua, tôi nhận thấy khi học đến chương trình NNLT tin học lớp 11 đa số học sinh đều nhận xét bộ môn này rất khó. 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, cách giải các bài toán bằng NNLT. Trong chương trình phổ thông NNLT Pascal đang được giảng dạy cho HS khối 11, nhưng tôi thấy NNLT C++ rất thuận tiện và có nhiều lợi thế khi dạy bồi dưỡng học sinh giỏi và giúp học sinh giải các bài toán phức tạp thuận tiện hơn. Nội dung vấn đề nghiên cứu Ví dụ: Bài tập đơn giản “Chương trình Hello World” Viết ra màn hình dòng chữ Hello world Một chương trình C++ cơ bản thường được bắt đầu bởi dòng include khai báo thư viện, sau đó là hàm main. Có rất nhiều kiểu dữ liệu trong C++, đối với các bạn mới bắt đầu và để làm các bài tập cơ bản thì nên tìm hiểu trước về kiểu dữ liệu int, long, long long, float, double, long double, char, string, 2
  4. 2.1 BÀI TẬP SỐ HỌC 2.1.1 BÀI TẬP VỀ ƯỚC CHUNG LỚN NHẤT (UCLN) Bài 1: Nhập vào 2 số nguyên A và B, viết chương trình tìm ước chung lớn nhất của 2 số đó. Trong bài này chúng ta có thể sử dụng cách giải tìm ước chung lớn nhất trong C++, bằng cách sử dụng thuật toán loại trừ hoặc thuật toán Euclid hoặc bằng hàm gcd có sẵn trong thư viện algorithm của C++ Ví dụ Tìm UCLN bằng phương pháp trừ Ý tưởng của thuật toán này là trừ hai số A và B cho nhau tới khi hai số này bằng nhau. Lúc này ta sẽ tìm được UCLN của 2 số. Các bước triển khai thuật toán sẽ như sau: - Kiểm tra A hoặc B có bằng 0 hay không? Nếu bằng 0 trả về UCLN là A+B. Dừng chương trình. - Lặp cho tới khi A = B. Với mỗi vòng lặp thì biến biến max(A, B) = giá trị max(A, B) - giá trị min(A, B). Input : A = 20, B = 15 Output : 5 3
  5. Kết quả chương trình: * Tìm UCLN sử dụng thuật toán Euclid Giải thuật Euclid, hay Thuật toán Euclid là một giải thuật giúp tính UCLN của hai số một cách hiệu quả. Thuật toán Euclid Thuật toán Euclid là một giải thuật giúp chúng ta tìm ước chung lớn nhất của 2 số. Nó được triển khai dựa trên tính chất của UCLN đó là UCLN(A, B) = UCLN(B, A%B). Ý tưởng triển khai thuật toán này sẽ quy nạp cho tới khi A % B = 0. 4
  6. Kết quả chương trình: 5 -> Đây là cách tối ưu để giải các bài toán với dữ liệu lớn. * Tìm UCLN bằng hàm có sẵn trong C/C++ Ngoài cách tự viết các hàm tìm uớc chung lớn nhất, chúng ta còn có thể sử dụng hàm gcd có sẵn trong thư viện algorithm của C/C++. Chương trình: Kết quả chương trình: 5 Đây là cách nhanh nhất để giải bài toán trong C/C++, ngoài tìm ước chung lớn nhất thư viện algorithm còn có nhiều hàm hỗ trợ khác cho giải các bài toán như max, min, sort,... Bài 2: Cho dãy A gồm N số tự nhiên. Tìm ước chung lớn nhất của dãy số đó. 5
  7. - Dữ liệu vào gồm: + Dòng thứ nhất là số nguyên dương N + Các dòng tiếp theo các phần tử của dãy - Kết qua ra là ước chung lớn nhất của dãy. VD: Nhap N = 5 a[0] = 3 a[1] = 6 a[2] =12 a[3] =15 a[4] =9 Chương trình: Kết quả chương trình: 6
  8. 2.1.2 BÀI TẬP VỀ CẤP SỐ CỘNG Bài 1. Viết chương trình nhập số nguyên dương N và dãy số nguyên A1, A2, A3, …,An. Kiểm tra xem dãy vừa nhập có phải là cấp số cộng hay không, Nếu đúng thì ghi số 1, ngược lại ghi số 0. Ví dụ: Dữ liệu vào Kết quả Dữ liệu vào Kết quả 5 1 6 0 3 5 7 9 11 1 3 5 6 8 10 Chương trình: 7
  9. Kết quả chương trình: 2.1.3 BÀI TẬP VỀ SỐ NGUYÊN TỐ Định nghĩa Số nguyên tố trong lập trình: Số nguyên tố là số tự nhiên lớn hơn 1, chỉ có 2 ước là 1 và chính nó. Hay nói cách khác Số nguyên tố là số nguyên dương có duy nhất 2 ước phân biệt là 1 và chính nó. Bài 1. Nhập vào số nguyên dương N, Tìm và đưa ra số nguyên tố lớn hơn N. Ví dụ: Dữ liệu vào Kết quả Dữ liệu vào Kết quả Chương trình: 7 11 14 17 8
  10. Kết quả chạy chương trình: Bài 2: Số nguyên tố đối xứng Một số nguyên dương T được gọi là số nguyên tố đối xứng nếu thỏa mãn các yêu cầu sau: - T là một số nguyên tố - T là một số đối xứng (đọc T từ trái qua phải thu được kết quả giống như đọc T từ phải qua trái). Ví dụ 12321 là 1 số đối xứng. Yêu cầu: cho 2 số nguyên dương A và B (104 ≤ A < B
  11. Kết quả chạy chương trình: Bài 3: TÌM SỐ Cho số nguyên dương X, khi đảo ngược trật tự các chữ số của X ta sẽ thu được một số nguyên dương Y, Y được gọi là số đảo ngược của X. Ví dụ: X = 613 thì Y = 316 là số đảo ngược của X. Số nguyên dương Y được gọi là số nguyên tố nếu nó chỉ có hai ước số là 1 và chính nó, số 1 không phải là số nguyên tố. Cho hai số nguyên dương P và Q (1 ≤ P ≤ Q ≤ 2 109; Q - P ≤ 105). Yêu cầu: Hãy tìm tất cả các số nguyên dương X nằm thỏa mãn P ≤ X ≤ Q và số đảo ngược của số X là số nguyên tố. Dữ liệu vào: Cho trong file văn bản TIMSO.INP có cấu trúc như sau: - Dòng 1: Ghi hai số nguyên dương P Q, hai số được ghi cách nhau ít nhất một dấu cách. Dữ liệu ra: Ghi ra file văn bản TIMSO.OUT trên nhiều dòng, mỗi dòng ghi một số nguyên X tìm dược. Ví dụ: TIMSO.INP TIMSO.OUT 10 19 11 13 14 16 17 Chương trình: 10
  12. 11
  13. Kết quả chạy chương trình: 2.1.1 BÀI TẬP VỀ GIAI THỪA Bài 1. Giai thừa của một số được cho bởi công thức sau: n!=1*2*…*n Cho số N (N Kết quả: 1!+2!+3! = 9 Chương trình: 12
  14. Kết quả chương trình: 2.1.2 BÀI TẬP VỀ SỐ HOÀN HẢO Số hoàn hảo được hiểu đơn giản là số có tổng các ước số thật sự của nó bằng chính nó. Ước số thật sự là ước số không bao gồm chính nó. Ví dụ: 1. Số 6 là một số hoàn hảo vì tổng các ước số thật sự của số 6 là: 1 + 2 + 3 = 6 (tức là bằng chính nó) 2. Số 12 không phải là một số hoàn hảo vì tổng các ước số thực sự của số 12 là: 1 + 2 + 3 + 4 + 6 = 16 (khác với chính nó) Giải thích thuật toán: giả sử ta có một số a là số cần kiểm tra. 1. Đầu tiên ta tìm ra các ước số của a, -> ta sẽ cần một vòng lặp For, lặp từ 1 đến a/2 với bước nhảy là 1 (i++). 2. Tiếp đến tạo một biến Sum, được dùng để tính tổng các ước số của a. Ta tạo một điều kiện trong vòng lặp For, nếu (a % i == 0) thì sum += i 3. Cuối cùng, kiểm tra nếu sum == a thì a chính là số hoàn hảo và ngược lại. * Lưu ý: Các ước số của a luôn bé hơn hoặc bằng a/2. Bài 1. Nhập vào số nguyên n, kiểm tra số vừa nhập có phải là số hoàn hảo không? Ví dụ: Dữ liệu vào Kết quả Dữ liệu vào Kết quả 6 6 La so Hoan Hao 12 12 Khong la so Hoan Hao 13
  15. Chương trình: Kết quả chạy chương trình: Bài 2: Cặp đôi hoàn hảo Cho dãy số nguyên gồm n phần tử a1, a2,… an. Hai số ai và aj (i=1, 2,…n; j=1, 2,…n; i≠j) được gọi là cặp đôi hoàn hảo nếu ai, aj là 2 số nguyên tố. Với dãy số trên tìm số cặp đôi hoàn hảo. Yêu cầu: Hãy cho biết có bao nhiêu cặp đôi hoàn hảo. Ví dụ: Dãy số a là 3 2 -4 7 thì số cặp đôi hoàn hảo là 3 Dữ liệu vào có nội dung như sau: ▪ Dòng đầu là số nguyên dương n (n≤103) ▪ Trong n dòng sau, dòng thứ i là số nguyên ai (i=1, 2,… n; |ai|≤105) Kết quả ghi ra: Một số nguyên duy nhất là số cặp đôi hoàn hảo. Ví dụ: 14
  16. Dữ liệu vào Kết quả ra 4 3 3 2 -4 7 Chương trình: 2.1.3 BÀI TẬP VỀ SỐ CHÍNH PHƯƠNG Số chính phương là số tự nhiên có căn bậc hai là một số tự nhiên, hay nói cách khác, số chính phương bằng bình phương của một số tự nhiên. Ví dụ: 1. Số 4 là số chính phương vì 2^2 = 4. (hoặc sqrt(4) = 2). 2. Tập các số chính phương như sau: CP = {4; 9; 16; 25; ...}. Có các cách để viết thuật toán kiểm tra số chính phương như sau: 1. Kiểm tra số chính phương bằng vòng lặp. 2. Kiểm tra số chính phương bằng hàm sqrt() trong thư viện math.h. …. * Thuật toán kiểm tra số chính phương bằng vòng lặp. Thuật toán: 15
  17. • Lặp i chạy từ 0 đến khi i*i > n. Nếu i * i = n thì n chính là số chính phương, kết thúc chương trình. • Nếu i * i > n thì n không phải là số chính phương. * Thuật toán kiểm tra số chính phương bằng hàm sqrt() Thuật toán: • Trong thư viện math.h có một hàm được dùng để tính căn bậc hai, đó chính là hàm sqrt() • Chúng ta sử dụng hàm sqrt() để đặt điều kiện cho số n. Nếu sqrt(n) * sqrt(n) = n, thì n chính là số chính phương và ngược lại. Bài 1: Viết chương trình nhập vào một dãy gồm n số nguyên. Hãy tìm và in ra màn hình các số chính phương có trong dãy đó. Ví dụ: Dữ liệu vào Kết quả Nhap n = 6 2 Cac so chinh phuong: 4 4 5 8 9 14 9 Chương trình: 16
  18. Kết quả chạy chương trình: 2.1.4 BÀI TẬP VỀ SỐ PHONG PHÚ Bài tập: Đếm số phong phú. Số phong phú là số có tổng các ước số nguyên của nó kể cả số 1 (không kể chính nó) lớn hơn nó. Ví dụ: Số 6 có tổng các ước 1+ 2+ 3 = 6 không là số phong phú. Số 12 có tổng các ước là 1+ 2+ 3+ 4+ 6 = 16 (Lớn hơn 12) là số phong phú. Yêu cầu: Hãy cho biết có bao nhiêu số phong phú không lớn hơn N. Dữ liệu vào: Số nguyên N (0< N ≤ 105) Kết quả: Ghi một số nguyên duy nhất là kết quả tìm được theo yêu cầu. Ví dụ: Dữ liệu vào Kết quả ra Giải thích: Trong ví dụNhapcó 4 số phong phú là 12, 18, 20, 24 trên n: 24 4 Chương trình: 17
  19. Kết quả chạy chương trình: 2.1.1 BÀI TẬP VỀ SỐ ĐẸP Bài tập: Một số nguyên dương được gọi là số đẹp khi tổng bình phương các chữ số của nó là một số nguyên tố. Ví dụ: số 12 là một số đẹp vì 12 + 22 = 5 là số nguyên tố. Yêu cầu: Cho số nguyên dương N, có bao nhiêu số đẹp nhỏ hơn hoặc bằng N. Dữ liệu nhập vào gồm một số nguyên dương N (1 ≤ N ≤ 106) Kết quả ra là số lượng số đẹp nhỏ hơn hoặc bằng N. Ví dụ: Dữ liệu vào Kết quả ra 20 4 Hướng dẫn: Cần viết 2 hàm: Kiểm tra Số đẹp; Kiểm tra nguyên tố. Chương trình: 18
  20. Kết quả chạy chương trình: 2.1.1 BÀI TẬP VỀ SỐ THÂN THIỆN Bài tập Đang tìm hiểu các thuật toán về số tự nhiên, Nguyên phát hiện ra số tự nhiên có rất nhiều tính chất thú vị. Nhiều số tự nhiên khi tìm ước chung lớn nhất với số đảo ngược của nó bằng 1, những số như thế được gọi là số thân thiện. Chẳng hạn số 23, số đảo ngược của nó là 32, hai số này có ước chung lớn nhất là 1 nên số 23 là số thân thiện và 32 cũng là số thân thiện. Yêu cầu: Cho 2 số tự nhiên a, b (10 ≤ a ≤ b ≤ 104). Hãy đếm xem trong đoạn từ a đến b có bao nhiêu số thân thiện. Ví dụ: Dữ liệu vào Kết quả Giải thích 19 29 4 Đó là các số: 19, 23, 25, 29 - Ý tưởng: Dùng 1 biến Dem để lưu số lượng số thân thiện Xét lần lượt các số tự nhiên i từ a tới b Với mỗi số i xác định số tự nhiên j là đảo ngược của i Nếu UCLN(i,j)= 1 thì tăng biến Dem lên 1 Kết quả bài toán là Dem Chương trình: 19
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2