Skkn sử dụng giải thuật euclid giúp học sinh giải các bài toán trong lập trình theo định hướng phát triển năng lực

26 8 0
Skkn sử dụng giải thuật euclid giúp học sinh giải các bài toán trong lập trình theo định hướng phát triển năng lự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

SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ TRƯỜNG THPT BA ĐÌNH NGA SƠN SÁNG KIẾN KINH NGHIỆM SỬ DỤNG GIẢI THUẬT EUCLID GIÚP HỌC SINH GIẢI CÁC BÀI TOÁN TRONG LẬP TRÌNH THEO ĐỊNH HƯỚNG PHÁT TRIỂN NĂNG LỰC Họ và t[.]

SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ TRƯỜNG THPT BA ĐÌNH NGA SƠN SÁNG KIẾN KINH NGHIỆM SỬ DỤNG GIẢI THUẬT EUCLID GIÚP HỌC SINH GIẢI CÁC BÀI TOÁN TRONG LẬP TRÌNH THEO ĐỊNH HƯỚNG PHÁT TRIỂN NĂNG LỰC Họ tên: Vũ Thị Huệ Chức vụ: Giáo Viên SKKN thuộc mơn: Tin Học THANH HỐ, NĂM 2022 skkn Mục lục Mở đầu 1.1 Lý 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 Nội dung sáng kiến kinh nghiệm .2 2.1 Cơ sở lý luận sáng kiến kinh nghiệm 2.2 Thực trạng vấn đề trước áp dụng sáng kiến kinh nghiệm 2.3 Giải pháp tổ chức thực để giải vấn đề 2.4 Hiệu đề tài nghiên cứu .19 Kết luận đề xuất…………………………………… …………………20 3.1 Kết luận…………………….………… ……………… …………… 20 3.2 Kiến nghị …………………………………………………….……… 20 Tài liệu tham khảo Danh mục đề tài SKKN Phụ Lục skkn 1 Mở đầu 1.1 Lý chọn đề tài Mỗi thuật toán giải toán, có nhiều thuật tốn khác giải toán Do vậy, cần thiết phải lựa chọn thuật toán tốt để giải cho toán cho Vấn đề đặt là, việc lựa chọn thuật tốn tốt dựa tiêu chí nào? Có nhiều tiêu chí để đánh giá thuật tốn tốt Trong đó, tiêu chí để thiết kế lựa chọn thuật toán thường dựa yếu tố thời gian không gian cần thiết để thực thuật tốn Trong yếu tố thời gian đặc biệt quan trọng thời gian tài ngun khơng thể tái tạo Trong chương trình tin học phổ thơng có nhiều tốn sử dụng chương trình tìm ước số chung lớn nhất(UCLN) hai số nguyên không âm Có nhiều thuật tốn khác để tìm UCLN hai số ngun khơng âm thuật tốn Euclid ưu việt thuật toán khác [1] Thuật toán Euclid để tìm ước số chung lớn hai số ngun khơng âm thuật tốn biết đến từ lâu thuật tốn quen thuộc người học lập trình, khơng phải hiểu thuật tốn cách sâu sắc Thuật toán đơn giản song có nhiều vấn đề thú vị ứng dụng Trong thực tiễn tính tốn, đa phần thuật tốn cổ dần bị thay thuật toán mới, song thuật tốn Euclude khỏi tình trạng đó, trước hết nhờ tính tiết kiệm thời gian nó[4] 1.2 Mục đích nghiên cứu - Mục đích nghiên cứu sáng kiến tơi muốn trình bầy làm rõ thuật tốn tìm ước chung lớn số nguyên dương để ứng dụng vào giải toán mức độ THPT [3] - Nắm vững, hiểu rõ thuật tốn tìm ước chung lớn số nguyên dương thông thường, đặc biệt hiểu điểm ưu việt thuật toán Euclude - Luyện cho học sinh kỹ viết, lựa chọn sử dụng kỹ thuật linh hoạt lập trình - Học sinh biết vận dụng thuật tốn tìm ước chung lớn giải vấn đề thực tiễn, phát huy suy nghĩ tích cực, tư sáng tạo Huy động tiềm học sinh, góp phần hình thành lực giải vấn đề cho học sinh 1.3 Đối tượng nghiên cứu - Sử dụng linh hoạt thuật tốn tìm ước chung lớn số nguyên dương, đặc biệt thuật toán Euclid để sử lý liệu giải toán máy tính chương trình phổ thơng cách khoa học hiệu 1.4 Phương pháp nghiên cứu Khi nghiên cứu áp dụng đề tài sử dụng phương pháp nghiên cứu: - Phương pháp nghiên cứu xây dựng sở lý thuyết, qua văn chủ trương Đảng, sách pháp luật nhà nước giáo dục đào tạo chương trình phổ thơng skkn - Phương pháp điều tra khảo sát thực tế, thu thập thông tin xử lý số liệu Đảm bảo tính xác thực trạng, hiệu vấn đề nghiên cứu rút kết luận quan trọng - Phương pháp thống kê xử lý liệu phân tích tổng hợp, thu thập thông tin từ nhiều nguồn tài liệu Nội dung sáng kiến kinh nghiệm 2.1 Cơ sở lý luận sáng kiến kinh nghiệm - Sáng kiến đề cập đến khía cạnh khác thuật tốn tìm ước chung lớn số nguyên dương để xử lý liệu Từ đánh giá thời gian thực thi dung lượng nhớ cấp phát kỹ thuật Người lập trình chọn áp dụng thuật tốn tìm ước chung lớn số nguyên dương phù hợp với yêu cầu toán liệu đặt - Bằng việc so sánh thời gian chạy chương trình để thấy ưu việt thuật tốn Euclid tìm ước chung lớn số ngun dương Tuy nhiên thuật tốn tìm ước chung lớn số nguyên dương chủ đạo sách giáo khoa Tin Học lớp 10 lớp 11 đưa thuật tốn tìm ước chung lớn phương pháp trừ thích hợp với tốn sở có liệu nhỏ [1] Khi giải toán với liệu lớn hơn, yêu cầu độ phức tạp nhỏ, cần thời gian chạy hơn, tơi tìm hiểu đến thuật tốn tìm ước chung lớn khác để phù hợp cho tốn đặt tơi trình bầy sáng kiến kinh nghiệm này[5] Bên cạnh đó, cá nhân tơi nhận thức tầm quan trọng việc tăng cường đổi dạy học Bộ giáo dục đào tạo tập trung đạo thông qua nghị Hội nghị trung ương khóa XI việc đổi bản, toàn diện giáo dục đào tạo nêu rõ: ” Tiếp tục đổi mạnh mẽ phương pháp dạy học học theo phương pháp đại, phát huy tính tích cực, chủ động sáng tạo vận dụng kiến thức, kỹ người học, khắc phục lối truyền thụ áp đặt chiều, ghi nhớ máy móc Tập trung dạy cách học, cách nghĩ, khuyến khích tự học, tạo sở để người học tự cập nhật đổi trí thức, kỹ phát triển lực Chuyển từ học lớp sang tổ chức hình thức học tập đa dạng, ý hoạt động đa dạng, ngoại khóa, nghiên cứu khoa học Đẩy mạnh ứng dụng công nghệ thông tin truyền thông dạy học ” Hiện tài liệu ngơn ngữ lập trình phong phú đa dạng Việc đưa hệ thống tập có tính phân bậc để luyện kỹ cho em hoc sinh giúp em dễ dàng nắm bắt nội dung học mà định hướng phát triển tư cho em khả ngơn ngữ lập trình, linh hoạt hình thành lực tích cực, thiết thực cho em Xây dựng sở lý thuyết lẫn vận dụng, đem lại hiệu cao cho người học người dạy[3] 2.2 Thực trạng vấn đề trước áp dụng sáng kiến kinh nghiệm Về tinh thần thái độ em hoc sinh trường THPT Ba Đình tơi thấy em nhận thức vai trò lớn lao ứng dụng công nghệ thông tin “ Cách mạng công nghiệp 4.0” nay, em hào hứng, tích cực xây dựng ý tưởng để giải tốn máy tính Thích skkn lắng nghe quy trình để làm sản phẩm phần mềm mà thực tế em sử dụng, điều kích thích niềm say mê học lập trình em Trong chương trình Tin Học THPT Nga Sơn, lập trình C++ mơn học khó, hầu hết học sinh chưa học làm quen cấp hai nên em tỏ lúng túng lựa chọn thuật tốn, khó khăn việc diễn đạt câu lệnh, cú pháp để viết chương trình[3] Khi dạy học lớp, đặc biệt việc bồi dưỡng cho học sinh mũi nhọn, giải toán cần sử dụng đến thuật tốn tìm ước chung lớn số nguyên dương, em sử dụng thuật tốn tìm ước chung lớn số nguyên dương theo phương pháp trừ sách giáo khoa Tin Học lớp 10 để viết chương trình sách giáo khoa lớp 11, với tốn có liệu nhỏ khơng với tốn có liệu lớn làm cho thời gian chạy chương trình chậm hơn, khó khăn giải tốn có liên quan Chương trình không kiểm tra hết Text cao mà đề hiệu khơng cao Vì tơi mạnh dạn áp dụng đề tài: “ SỬ DỤNG GIẢI THUẬT EUCLID GIÚP HỌC SINH GIẢI CÁC BÀI TOÁN TRONG LẬP TRÌNH THEO ĐỊNH HƯỚNG PHÁT TRIỂN NĂNG LỰC ” 2.3 Giải pháp tổ chức thực Khi học lập trình chương trình tin học phổ thơng học sinh quan tâm đến kết lời giải mà không để ý đến thời gian thực chương trình, gặp kiểu liệu số lớn chương trình chạy chậm, thời gian bị treo máy Chẳng hạn, xét tốn: Tìm ước số chung lớn (UCLN) hai số nguyên không âm không đồng thời 0? - Xác định toán + Input: số nguyên không âm m n (không đồng thời 0); + Output: UCLN(m, n) = ? - Thuật toán Để giải toán này, học sinh thường sử dụng nhiều thuật toán khác thuật toán tự nhiên, thuật tốn tìm UCLN sử dụng phép trừ trình bày SGK tin học 10,… Sau tơi xin trình bày số thuật tốn tìm UCLN mà học sinh thường dùng: - Thuật toán tự nhiên để tìm UCLN Ý tưởng thuật tốn: + Nếu n = lấy UCLN(m, n) = m, khơng chọn dãy số n, n-1, n-2, …,1 số mà m n chia hết cho số đó, có số dư Cài đặt ngơn ngữ lập trình C++ if (n == 0) ucln = m; else for (int i = n; i >= 1; i ) if (m % i == && n % i == 0) break; ucln = i; skkn - Thuật tốn tìm UCLN sử dụng phép trừ trình bày SGK tin học 10 Ý tưởng thuật tốn: + Nếu m = n UCLN(m, n) = m; + Nếu m > n UCLN(m, n) = UCLN(m - n, n); + Nếu m < n UCLN(m, n) = UCLN(m, n - m); Thuật tốn thực Liệt kê bước: + Bước 1: Nhập m, n; + Bước 2: Nếu m = n lấy giá trị chung làm UCLN chuyển đến bước 5; + Bước 3: Nếu m > n m  m – n quay lại bước 2; + Bước 4: n  n – m quay lại bước 2; + Bước 5: Đưa kết UCLN kết thúc Dùng sơ đồ khối: Nhập m n Sai m=n? Đúng Đưa m; Kết thúc Sai m>n? Đúng m m-n - Cài đặt ngôn ngữ lập trình C++ int ucln(int m, int n){ while (m != n){ if (m > n) m = m – n; else n = n - m; } return m; } Mơ thuật tốn với m =39, n = 15; m 39 39-15=24(1) 24-15=9(2) n 15 15 15 m != n true true true skkn m>n true True false n n-m 9-6=3(4) 15-9=6(3) 6-3=3(5) true true false True false Ở đây, với m= 39, n = 15, ta cần thực phép trừ đến m = n = để tìm ước chung lớn 39 15 Ta có cặp số thứ tự m n thay đổi qua lần lặp: (39, 15), (24, 15), (9, 15), (9, 6), (3, 6), (3, 3) - Thực trạng việc khơng dùng thuật tốn Euclid: + Ở thuật tốn thứ n lớn (ví dụ: n = 2.109) m, n có UCLN thuật tốn phải dùng 2*n phép chia m n cho i + Ở thuật toán thứ hai trường hợp số nhỏ, số cịn lại lớn (ví dụ: m = 2, n = 2000000000) số phép trừ lớn (lặp 109 lần) Do vậy, thuật toán trường hợp nêu chương trình chạy chậm Để khắc phục nhược điểm tơi hướng dẫn học sinh dùng thuật tốn Euclid để tìm UCLN số nguyên không âm (không đồng thời 0) vận dụng để giải toán chương trình tin học phổ thơng theo định hướng phát triển lực Nhận xét: Để đưa thuật toán, trước hết Euclid nhận xét: Giả sử m n không đồng thời không hai số ngun khơng âm m ≥ n Khi đó: - Nếu n = UCLN(m, n) = m - Nếu n ≠ ta có hệ thức UCLN(m, n) = UCLN(n, r) với r số dư phép chia m cho n Từ nhận xét trên, Euclid đưa thuật tốn sau để tìm UCLN hai số nguyên không âm (không đồng thời 0) Thuật toán Biểu diễn thuật toán: Cách 1: Liệt kê bước Bước 1: So sánh số thứ hai với - Nếu số thứ hai dừng lại, kết luận UCLN số thứ - Nếu số thứ hai khác tính số dư phép chia số thứ cho số thứ hai chuyển sang bước Bước 2: Thay số thứ số thứ hai, số thứ hai số dư vừa tính được, quay lại bước Lưu ý: Số dư bé số chia, dãy giảm số nguyên dương vơ hạn Do đó, thuật tốn Euclid chắn dừng bước đó, số dư Ví dụ: Áp dụng thuật tốn Euclid m= 39, n = 15, Tìm UCLN(39,15) = ? + Lấy 39 chia cho 15 dư 9.(1) + 15 vào vị trí 39, vào vị rí 15 ( m =15, n =9) + Ta lại lấy 15 chia cho dư 6.(2) skkn + vào vị trí 15, vào vị trí ( m =9, n = 6) + Lại lấy chia cho dư 3.(3) + vào vị trí 9, vào vị trí (m = 6, n = 3) + Lấy chia cho dư (4) Khi thuật tốn dừng, kết luận ước chung lớn Như vậy, với cặp số m = 39, n = 15, ta cần thực qua phép chia đến dư 0, ta thu UCLN (39,15) = Ta cặp số có thứ tự: (39,15), (15,9), (9,6), (6,3), (3,0) Cách 2: Dùng sơ đồ khối Nhập m n true n=0 Thơng báo UCLN = m, kết thúc thuật tốn false r m%n m n n r Cài đặt ngơn ngữ lập trình C++ int ucln (int m, int n){ int r; while (n != 0){ r = m % n; m = n; n = r; } return m; } Ngồi C++ có hàm tính UCLN số viết sẵn thư viện Và sử dụng thuật tốn Euclid Đó hàm gcd(m, n) Hàm cho kết UCLN số nguyên không âm m n (không đồng thời 0), kiểu liệu số cho hàm kiểu int Và kết trả kiểu int Giải thuật Euclid có nhiều ứng dụng lý thuyết thực tế, số học, thuật toán Euclid thuật toán để xác định ước số chung lớn skkn số nguyên Nó dùng để rút gọn phân số dạng tối giảm thực phép chia số học module….việc ứng dụng thuât tốn Euclid để giải tốn chương trình Tin học phổ thông theo định hướng phát triển lực giúp cho học sinh áp dụng giải nhiều tốn hay khó lập trình, sử lý liệu lớn với thời gian ngắn nhất, đảm bảo kiểm tra hết text đề ra[4] Tôi xin trình bày ví dụ sau giúp học sinh so sánh thấy rõ ưu việt khác biệt giải tốn thuật tốn Euclid Bài tốn 1: Tìm ước số chung lớn số nguyên không âm m, n không đồng thời (Điều kiện m, n ≤ 2.109) Dữ liệu: Vào từ file UCLN.INP gồm số nguyên m, n Kết quả: Ghi file UCLN.OUT số nguyên kết tốn Ví dụ: UCLN.INP UCLN.OUT 86 - Xác định toán + Input: số nguyên không âm m, n + Output: Ước số chung lớn (UCLN) m n bao nhiêu? - Hướng dẫn thuật tốn + Dùng thuật tốn tìm UCLN sử dụng phép trừ sách giáo khoa Tin Học lớp 10 #include using namespace std; int m, n; int ucln( int m, int n){ while (m!= n){ if (m>n) m=m-n; else n=n-m; } return m; } int main(){ freopen("ucln.inp", "r", stdin); freopen("ucln.out", "w", stdout); cin >> m >> n; cout > m >> n; cout > m >> n; cout > a >> b >> c >> d; e = a * c; f = b * d; g = ucln(e, f); cout b >> c >> d; e = a * c; f = b * d; g = gcd(e, f); cout a[i]; res = ucln(a[1], a[2]); for (int i = 3; i n; for (int i = 1; i > a[i]; res = gcd(a[1], a[2]); for (int i = 3; i t; while (t ) { int a,b,m,n; cin>> m>>n>>a>>b; if (m>n) cout C>>D; coutx>>y; int n= gcd(x,y); cout

Ngày đăng: 02/02/2023, 08:57

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

Tài liệu liên quan