(SKKN 2022) rèn luyện tư duy lập trình cho học sinh khá giỏi thông qua việc phân tích, đánh giá nhiều cách giải khác nhau của một số bài tập tin học có sử dụng kĩ thuật ép kiểu trong ngôn ngữ lập trình c++

19 29 0
(SKKN 2022) rèn luyện tư duy lập trình cho học sinh khá giỏi thông qua việc phân tích, đánh giá nhiều cách giải khác nhau của một số bài tập tin học có sử dụng kĩ thuật ép kiểu trong ngôn ngữ lập trình c++

Đ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

1 MỞ ĐẦU 1.1 Lý chọn đề tài Để bắt nhịp xu đại, hướng dẫn điều chỉnh nội dung dạy học Tin học năm 2021- 2022 Bộ Giáo dục định hướng trường THPT ngừng dạy học NNLT Pascal, thay NNLT tiên tiến C, C++, Python… Năm học 2021- 2022 năm trường đưa NNLT C+ + vào dạy học Tin học khố cho học sinh khối 11 ôn luyện thi học sinh giỏi Đã từ lâu, công tác bồi dưỡng học sinh khá, giỏi xem nhiệm vụ trọng tâm nhà trường Thông qua kết thi học sinh giỏi, phần giúp khẳng định vị nhà trường trường huyện tỉnh Đối với mơn Tin học, học lập trình góp phần phát triển tư sáng tạo, rèn luyện tính cẩn thận tính xác cho người học; đồng thời việc học lập trình từ THPT góp phần phát tài năng, định hướng nghề nghiệp cho học sinh trước lựa chọn ngành nghề, bổ sung nguồn nhân lực tin học cho xã hội công nghệ thông tin Các đề thi học sinh giỏi môn Tin học cấp THPT thường yêu cầu xử lí liệu có phạm vi lớn Ngồi việc học sinh phải ý xây dựng thuật toán tối ưu để đảm bảo thời gian thực chương trình (theo quy định khơng q giây/1 test) học sinh cịn cần phải ý kiểu liệu biến sử dụng chương trình Ép kiểu kĩ thuật sử dụng phổ biến sử dụng thi học sinh giỏi Trên thực tế có nhiều tài liệu có đề cập đến kĩ thuật ép kiểu các tài liệu đưa code tốn, chưa phân tích lí cần ép kiểu, cách tư duy, cách cài đặt Do áp dụng vào tốn khác học sinh thường lúng túng quên không thực ép kiểu thực ép kiểu chưa dẫn đến kết đưa (output) bị sai Từ lí tơi xin trình bày sáng kiến kinh nghiệm “RÈN LUYỆN TƯ DUY LẬP TRÌNH CHO HỌC SINH KHÁ GIỎI THƠNG QUA VIỆC PHÂN TÍCH, ĐÁNH GIÁ NHIỀU CÁCH GIẢI KHÁC NHAU CỦA MỘT SỐ BÀI TẬP TIN HỌC CÓ SỬ DỤNG KĨ THUẬT ÉP KIỂU TRONG NGƠN NGỮ LẬP TRÌNH C++” 1.2 Mục đích nghiên cứu Đề tài đưa số tập cần sử dụng kĩ thuật ép kiểu, cách cài đặt code mà học sinh thường thực hiện, phân tích đánh giá cách giải Thơng qua học sinh biết ý đến việc xem xét kĩ liệu, cân nhắc khai báo biến, cài đặt thuật tốn, đồng thời qua giúp học sinh rèn luyện tư lập trình 1.3 Đối tượng nghiên cứu Các tập lập trình có sử dụng ép kiểu chương trình Tin học THPT 1.4 Phương pháp nghiên cứu Trong q trình nghiên cứu hồn thiện SKKN sử dụng nhiều phương pháp: - Phương pháp nghiên cứu tài liệu: Tôi nghiên cứu tập lập trình đề thi mơn Tin học nhiều năm trở lại đây, nghiên cứu làm học sinh, tổng hợp cách giải - Phương pháp xử lí số liệu: Dựa vào kết chấm điểm từ phần mềm chấm tự động Themis Test chấm cách làm, phân tích lỗi sai, từ rèn luyện tư lập trình cho học sinh 2 PHẦN NỘI DUNG 2.1 Cơ sở lí luận Ép kiểu C, C++ việc gán giá trị biến có kiểu liệu tới biến khác có kiểu liệu khác Cú pháp: (type) value; Ví dụ: float c = 35.8f; int b = (int)c + 1; Trong ví dụ trên, giá trị dấu phẩy động c đổi thành giá trị nguyên 35 Sau cộng với kết giá trị 36 lưu vào b.1 2.2 Thực trạng vấn đề trước áp dụng sáng kiến Năm học 2021-2022, thống Tổ nhóm chun mơn, chúng tơi lựa chọn NNLT C++ để đưa vào minh hoạ cho dạy khố Tin học 11 ơn thi học sinh giỏi (thay cho NNLT Pascal) Tuy nhiên, chưa có sách giáo khoa thay nên trị sử dụng sách giáo khoa Tin học hành, việc tổ chức dạy học, dẫn tìm kiếm tài liệu cho học sinh tham khảo gặp không khó khăn Trong q trình ơn luyện học sinh giỏi tơi thường khơng máy móc u cầu học sinh phải thực cách làm, mà học sinh thực giải theo nhiều cách khác Để nâng cao hiệu dạy học, sử dụng phần mềm chấm tự động Themis (tác giả Lê Minh Hoàng) để kiểm tra kết Sau chấm, thông báo kết thường yêu cầu học sinh phải xem xét kĩ cách làm bạn nhóm đội tuyển, tìm hay dở code chương trình, để từ học sinh rèn luyện tư lập trình cho học sinh Trong q trình thảo luận, trao đổi cách làm, tơi nhận thấy nhiều học sinh tỏ lúng túng em không hiểu ý tưởng, thuật toán kết lại khác Có bạn ghi điểm tuyệt đối, có bạn ghi phần nhỏ số điểm, lại có bạn khơng ghi điểm Ngun nhân nhiều, phạm vi sáng kiến kinh nghiệm đưa lỗi học sinh không thực ép kiểu tập cần ép kiểu Từ ép kiểu C++ trinh-cpp/ep-kieu-trong-cpp … đến lưu vào b trích dẫn từ nguồn: https://viettuts.vn/lap3 có ép kiểu thực chưa dẫn tới kết chưa mong muốn thơng qua việc phân tích đánh giá cách làm 2.3 Các biện pháp sử dụng để giải vấn đề Cách rèn luyện tư lập trình tốt thực hành giải tập Quá trình giải hệ thống tập, học sinh buộc phải động não suy nghĩ để xây dựng thuật tốn, viết code, học sinh thực tích luỹ phát triển tư duy, biến kiến thức từ sách thành kiến thức thân Để học sinh tránh lỗi sai, với dạng giáo viên cần tạo tình có vấn đề, để học sinh giải vấn đề từ tích luỹ kinh nghiệm cho thân Như để học sinh hiểu rõ kĩ thuật ép kiểu, tránh lỗi sai ép kiểu xây dựng hệ thống tập có sử dụng ép kiểu Để đưa học sinh vào tình có vấn đề tơi thường lựa chọn tập học sinh dễ sai Quá trình học sinh giải tập, trao đổi với bạn nhóm cách giải bạn học sinh tự giải vấn đề Thông qua học sinh tích luỹ thêm kinh nghiệm cho thân, rèn luyện tư lập trình, nâng cao hiệu học tập Dưới số tập ép kiểu sử dụng để đưa học sinh vào tình có vấn đề 2.3.1 Bài tốn ví dụ Bài toán 1: Tổng nhỏ Tên file: MINSUM.CPP Với hai số nguyên dương A, B cho trước Ta dễ dàng tìm ước chung lớn G bội chung nhỏ L hai số A B Bây xét toán ngược toán trên: “Cho biết trước ước chung lớn G bội chung nhỏ L hai số nguyên dương A B Rõ ràng, có nhiều cặp (A, B) nguyên dương có ước chung lớn G chung nhỏ L, nhiên có trường hợp khơng thể tìm giá trị A, B thỏa mãn Vì vậy, xác định giá trị nhỏ tổng A + B, đưa -1 khơng tìm cặp (A, B)” INPUT: Hai số nguyên dương G L (1 ≤ G ≤ L ≤ 109) OUTPUT: Số nguyên dương tổng nhỏ Trong trường hợp khơng tìm hai số A B đưa kết -1 Ví dụ: MINSUM.IN P MINSUM.OU T 10 20 35 12 14 -1 Giải thích ví dụ: - Ở ví dụ thứ nhất: Chỉ có cặp (2, 10) thỏa mãn UCLN(2,10) = 2, BCNN(2,10) = 10 Nên tổng 12 - Ở ví dụ thứ hai: Có hai cặp (2, 20) (4, 10) thỏa mãn, tổng nhỏ 14 - Ở ví dụ thứ ba: khơng tìm cặp thỏa mãn UCLN BCNN Ràng buộc  40% số điểm tương ứng với số test có ≤ G ≤ L ≤ 100;  60% số điểm cịn lại khơng có ràng buộc Ý tưởng thuật tốn Nhận xét: Để giải tập ta sử dụng cách trâu bị dùng vịng lặp để duyệt giá trị có a b, tìm gán lại tổng bé a+b cho biến Smin lại sau lần duyệt - Cách làm học sinh chắn điểm tối đa với liệu đề cho chạy thời gian quy định Do ta cần tìm cách giải tối ưu Ta có: BCNN(a,b) = suy a*b = BCNN(a,b)*UCLN(a,b) = G*L Đặt T = G*L Giả sử a> G >> L; int T=G*L; int can=sqrt(T); for(int a=can; a>=G; a ) { if (T%a==0) { int b=T/a; if( gcd(a,b)==G) {cout L; long long T=G*L; int can=sqrt(T); for(int a=can; a>=G; a ) { if (T%a=0) { int b=T/a; if( cd(a,b)==G) {cout> L; long long T=(long long)G*L; int can=sqrt(T); for(int a=can; a>=G; a ) { if (T%a==0) { int b=T/a; if( gcd(a,b)==G) {cout b; long long m= trunc(sqrt(b))- trunc(sqrt(a-1)); cout a >> b; cout> a >> b; cout> a >> b; long long m= trunc(sqrt(b)); long long n= trunc(sqrt(a-1)); cout cho: INPUT •Một dòng chứa hai số nguyên dương b n cách dấu cách (1 ≤ b, n ≤ 106) OUTPUT •Ghi số nguyên số lượng cặp (a, m) thỏa mãn yêu cầu Ví dụ: INPUT OUTPUT 12 Giải thích ví dụ: Có cặp (a, m) thỏa mãn ứng với phân số: Ý tưởng thuật toán: Ý tưởng: Sử dụng toán học để biến đổi đẳng thức ta anm – an2 – bm2 + bmn = amn – bmn – an2 = bm2 - 2bmn an2 = 2bmn – bm2 (1) (2) Do a, n, b, m số nguyên dương nên từ (2) ta rút 2n > m tức là: 1 b >> n; for (int m = 1; m > n; 14 for (int m = 1; m

Ngày đăng: 06/06/2022, 10:21

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan