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, xử lý xâu 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
lượt xem 11
download
Đề tài “Giúp học sinh tiếp cận một số bài toán số học, xử lý xâu 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.
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: Giúp học sinh tiếp cận một số bài toán số học, xử lý xâu 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
- SÁNG KIẾN KINH NGHIỆM Đề tài: GIÚP HỌC SINH TIẾP CẬN MỘT SỐ BÀI TOÁN SỐ HỌC, XỬ LÝ XÂU 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 Môn/Lĩnh vực: Tin học
- SỞ GIÁO DỤC & ĐÀO TẠO NGHỆ AN Đơn vị: Trường THPT Phan Đăng Lưu SÁNG KIẾN KINH NGHIỆM Đề tài: GIÚP HỌC SINH TIẾP CẬN MỘT SỐ BÀI TOÁN SỐ HỌC, XỬ LÝ XÂU 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 Môn/Lĩnh vực: Tin học Người thực hiện: Trần Thị Hương Tổ: Toán – Tin Điện thoại: 0964627715 Năm học: 2022 – 2023
- MỤC LỤC Phần 1. ĐẶT VẤN ĐỀ ............................................................................................ 1 1. Lý do chọn đề tài ................................................................................................... 1 2. Mục đích nghiên cứu ............................................................................................. 1 3. Đối tượng nghiên cứu ............................................................................................ 1 4. Phương pháp nghiên cứu ....................................................................................... 1 5. Phạm vi nghiên cứu .............................................................................................. 2 6. Tính mới của đề tài ............................................................................................... 2 Phần 2. NỘI DUNG ĐỀ TÀI .................................................................................. 2 1. Cơ sở lý luận và thực tiễn...................................................................................... 2 1.1 Cơ sở lý luận ................................................................................................... 2 1.2 Cơ sở thực tiễn ................................................................................................ 2 2. Nội dung vấn đề nghiên cứu ................................................................................. 3 2.1 BÀI TẬP SỐ HỌC .......................................................................................... 3 2.1.1 Bài tập về ước chung lớn nhất................................................................... 3 2.1.2 Bài tập về cấp số cộng ............................................................................... 7 2.1.3 Bài tập về số nguyên tố ............................................................................. 8 2.1.4 Bài tập về giai thừa.................................................................................. 12 2.1.5 Bài tập về số hoàn hảo ............................................................................ 13 2.1.6 Bài tập về số chính phương ..................................................................... 16 2.1.7 Bài tập về số phong phú .......................................................................... 17 2.1.8 Bài tập về số đẹp ..................................................................................... 19 2.1.9 Bài tập về số thân thiện ........................................................................... 20 2.2 BÀI TẬP XÂU ................................................................................................ 22 2.2.1 Các kiến thức cơ bản về xâu ................................................................... 22 2.2.2 Bài tập xâu ............................................................................................... 24 Phần 3. KẾT LUẬN VÀ KIẾN NGHỊ ................................................................ 35 1. Kết luận ............................................................................................................... 35 2. Kiến nghị ............................................................................................................. 35 TÀI LIỆU THAM KHẢO .................................................................................... 35 PHỤ LỤC ............................................................................................................... 36
- 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, XỬ LÝ XÂU 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, xử lý xâu 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, xử lý xâu 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. 1
- 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. 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, xử lý xâu 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 Nghệ An. Nghiên cứu thực tiễn và thăm dò tính cấp thiết, tính khả thi của đề tài ở một số giáo viên Tin học Trường trung học phổ thông tỉnh Nghệ An: Trường THPT Yên Thành 2, Trường THPT Nam Yên Thành, trường THPT Phan Đăng Lưu. 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. Ngoài ra trong các đề thi học sinh giỏi tỉnh các năm qua, chủ đề xâu dữ liệu là một nội dung trọng tâm, đa số đề thi đều có các dạng bài thuộc kiểu xâu, bài toán số học: Số bạn bè, số thân thiện, số 2
- đẹp….Vì vậy tôi đã đầu tư nghiên cứu các nội dung, các dạng bài tập và mạnh dạn viết về đề tài này. 2. 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 #include using namespace std; int main() { cout
- * 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). #include using namespace std; int UCLN(int A, int B) { if (A == 0 || B == 0) return A + B; while(A != B) { if (A > B) { A -= B; }else{ B -= A; } } return A; } int main() { int A,B; A = 20; B = 15; cout
- 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. #include using namespace std; int UCLN(int A, int B) { if (B == 0) return A; return UCLN(B, A%B); } int main() { int A,B; A = 20; B = 15; cout Đâ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: #include #include using namespace std; 5
- int main() { int A,B; A = 20; B = 15; cout b) return UCLN(a-b,b); else return UCLN(a,b -a); } int UC(int a[], int n) { if(n==1) 6
- return a[0]; else return UCLN(a[n-1],UC(a,n-1)); } int main() { int a[30], n; coutn; for(int i=0; i
- #include #define max 10000 using namespace std; int main() { int n;cin>>n; int A[max] ; for(int i=0;i>A[i]; int d; d=A[1]-A[0]; bool x=true; for(int i=2;i
- { if(nN; N=N+1; while(songto(N)==false) N++; cout
- { s = s * 10 + n % 10; n = n / 10; } if (s == a) return true; return false; } bool songto(int a) { if (a < 2) return false; for (int i = 2; i * i > A >> B; int dem = 0; while (A
- 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 ≤ 2109; 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: #include using namespace std; int daonguocso(int a) { int s = 0; int n = a; while (n > 0) { s = s * 10 + n % 10; n = n / 10; } return s; } bool songto(int a) { if (a < 2) return false; for (int i = 2; i * i
- if (a % i == 0) return false; return true; } int main() { freopen("TIMSO.INP", "r", stdin); freopen("TIMSO.OUT", "w", stdout); int P, Q; cin >> P >> Q; while (P
- long long gt=1; for(long i=2;i>n; long long s=0; if(n==0) s=1; while(n>0) { long a=n%10; s=s+giaithua(a); n=n/10; } cout
- 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 Chương trình: #include using namespace std; bool check(int a){ int sum = 0; for(int i=1;i
- 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ụ: Dữ liệu vào Kết quả ra 4 3 3 2 -4 7 Chương trình: #include using namespace std; int a[1000]; bool ktra(int a) { if(an; for(int i=1;i>a[i]; int dem=0; for(int i=1;i
- 2.1.6 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ụ: Số 4 là số chính phương vì 2^2 = 4. (hoặc sqrt(4) = 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: 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 Cac so chinh phuong: 2 4 5 8 9 14 49 Chương trình: #include #include using namespace std; bool scp(int n) { 16
- int sqr = sqrt(n); if(sqr*sqr == n) { return true; } else return false; } int main() { int n; do{ cout > n; }while(n > a[i]; cout
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Sáng kiến kinh nghiệm THPT: Bộ ngữ pháp ôn thi tốt nghiệp môn tiếng Anh dạng khung
53 p | 60 | 10
-
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: Hướng dẫn học sinh lớp 12 trường THPT Yên Định 3 giải nhanh bài toán trắc nghiệm cực trị của hàm số
29 p | 34 | 9
-
Sáng kiến kinh nghiệm THPT: Rèn kỹ năng cảm thụ văn xuôi Việt Nam hiện đại trong chương trình Ngữ văn 12
27 p | 42 | 9
-
Sáng kiến kinh nghiệm THPT: Sử dụng đường tròn lượng giác để giải nhanh một số bài toán dao động điều hòa trong chương trình Vật lí 12 THPT
42 p | 52 | 8
-
Sáng kiến kinh nghiệm THPT: Các dạng câu hỏi của bài đọc điền từ thi THPT Quốc gia
73 p | 31 | 7
-
Sáng kiến kinh nghiệm THPT: Phương pháp thử và đặc biệt hóa trong giải toán trắc nghiệm
32 p | 17 | 7
-
Sáng kiến kinh nghiệm THPT: Sử dụng sơ đồ tư duy giúp học sinh lớp 12 trường THPT Trần Đại Nghĩa làm bài kiểm tra đạt hiệu quả cao
41 p | 57 | 7
-
Sáng kiến kinh nghiệm THPT: Một vài kinh nghiệm hướng dẫn ôn thi học sinh giỏi Địa lí lớp 12
20 p | 22 | 7
-
Sáng kiến kinh nghiệm THPT: Giúp học sinh lớp 12 nâng cao năng lực viết đoạn văn nghị luận xã hội trong kì thi Trung học phổ thông quốc gia
38 p | 33 | 6
-
Sáng kiến kinh nghiệm THPT: Giúp học sinh trung bình và yếu ôn tập và làm tốt câu hỏi trắc nghiệm chương 1 giải tích 12
25 p | 28 | 5
-
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: Nâng cao hiệu quả dạy - học qua việc tích hợp nội dung ứng phó với biến đổi khí hậu trong bài 14 và 15 Địa lí 12
32 p | 32 | 5
-
Sáng kiến kinh nghiệm THPT: Một số kinh nghiệm rèn kĩ năng viết đoạn văn nghị luận xã hội cho học sinh lớp 12 ở trường THPT Vĩnh Linh
20 p | 16 | 5
-
Sáng kiến kinh nghiệm THPT: Phương pháp dạy giúp học sinh nhớ kiến thức ngữ pháp để làm tốt bài tập
24 p | 29 | 3
-
Sáng kiến kinh nghiệm THPT: Các giải pháp khắc phục một số thiếu sót nhằm nâng cao kết quả việc học toán ở trung học phổ thông
31 p | 30 | 3
-
Sáng kiến kinh nghiệm THPT: Sử dụng phương pháp Grap trong dạy học hóa học 10 nhằm rèn luyện tư duy cho học sinh THPT
14 p | 46 | 3
-
Sáng kiến kinh nghiệm THPT: Giúp học sinh giải tốt các bài toán phương trình, bất phương trình mũ và lôgarit có chứa tham số
37 p | 43 | 2
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