1. Trang chủ
  2. » Tất cả

Sáng kiến kinh nghiệm Thuật toán tối ưu tìm ước chung lớn nhất của hai số nguyên

16 2 0

Đ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

Nội dung

Sáng kiến kinh nghiệm Thuật toán tối ưu tìm ước chung lớn nhất của hai số nguyên SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ TRƯỜNG THPT HÀ TRUNG ********************* SÁNG KIẾN KINH NGHIỆM THUẬT TOÁN TỐI ƯU TÌM[.]

SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ TRƯỜNG THPT HÀ TRUNG ********************* SÁNG KIẾN KINH NGHIỆM THUẬT TOÁN TỐI ƯU TÌM ƯỚC CHUNG LỚN NHẤT CỦA HAI SỐ NGUYÊN Người thực hiện: Lê Thị Hạnh Chức vụ: Giáo viên Đơn vị công tác: Trường THPT Hà Trung SKKN thuộc mơn: Tin học THANH HỐ NĂM 2016 SangKienKinhNghiem.net MỤC LỤC MỤC NỘI DUNG PHẦN I MỞ ĐẦU TRANG Lý chọn đề tài 01 Mục đích 01 Đối tượng 02 Phương pháp 02 PHẦN II I NỘI DUNG SÁNG KIẾN KINH NGHIỆM Cơ sở lý luận sở thực tiễn vấn đề 02 Cơ sở lý luận 02 Cơ sở thực tiễn 02 II III PHẦN III Nội dung đề tài Thực trạng trước sau áp dụng đề tài KẾT LUẬN VÀ ĐỀ XUẤT SangKienKinhNghiem.net 03 12 13 PHẦN I MỞ ĐẦU Lý chọn đề tài Môn Tin học môn học khác trường, việc dạy Tin học cần thực hoạt động hoạt động tự giác, tích cực, chủ động sáng tạo người học Khi cần dạy nội dung cho học sinh giáo viên cần cần hướng cho học sinh nội dung liên quan đến hoạt động nào, dạng tốn Căn trình độ học sinh, trang bị có nhà trường để lựa chọn cho học sinh luyện tập Để học sinh có ý thức ý nghĩa hoạt động Cần đặt học sinh vào tình có vấn đề để hướng đích cho học sinh Tập luyện cho học sinh tư thuật toán, chỉnh sửa thuật toán, khắc phục thuật tốn tìm thuật tốn tối ưu Đối với chương trình lớp 11, lập trình để giải tốn máy tính hiểu theo nghĩa chuyển đổi thuật tốn có sang chương trình viết ngơn ngữ lập trình bậc cao Từ việc cài đặt chương trình học sinh hiểu thuật tốn Kết có tốn từ thuật tốn có Từ học sinh biết cách điều chỉnh, tìm tịi, chỉnh sửa, lựa chọn thuật tốn cho tốn Bài tốn vận dụng tìm ƯCLN dạng tốn chương trình tốn học từ THCS đến THPT Các toán loại phong phú, đa dạng, nắm vững kiến thức, dạng tốn học sinh có điều kiện để giải nhiều tập liên quan tới kiến thức Việc giải tốt loại toán giúp cho học sinh hình thành thói quen làm việc cách khoa học, hình thành thói quen tìm quy luật tốn học nói riêng, Tin học đời sống nói chung Với học sinh đại trà yêu cầu dạng tập không phức tạp, có lẽ mà thời gian dành cho học tốn loại khơng nhiều Tuy nhiên thực tế giảng dạy nhận thấy học sinh hay nhầm lẫn việc tìm ƯCLN có nhiều thuật toán từ đơn giản Học sinh dễ nhớ Nhưng đơi học sinh chưa tìm cách giải để khắc phục thuật toán Hoặc chưa tìm thuật tốn tối ưu cho tốn cần giải vấn đề Chính tơi muốn tìm cho cách dạy, quy trình truyền đạt kiến thức cho học sinh để học sinh không nhiều thời gian mà nắm bắt chắn giải thành thạo loại toán Đề tài “Thuật tốn tối ưu tìm ước chung lớn hai số nguyên” ví dụ minh họa cho việc hình thành tri thức cho học sinh việc học lập trình Mục đích Đây đề tài sáng kiến kinh nghiệm thực hịên từ năm hoc trước, trực tiếp giảng dạy môn Tin học lớp 11 Tiếp tục khẳng định giá trị thực tế đề tài, năm học dạy môn Tin học lớp 12 song kết hợp với đồng nghiệp áp dụng đề tài Với mục đích : - Giáo viên gây hứng thú cho học sinh gặp hai loại toán SangKienKinhNghiem.net - Có kỹ nhận diện , phân biệt xác hai loại tốn - Có cách giải cách trình bày xác khoa học, có kỹ thành thạo giải toán - Giải số dạng toán mà cách giải vận dụng dạng toán Đối tượng Để thực đề tài chọn đối tượng học sinh đại trà lớp 11D trường THPT Hà Trung , thực học kì I năm học 2014 – 2015 lớp 11C năm học 2015 – 2016 Phương pháp: Để học sinh hình thành kỹ làm dạng tập liên quan đến thuật toán Cũng cách khắc phục ưu khuyết điểm thuật toán áp dụng Cần cho học sinh thử chạy chương trình với test theo tiêu chí khác Để từ học sinh biết cách khắc phục hồn thiện chương trình Tìm đc thuật toán tối ưu PHẦN II NỘI DUNG SÁNG KIẾN KINH NGHIỆM I Cơ sở lý luận thực tiễn vấn đề 1.Cơ sở lí luận Quan điểm hoạt động phương pháp dạy học sinh thể tư tưởng chủ đạo sau:  Cho học sinh thực luyện tập hoạt động  Gợi động cho hoạt động  Dẫn dắt học sinh kiến tạo tri thức, đặc biệt tri thức phương pháp phương tiện kết học tập  Phân bậc hoạt động làm phương pháp 2.Cơ sở thực tiễn a Đối với học sinh Trong quan niệm cách nghĩ nhiều học sinh, môn Tin học mơn học sử dụng máy tính, gõ văn bản, làm theo thói quen, khơng cần có tư duy; mơn học phụ nên học sinh có tâm lý xem nhẹ môn học, học làm theo lối mịn, học để đối phó Hơn lại môn học cần thực hành mà điều kiện kinh tế địa phương nhiều hạn chế Thời gian thực hành ít, sở vật chất thiếu thốn Học lập trình lại khó, học sinh dễ nản lịng Cịn phận không nhỏ học sinh lười đọc tài liệu, khơng chịu khó, chưa có tìm tịi, khám phá dẫn đến thiếu hiểu biết kiến thức môn b.Đối với phụ huynh: Phần lớn phụ huynh chưa có nhận thức đắn tầm quan trọng mơn học; có tư tưởng xem nhẹ, khơng khuyến khích em có định hướng đắn phù hợp q trình học tập mơn SangKienKinhNghiem.net Một phận phụ huynh quan tâm đến việc học học sinh, làm cho em khơng có tập trung, thiếu định hướng từ phía gia đình dẫn đến em lơ việc học, kiến thức lỏng lẻo c Đối với môn, giáo viên nhà trường: Phương tiện dạy học thiếu thốn, việc dạy Tin học nhà trường coi trọng dạy kiến thức, mà chưa coi trọng dạy kỹ Tin học; chưa thực phát huy lực học sinh nên học xong em quên nhiều kiến thức Trong đó, kỹ đơn giản vận dụng kiến thức học để lý giải tốn khơng thực II Nội dung đề tài: Đầu tiên cần tìm hiểu vấn đề sau: - Ước chung lớn gì? Nếu số nguyên a chia hết cho số nguyên c gọi ước số nguyên a a gọi bội c Nếu số dương a b chia hết cho số nguyên c lớn c gọi ước chung lớn a b Nếu a b = chúng khơng có ước chung - Bội chung nhỏ gì? c gọi bội chung nhỏ a b c số nguyên nhỏ chia hết cho a b Công thức: UCLN(a,b) = (a*b)/BCNN(a,b) -Phân số tối giản gì? phân số mà có tử số mẫu số chia hết cho số ngoại trừ số (hoặc -1 lấy số âm) Nói cách khác phân số a/b tối giản a b nguyên tố nhau, nghĩa a b có ước số chung lớn Để giải toán điều cần giải tốn tìm UCLN hai số nguyên A B Chúng ta tìm hiểu thuật tốn tìm UCLN số nguyên Ưu điểm, nhược điểm cách khắc phục thuật tốn Cách 1: Dưới thuật tốn tìm UCLN cách trừ nhau, trình bày SGK tin học 10 Trước tiên học sinh nhắc lại thuật toán học lớp 10 B1 Nhập số nguyên A B B2 Nếu A=B UCLN=A dừng B3 Nếu A>B A A-B ngược lại BB-A B4 Quay lại B2 Thuật toán minh họa chương trình: SangKienKinhNghiem.net Function UCLN(a,b:Integer):Integer; Begin While a b If a>b then a:=a-b else b:=b-a; UCLN:=a; End; Với thuật tốn ta áp dụng tìm BCNN số nguyên var x,y,UCLN,BCNN:integer; begin readln(x,y); BCNN:=x*y; While xy If x>y then x:=x-y else y:=y-x; UCLN:=x; BCNN:=BCNN div UCLN; write(UCLN,' ',BCNN); end Chương trình chạy số ngun dương, ngồi chương trình gặp vịng lặp vô hạn Cụ thể, lệnh c:=UCLN(4,0) c=(4,-3); gặp vịng lặp vơ hạn Do ta cần cải tiến chương trình sau: Function UCLN(a,b:Integer):Integer; Begin While (a>0) And (b>0) If a>=b then a:=a-b else b:=b-a; UCLN:=a+b; End; SangKienKinhNghiem.net Với chương trình cải tiến trên, vịng lặp thực tham trị truyền vào lớn hai số 0, kết UCLN:=a+b(một số 0) Dễ thấy chương trình cịn sai số nhập vào có số âm Thật lệnh c:=UCLN(6,-2) cho kết UCLN=4 thực phải 6⋮2 𝑣à ‒ 2⋮2 Để khắc phục lỗi ta cần lấy trị tuyệt đối hai số nhập vào hàm ABS Chẳng hạn gán: a:=ABS(a); b:=ABS(b); chương trình chương trình tìm UCLN: Function UCLN(a,b:Integer):Integer; Begin A:=Abs(a); b:=Abs(b) While (a>0) And (b>0) If a>=b then a:=a-b else b:=b-a; UCLN:=a+b; End; Cách 2: Thuật tốn Euclide: Ngồi cách tìm UCLN Các bạn sử dụng cách chia lấy dư (mod), chương trình tối ưu phải thực phép tính Ý tưởng: UCLN số A, B UCLN số B A mod B, ta đổi A B, B A mod B B Khi UCLN A Hay nói cách khác UCLN(a,b)=UCLN(a mod b b); Ta nhận thấy 0≤ (a mod b) b then ucln:=ucln(a mod b,b) else ucln:=ucln(a, b mod a); end; var a,b:integer; begin readln(a,b); write('Ước chung lớn là: ', UCLN(a,b), ' Bội chung nhỏ là: ', (a*b) div UCLN(a,b)); end Ngoài học sinh tách theo trường hợp để làm sau: B1 Nhập số nguyên A B B2 Gán A = giá trị tuyệt đối A, B = giá trị tuyệt đối B B3 Nếu A =0 B=0 B9 B4 Nếu A=0 B 0 B10 B5 Nếu B=0 A 0 B11 B6 Gán dư phép chia A cho B vào biến D ( D = A mod B ) B7 Nếu D = chuyển sang B10 B8 Gán A = B ; B = D ; D = A mod B chuyển B7 B9 Thông báo UCLN không tồn , chuyển Bkt B10 Thông báo kết : Ước số chung lớn số B , chuyển Bkt SangKienKinhNghiem.net B11 Thông báo kết : Ước số chung lớn số A Bkt Kết thúc Chương trình cụ thể: Uses Crt; Var A,B,La,Lb : Integer; Procedure Nhap(i : Char;Var x : Integer); Var Ok : Boolean; Begin Write(‘Nhap so nguyen ‘,i,’ = ‘); Repeat {$I-} Readln(x); {$I+} Ok := (IoResult=0); Until Ok; End; Procedure Hien(x : Integer); Begin Write(‘UCLN(‘,LA:5,’,’,LB:5,’) = ‘,x); Readln; Halt; End; Procedure Hien2; SangKienKinhNghiem.net Begin Writeln(‘ Moi so nguyen deu = UCLN(0, 0) ‘); Readln; Halt; End; Procedure Tim; Var D : Integer; Begin A := Abs(A); B := Abs(B); If (A=0) and (B0) then Hien(B); If (B=0) and (A0) then Hien(A); If (A=0) and (B=0) then Hien2; D := A mod B; While D0 { Chu y neu dung Repeat can tranh chia cho } Begin A := B; B := D; D := A mod B; End; Hien(B); SangKienKinhNghiem.net End; BEGIN Clrscr; Nhap(‘A’,A); Nhap(‘B’,B); La := A; Lb := B; Tim; Readln; END Tuy nhiên làm theo cách dài dịng Khơng cần thiết nhiều thời gian cho việc viết chương trình Chúng ta tham khảo vài cách xử lí khác Cùng với ưu nhược điểm để so sánh: used crt; var m, n, u, i:longint; begin clrscr; write('nhap n,m:');read(n, m); for i:= m downto if(m mod i=0)and(n mod i=0) then begin u:=i;{u nhận giá trị ước chung lớn đó} i:=1;{để nhảy khỏi vịng lặp} end; write('UCLN(,'m',n,')',u); readln; end Thuật tóan đơn giản, hiệu khơng nhanh Thuật tóan khác với 10 SangKienKinhNghiem.net thuật tóan phổ thơng khác, dùng phương pháp thử để tìm Với số phạm vi (-1000,1000) chạy nhanh phổ thơng Cịn 1000 chạy châm hơn, lớn chạy châm Đề xuất thuật toán nhanh sau: Function UCLN(m,n:word):word begin while(m0 and n0) begin if(m>n) then m:=m mod n; else n:=n mod m; end; UCLN:=m+n; end; Cách giống cách tìm UCLN máy casio học sinh hay làm toán học để tìm nhanh máy tính cầm tay Cách có nhiều tài liệu tham khảo Khơng thể coi cách nói tốc độ thuật tốn chạy nhanh Nếu số q lớn sửa lại vịng lặp cho nhỏ lại Vd: thay n for i:= n downto n div v.v tốc độ theo tăng lên khó giới hạn vịng lặp cho nhỏ Từ việc có thuật tốn UCLN ta áp dụng cho số tốn thường gặp sau: Nhập số nguyên dương n >=2 , nhập n số nguyên dương , tìm ước chung lớn n số Ý tưởng: Tìm ước chung số lấy ước chung dùng làm tham số cho hàm UCLN tìm với số Đưa tất số nhập vào mảng, sau dùng giải thuật nhị phân chia cặp số tìm ƯCLN Các ƯCLN lại chặt tiếp cịn vịng lặp Hơi giống thuật tốn xếp nhị phân Gọi U UCLN dãy U:=a[1]; 11 SangKienKinhNghiem.net For i:=2 to n u:=UCLN(u,abs(a[i])); Tìm BCNN dãy số Ý tưởng: Gọi P BCNN dãy P:=a[1]; For i:=2 to n P:=p*a[i]; đưa BCNN p:=p div u; Phân số tối giản( rút gọn phân số): Ý tưởng: Sau có thuật tốn UCLN hai số ngun Chúng ta áp dụng với rút gọn phân số Một phân số chưa tối giản chuyển dạng tối giản cách chia tử số mẫu số phân số cho ước số chung lớn chúng Số nguyên tố nhau: Ý tưởng: Dựa thuật tốn tính UCLN ta kiểm tra số nguyên tố hai số có UCLN =1 Số Tam Tam: Tât số tự nhiên có chữ số cho đảo trật tự số ta thu số nguyên tố với số cho Ý tưởng: Với toán qui kiểm tra số có chữ số abc thỏa mãn UCLN(100*a+10*b+c,100*c+10*b+a)=1 III Thực trạng trước sau áp dụng sáng kiến kinh nghiệm Thường học sinh có thói quen áp dụng thuật tốn để viết chương trình khơng quan tâm thuật tốn đắn, xác hay chưa Sau áp dụng 12 SangKienKinhNghiem.net lớp dạy năm trước Và lớp đồng nghiệp tiến hành năm học Phần lớn học sinh hình thành thói quen, tư sáng tạo PHẦN III: KẾT LUẬN VÀ ĐỀ XUẤT Kết luận: Qua trao đổi với giáo viên, học sinh tham gia lớp dạy khuyến khích học sinh tích cực, chủ động tham gia học tập cách độc lập Vì mà kiến thức em thu lượm qua học em nhận thức cách đầy đủ hơn, sâu sắc toàn diện Ở lớp đối chứng, giảng dạy theo phương pháp truyền thống, việc tổ chức hoạt động cho học sinh thường không linh hoạt làm hạn chế tích cực, khả sáng tạo em việc phát hiện, lĩnh hội chủ kiến thức Tuy nhiên cần phải nói rằng, dạy học q trình lao động sáng tạo mà giáo viên ln tự đổi để làm trình lao động Để dạy đạt hiệu cao địi hỏi người giáo viên phải tâm huyết với nghề, ln đề cao q trình tự học, tự bồi dưỡng để nâng cao trình độ chun mơn nghiệp vụ Một số đề xuất, kiến nghị: - Trước hết, nhà trường đầu tư phòng máy đầy đủ để đảm bảo học sinh thực hành tiết học môn Tin học Để tổ chức cho học sinh hoạt động nhận thức phù hợp với trình độ học tập em - Thứ hai là, cấp đầu tư máy tính định kỳ năm lần tránh trường hợp máy tính dùng lâu Thiết bị thay khan Không đảm bảo việc thực hành cho học sinh - Thứ ba là, việc sử dụng vận dụng kỹ thuật dạy học tích cực giảng dạy thiết cần có hỗ trợ thiếu phương tiện dạy học đại (máy chiếu đa năng, máy chiếu projector …) Vì vậy, nhà trường cần trang bị đầy đủ phương tiện, thiết bị, đồ dùng… để tạo điều kiện tốt cho giáo viên việc nghiên cứu xây dựng sử dụng phương pháp sơ đồ giảng dạy môn Tin học 13 SangKienKinhNghiem.net Trên kinh nghiệm nhỏ áp dụng q trình dạy học với đặc thù mơn Tin học chương trình lớp 11 Mong ngày phát triển hồn thiện Tơi xin chân thành cảm ơn XÁC NHẬN CỦA THỦ TRƯỞNG ĐƠN VỊ Thanh Hóa, ngày 19 tháng năm 2016 CAM KẾT KHÔNG SAO CHÉP Người viết sáng kiến Lê Thị Hạnh 14 SangKienKinhNghiem.net ... có thuật tốn UCLN ta áp dụng cho số toán thường gặp sau: Nhập số nguyên dương n >=2 , nhập n số nguyên dương , tìm ước chung lớn n số Ý tưởng: Tìm ước chung số lấy ước chung dùng làm tham số. .. tiên cần tìm hiểu vấn đề sau: - Ước chung lớn gì? Nếu số nguyên a chia hết cho số nguyên c gọi ước số nguyên a a gọi bội c Nếu số dương a b chia hết cho số nguyên c lớn c gọi ước chung lớn a b... tưởng: Sau có thuật tốn UCLN hai số nguyên Chúng ta áp dụng với rút gọn phân số Một phân số chưa tối giản chuyển dạng tối giản cách chia tử số mẫu số phân số cho ước số chung lớn chúng Số nguyên tố

Ngày đăng: 01/11/2022, 22:19

w