Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 42 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
42
Dung lượng
2,29 MB
Nội dung
MỤC LỤC PHẦN 1: MỞ ĐẦU I Lý chọn đề tài II Mục tiêu, nhiệm vụ nghiên cứu III Đối tượng nghiên cứu IV Phương pháp nghiên cứu 4.1 Nhóm phương pháp nghiên cứu lý luận 4.2 Nhóm phương pháp nghiên cứu thực tiễn 4.3 Phương pháp thực nghiệm V Tính đóng góp đề tài PHẦN 2: NỘI DUNG NGHIÊN CỨU I CƠ SỞ LÝ LUẬN Ưu điểm ngơn ngữ lập trình C++ Độ phức tạp thuật toán II THỰC TRẠNG 2.1 Thực trạng trước thực giải pháp sáng kiến 2.2 Thực trạng dạy học đội tuyển học sinh giỏi III BIỆN PHÁP CÁC PHÉP TỐN XỬ LÍ SỐ NGUN LỚN 1.1 Biểu diễn số nguyên lớn 1.2 Các phép tốn xử lí số ngun lớn BÀI TẬP VẬN DỤNG 14 2.1 Số FIBONACI……………………………………………………… 14 2.2 Tổng FIBONACI 15 2.3 Chuyển số 17 2.4 Nguồn số 20 2.5 Số ước tổng ước N! Tên file: TONGUOC.CPP 22 2.6 Cân đĩa Tên file: CANDIA.CPP 25 Một số tập số nguyên lớp áp dụng đề thi học sinh giỏi tỉnh 29 3.1 Hoán vị xâu Tên file: HOANVIXAU.CPP 29 3.2 Đánh số trang sách Tên file: TRANGSACH.INP 31 3.3 Băng giấy Tên file: TAPE.CPP 34 Kết thực nghiệm 35 Khảo sát cấp thiết tính khả thi giải pháp đề xuất 36 5.1 Mục đích khảo sát 36 5.2 Nội dung phương pháp khảo sát 36 5.3 Tổng hợp đối tượng sau khảo sát 37 5.4 Kết khảo sát cấp thiết tính khả thi giải pháp đề xuất 37 PHẦN 3: KẾT LUẬN VÀ ĐỀ XUẤT 40 I NHỮNG ĐÓNG GÓP CỦA ĐỀ TÀI 40 Tính đề tài 40 Tính khoa học 40 Tính khả thi 40 II ĐỀ XUẤT 40 Phạm vi áp dụng 40 Đối với giáo viên học sinh 40 TÀI LIỆU THAM KHẢO 41 PHẦN 1: MỞ ĐẦU I Lý chọn đề tài Trong ngơn ngữ lập trình thường có số kiểu liệu chuẩn cho biết phạm vi giá trị lưu trữ, dung lượng nhớ cần thiết để lưu trữ xác định phép tốn tác động lên liệu Tuy nhiên thực phép tốn với số ngun ngồi phạm vi biểu diễn cung cấp ta cần thiết kế cách biểu diễn hàm thực phép toán với số nguyên lớn Chúng ta biết rằng, việc giải tốn máy tính nói chung lập trình thi đấu nói riêng ln ln đối mặt với liệu có kích thước lớn Hiển nhiên liệu lớn vượt ngồi khả tính tốn người, nên cần tới trợ giúp máy tính Với nâng cấp liên tục máy tính điện tử, độ lớn liệu mà máy tính lưu trữ ngày tăng lên Tuy nhiên, khả lưu trữ luôn hữu hạn, mà liệu vô hạn (dữ liệu dạng văn dài vơ hạn, liệu dạng số lớn, ) Ngơn ngữ lập trình có sẵn nhiều kiểu liệu với khoảng giá trị lớn, luôn lưu trữ giá trị Riêng kiểu số C++, có sẵn kiểu liệu nguyên thủy long long với tầm lưu trữ lên tới khoảng 2020 chữ số Nhưng có liệu số với độ dài nhiều sao? Kĩ thuật xử lý số nguyên lớn đời nhằm giải vấn đề Trong đề tài này, tơi đưa cách biểu diễn số nguyên lên tới hàng trăm, hàng nghìn, chí vài chục nghìn chữ số, dựa vào khả lưu trữ chuỗi kí tự máy tính Các số nguyên chuyển sang dạng chuỗi kí tự, sau thiết kế phép toán cộng, trừ, nhân, chia, đồng dư tương ứng Do độ dài chuỗi kí tự phụ thuộc vào khả lưu trữ trình biên dịch (mà thơng thường lớn) nên ta dễ dàng giải vấn đề Nhằm nâng cao trình độ lập trình học sinh nói chung đáp ứng yêu cầu thi học sinh giỏi cấp nói riêng học sinh lập trình ln trọng đến tối ưu thuật tốn Hay nói cách khác làm để độ phức tạp toán nhỏ tốt Thực tế dạy học đội tuyển cấp tỉnh môn tin học giáo viên học sinh khơng lập trình tốn mà cần u cầu thời gian chạy Nói cách khác test yêu cầu chạy tối đa không giây lúc có kết cao Tuy nhiên thực tế học sinh lập trình tốn thường thời gian Một lỗi vượt thời gian thường xảy thuật toán chưa tối ưu Muốn độ phức tạp cho toán với kiểu liệu lớn thường từ 104 trở lên phải O(n) O(logn) Do cần biết vận dụng điểm mạnh ngơn ngữ C++ Trong q trình dạy bồi dưỡng học sinh giỏi trường phổ thông, nhận thấy khả xử lý học sinh để đưa thuật toán tối ưu với toán xử lý số ngun lớn cịn gặp nhiều khó khăn Nhằm khắc phục nhược điểm để đáp ứng yêu cầu công tác bồi dưỡng học sinh giỏi thầy trị trường THPT, tơi mạnh dạn đưa đề tài “Phương pháp xử lý số nguyên lớn bồi dưỡng học sinh giỏi ngôn ngữ lập trình C++” nhằm phục vụ cơng tác bồi dưỡng có hiệu II Mục tiêu, nhiệm vụ nghiên cứu - Xây dựng công cụ lập trình trình tiếp xúc làm việc với số nguyên lớn - Giúp học sinh giải toán số nguyên lớn cách tối ưu - Học sinh hiểu ngôn ngữ lập trình mà em vừa tiếp cận, ngơn ngữ lập trình C++ - Từ đưa nhận xét, đánh giá đề xuất giải pháp góp phần hồn thiện cơng tác dạy học lập trình toán mà liệu vào hay kết có giá trị nguyên dương lớn - Là tài liệu cho giáo viên bồi dưỡng, học sinh giỏi tham khảo III Đối tượng nghiên cứu - Ngôn ngữ lập trình C++ - Cấu trúc đề thi học sinh giỏi tỉnh môn tin tỉnh Nghệ An - Đối tượng học sinh đội tuyển tin học sinh giỏi trường tỉnh - Các toán xử lý số nguyên lớn ngơn ngữ lập trình C++ với đối tượng học sinh giỏi IV Phương pháp nghiên cứu 4.1 Nhóm phương pháp nghiên cứu lý luận Nghiên cứu chương trình giáo dục phổ thơng 2018 Các Nghị Đảng, Nhà nước, Bộ giáo dục đào tạo, Sở giáo dục đào tạo tỉnh liên quan đến đề tài nghiên cứu Nghiên cứu, phân tích cấu trúc nội dung chương trình tin học THPT đặc biệt cấu trúc đề thi học sinh giỏi cấp trường cấp tỉnh khối THCS THPT môn tin học Các tài liệu liên quan đến ngôn ngữ lập trình C++ cấu trúc liệu nâng cao C++ 4.2 Nhóm phương pháp nghiên cứu thực tiễn Thực tiễn qua dạy học bồi dưỡng đội tuyển học sinh giỏi tỉnh ôn luyện học sinh giỏi cấp trường 4.3 Phương pháp thực nghiệm Thực nghiệm bồi dưỡng học sinh giỏi kết đạt đội tuyển qua kỳ thi HSG tỉnh V Tính đóng góp đề tài - Đưa điểm toán xử lý số ngun lớn ngơn ngữ lập trình C++ so với ngơn ngữ khác - Góp phần làm rõ sở lí luận vấn đề bồi dưỡng học sinh giỏi, làm rõ khái niệm, vai trò đặc điểm yếu tố ảnh hưởng đến chất lượng công tác bồi dưỡng học sinh giỏi - Sáng kiến đưa hệ thống tập thích hợp, xếp cách logic, hợp lí từ dễ đến khó nhằm giúp học sinh củng cố kiến thức, rèn luyện kỹ phát triển tư biết áp dụng Tin học vào thực tiễn - Thông qua việc hướng dẫn giải toán giáo viên rèn luyện kỹ lập trình cho học sinh cách định hướng, hướng dẫn qua lời giải tập, qua góp phần tạo niềm tin hứng thú học tập PHẦN 2: NỘI DUNG NGHIÊN CỨU I CƠ SỞ LÝ LUẬN Ưu điểm ngôn ngữ lập trình C++ Trong quy định kỳ thi HSG Tin học, thí sinh lập trình ngơn ngữ PascaL, Python, C++… để giải tốn Trong ba NNLT này, C++ ngôn ngữ lựa chọn nhiều có ưu điểm bật hẳn so với hai ngơn ngữ lập trình lại số đặc điểm sau: - Là ngơn ngữ có kết hợp tính ngơn ngữ cấp cao thấp, sử dụng cho lập trình để giúp người dùng thâm nhập vào phần cứng, hỗ trợ chức ngơn ngữ lập trình bậc cao - Là ngơn ngữ lập trình có cấu trúc cho phép chương trình phức tạp chia thành chương trình đơn giản nhỏ nó, gọi hàm Nó cịn cho phép di chuyển liệu dễ dàng hàm Mà bạn thường xuyên thấy ngơn ngữ lập trình đại ngày - Là ngơn ngữ có nhiều tính khác nhau, cho phép người dùng truy cập trực tiếp vào API phần cứng máy, xuất phiên dịch Đặc biệt sử dụng tài nguyên máy cấp phát nhớ Đó tối ưu ứng dụng trình điều khiển hệ thống nhúng - Ngơn ngữ lập trình C++ phù hợp để rèn luyện cho học sinh hiểu sâu thuật tốn phân tích, đánh giá xác hiệu suất thuật tốn Bên cạnh C++ NNLT sử dụng phổ biến việc thiết kế, xây dựng phần mềm ứng dụng thực tiễn - Thư viện C++ có nhiều cấu trúc liệu khác cho học sinh linh hoạt lựa chọn cấu trúc phù hợp để lưu trữ xử lý tốn Bên cạnh C++ có hệ thống hàm có sẵn phong phú tìm min, max, tính tổng, xếp (với nhiều thuật toán khác nhau), thay phần tử, tìm kiếm (tìm kiếm thường tìm kiếm nhị phân)… Do tiết kiệm thời gian tăng tốc độ viết code lên nhiều - Và đặc biệt tốc độ thực thi chương trình nhanh C++ sử dụng trình biên dịch, thời gian thực thi thời gian biên dịch chương trình viết ngơn ngữ C++ đánh giá nhanh ngôn ngữ lập trình khác Đây tiêu chí quan trọng lập trình thi đấu kỳ thi học sinh giỏi cấp Từ ưu điểm mà ngôn ngữ C++ lựa chọn hàng đầu lập trình thi đấu Độ phức tạp thuật toán Khi đánh giá độ phức tạp thuật toán nghĩa tìm đánh giá thời gian khơng gian cần thiết để thực thuật tốn Khơng gian hiểu u cầu nhớ, thiết bị lưu trữ, … máy tính để thuật tốn làm việc Việc xem xét khơng gian thuật tốn phụ thuộc phần lớn vào cách tổ chức liệu thuật toán Ðánh giá thời gian thực thuật toán xác định thời gian tuyệt đối (chạy thuật toán giây, phút, …) để thực thuật toán mà xác định mối liên quan liệu đầu vào (input) thuật tốn chi phí (số thao tác, số phép tính cộng, trừ, nhân, chia, căn, …) để thực thuật tốn Sở dĩ người ta khơng quan tâm đến thời gian tuyệt đối thuật tốn thời gian chạy chương trình phụ thuộc vào nhiều yếu tố như: cấu hình máy tính, ngơn ngữ sử dụng, trình biên dịch, liệu đầu vào, …Một cách tổng quát, thời gian thực thuật toán hàm số phụ thuộc vào liệu đầu vào T = f(input) Việc xây dựng hàm T tổng quát trường hợp thuật tốn việc khó khăn, nhiều lúc khơng thể thực Chính mà người ta xây dựng hàm T cho số trường hợp đáng ý thuật toán, thường trường hợp tốt nhất, xấu trung bình Đối với tốn xử lý số ngun lớn, sử dụng theo cách thông thường độ phức tạp lớn, khơng đảm bảo thời gian giây mà thi lập trình yêu cầu II THỰC TRẠNG 2.1 Thực trạng trước thực giải pháp sáng kiến Trong kỳ thi lập trình, gặp tốn xử lý số nguyên lớn, học sinh giải toán với nhiều cách khác để đảm bảo theo yêu cầu đề chạy giây theo liệu đề học sinh khơng thực Vậy làm để giải tốn tối ưu nhất? Có giải pháp cho tốn đó? 2.2 Thực trạng dạy học đội tuyển học sinh giỏi 2.2.1 Những nguyên tắc công tác bồi dưỡng học sinh giỏi môn Tin học Bồi dưỡng học sinh giỏi nhiệm vụ mũi nhọn quan trọng trường phổ thông Để đạt kết tốt công tác bồi dưỡng học sinh giỏi môn Tin học yêu cầu giáo viên phải có trình độ chun mơn vững vàng, kĩ ngơn ngữ, tổ chức hợp lí hoạt động dạy học, xử lí linh hoạt, sáng tạo tình có vấn đề tiết học Bằng kiến thức, giáo viên bồi dưỡng cho học sinh cách có hệ thống giúp học sinh có tình cảm đắn mơn học Ngược lại, tình cảm u mến mơn học giúp em có ý thức cao q trình bồi dưỡng Các kỹ dạy học tương lai bao gồm khả phát triển việc đổi phương pháp sử dụng công nghệ để cải thiện môi trường học tập, trợ giúp việc chiếm lĩnh tri thức, đào sâu tri thức tạo lập tri thức Việc học tập bồi dưỡng nghề nghiệp giáo viên thành phần định cho tiến giáo dục Trong q trình dạy học, hoạt động học đóng vai trị chủ đạo Học sinh tự giác, tự lực tiếp thu kiến thức tác động giáo viên Thông qua vai trò người giáo viên, học sinh phát huy tính tự giác, tích cực, ham mê tìm kiếm thức Đảm bảo tính khoa học với tính vừa sức: nguyên tắc vô quan trọng bồi dưỡng học sinh giỏi Bởi yêu cầu, nhiệm vụ học tập phải phù hợp với trí tuệ học sinh Dạy học phù hợp khả năng, lực, trình độ phát triển đối tượng học sinh, đảm bảo học sinh phát triển mức cao Những kiến thức truyền tải đến học sinh phải học sinh tiếp thu sở phát huy hết khả Bồi dưỡng học sinh giỏi khơng phải dạy q khó, lý luận xa vời mà phải dạy chuẩn kiến thức, kỹ theo khung chương trình giới hạn mà kế hoạch Sở Giáo dục ban hành khối lớp Trên sở chuẩn kiến thức, giáo viên mở rộng, khắc sâu kiến thức cho học sinh Nếu đưa kiến thức cao em, em không hiểu mà dẫn đến việc chán học, lâu dần em cảm thấy áp lực, xa vời không hứng thú với việc bồi dưỡng học sinh giỏi Hoặc dừng lại việc cung cấp kiến thức theo chuẩn khó có học sinh giỏi khơng phát huy tính sáng tạo, tích cực học tập học sinh 2.2.2 Thực trạng công tác bồi dưỡng học sinh giỏi môn Tin học trường THPT a Về phía học sinh Có thể thấy cơng tác bồi dưỡng HSG Tin học trường THPT gặp số khó khăn định công tác tuyển chọn học sinh bồi dưỡng, xây dựng chương trình, nội dung bồi dưỡng, quy trình bờ i dưỡng giảng da ̣y, tài liê ̣u bồ i dưỡng, công tác kiể m tra, kiể m đinh ̣ chấ t lươṇ g Bởi lẽ thực tế, theo quan niệm sai lầm số người: môn Tốn, Văn, Ngoại ngữ coi “chính”, môn khác bị coi “phụ”, riêng môn Tin học “rất phụ” Quan niệm “chính” - “phụ” khơng có phụ huynh, mà cịn có người học, chí đội ngũ giáo viên Thực tế có nhiều trường hợp xảy thân đồng nghiệp khác trình lấy danh sách đội tuyển tham gia học sinh giỏi Học sinh giáo viên chọn thi mơn Tin học tỏ khơng thích, cịn dè chừng Có học sinh nhận lời với giáo viên khơng phải mơn khối, tâm lí thi mơn khơng mơn Tốn, Lí, Hóa, nên em từ chối sau tham gia thời gian Cịn có trường hợp phụ huynh biết giáo viên chọn thi môn Tin học phụ huynh có phản ứng liền khơng đồng ý sợ thời gian làm ảnh hưởng đến môn khối Ngay đội ngũ giáo viên có người có tác động đến học sinh khơng muốn cho tham gia thi mơn Tin học Cuối đội tuyển môn tin học tuyển chọn học sinh cịn sót lại mơn Tốn, Lí, Hóa, Sinh, Anh,… Ngồi học sinh đa số làm quen với ngôn ngữ Pacal, nên chuyển sang ngơn ngữ C++ em cịn bỡ ngỡ Tài liệu để em tham khảo hạn chế b Về phía giáo viên - Giáo viên dạy bồi dưỡng vừa phải bảo đảm chất lượng đại trà, vừa phải hoàn thành tiêu chất lượng mũi nhọn cơng tác kiêm nhiệm cường độ làm việc tải việc đầu tư cho công tác bồi dưỡng HSG có phần bị hạn chế - Giáo viên dạy bồi dưỡng phải tự soạn chương trình dạy, theo kinh nghiệm thân, tự nghiên cứu, tự sưu tầm tài liệu - Học sinh học chương trình khóa phải học q nhiều mơn, lại phải học thêm nhiều môn khác, cộng thêm chương trình bồi dưỡng HSG nên hạn chế thời gian tự học Các em đầu tư thời gian cho việc học bồi dưỡng HSG, kết không cao điều tất yếu - Sau kỳ thi học sinh giỏi mơn Tin thường khơng có đáp án Nếu có đáp án tham khảo việc đọc hiểu đáp án khó đáp án thường khơng có ý tưởng thuật tốn kèm theo Thực tế, qua kỳ thi HSG tỉnh Nghệ An có nhiều học sinh, giáo viên khó hiểu thi làm điểm thi thấp khó hiểu kéo dài đáp án tham khảo test chấm cơng bố Khó khăn lớn nhà số em đội tuyển bồi dưỡng học sinh giỏi chưa có máy tính để học nhà, giáo viên bồi dưỡng tin học phải nghĩ cách để em có cơng cụ học tập sớm tốt Bằng cách mượn máy đồng nghiệp Có em gia đình lại khó khăn khơng thể động viên gia đình học sinh mua máy tính viên bồi dưỡng phải tự mua máy vi tính cũ để em có phương tiện học tập III BIỆN PHÁP CÁC PHÉP TỐN XỬ LÍ SỐ NGUN LỚN 1.1 Biểu diễn số nguyên lớn Thông thường người ta sử dụng cách biểu diễn số nguyên lớn sau: * Xâu kí tự mảng xâu: Đây cách biểu diễn tự nhiên đơn giản nhất, ký tự xâu tương ứng với chữ số số nguyên lớn tính từ trái qua phải * Mảng số: Sử dụng mảng lưu chữ số (hoặc nhóm chữ số), biến ghi nhận số chữ số để thuận tiện q trình xử lí * Danh sách liên kết số: Sử dụng danh sách liên kết chữ số (hoặc nhóm chữ số), cách làm linh hoạt việc sử dụng nhớ 1.2 Các phép tốn xử lí số ngun lớn a Khai báo số lớn - Khai báo theo kiểu xâu: Ta biết xâu hiểu mảng chứa hàng triệu ký tự - Khai báo theo kiểu mảng: Coi phần tử mảng kí tự Để dễ dàng việc xử lý, sử dụng cách dùng theo kiểu xâu Chúng ta định nghĩa số lớn bignum #define bignum string bignum X,Y; // xâu X,Y kiểu bignum b So sánh số lớn * Phân tích thuật tốn Ở ta dùng phép toán >, < = Cho toán: so sánh số nguyên lớn X Y Nếu X>Y cho kết 1; X=Y cho kết 0; X,