Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 23 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
23
Dung lượng
206 KB
Nội dung
SỞ GIÁO DỤC & ĐÀO TẠO THANH HÓA TRƯỜNG THPT THƯỜNG XUÂN SÁNG KIẾN KINH NGHIỆM XÂY DỰNG CHUYÊN ĐỀ HỆ ĐẾM VÀ CHUYỂN ĐỔI GIỮA CÁC HỆ ĐẾM ĐỂ NÂNG CAO CHẤT LƯỢNG BỒI DƯỠNG HỌC SINH GIỎI TIN HỌC Ở TRƯỜNG THPT THƯỜNG XUÂN Người thực hiện: Lê Thị Hoa Chức vụ: Giáo viên SKKN thuộc mơn: Tin học THANH HĨA NĂM 2019 MỤC LỤC Mở đầu 1.1 Lí chọn đề tài .1 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 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 Các giải pháp sử dụng để giải vấn đề 2.4 Hiệu sáng kiến 19 Kết luận, kiến nghị 20 Mở đầu 1.1 Lí chọn đề tài Trong thời điểm nay, toàn ngành trọng phát triển quy mô, nâng cao chất lượng giáo dục, phát triển nguồn nhân lực, đẩy mạnh phong trào thi đua “dạy học, học tốt” Thực nhiệm vụ giải pháp nhằm đổi phát triển nghiệp giáo dục đào tạo Tuyển chọn bồi dưỡng học sinh giỏi nhiệm vụ quan tâm hàng đầu Hệ đếm chuyển đổi hệ đếm nội dung ln có kỳ thi chọn học sinh giỏi cấp tỉnh, cấp quốc gia.Tuy nhiên hệ đếm chuyển đổi hệ đếm chuyên đề hay tương đối khó cơng tác bồi dưỡng học sinh giỏi trường trung học phổ thông học sinh giáo viên Trong nguồn tài liệu tham khảo lại không nhiều đa dạng chuyên đề khác Lý thuyết hệ đếm đưa vào sách giáo khoa phổ thông chương I lớp 10 với nội dung đơn giản không đủ để áp dụng làm tập Nhưng dạng tập chuyển đổi hệ đếm lại đa dạng, đòi hỏi học sinh phải hiểu rõ lý thuyết chuyển đổi hệ đếm, ý tưởng xây dựng giải thuật viết chương trình hồn chỉnh Trong q trình làm cơng tác bồi dưỡng học sinh giỏi, tham khảo nhiều tài liệu Internet dạng tập chuyển đổi hệ đếm đề thi học sinh giỏi để làm nguồn tài liệu bồi dưỡng cho học sinh đội tuyển thấy có hiệu Với lí tơi chọn đề tài: “Xây dựng chuyên đề hệ đếm chuyển đổi hệ đếm để nâng cao chất lượng bồi dưỡng học sinh giỏi tin học trường THPT Thường Xuân 2” để giúp em học sinh có nguồn tài liệu tham khảo giáo viên bồi dưỡng học sinh giỏi trường THPT Thường xuân có tài liệu rèn luyện cho học sinh 1.2 Mục đích nghiên cứu Nâng cao chất lượng ôn thi học sinh giỏi, từ góp phần nâng cao hiệu dạy học Tin học 11 Trường THPT Thường Xuân nói riêng mơn tin học nói chung 1.3 Đối tượng nghiên - Các hệ đếm cách chuyển đổi hệ đếm - Ngơn ngữ lập trình Turo Pascal Free Pascal - Học sinh đội tuyển học sinh giỏi mônTin học trường THPT Thường Xuân năm học 2018 -2019 1.4 Phương pháp nghiên cứu - Phương pháp phân tích, xây dựng sở lý thuyết - Thu thập thông tin Internet, kinh nghiệm thực tế giảng dạy - Sử dụng phần mềm FreePascal/Turbo Pascal để viết chương trình Nội dung sáng kiến kinh nghiệm 2.1 Cơ sở lí luận sáng kiến Hệ đếm số nội dung học sinh giới thiệu bắt đầu học môn tin học trường THPT, cụ thể lớp 10 – “bài Thông tin liệu” em nắm bắt thơng tin gì? Đơn vị để đo lường thơng tin gì? Muốn máy tính xử lý thơng tin thơng tin phải mã hóa nào? byte = bit? 1Kb = byte? Các hệ đếm thường dùng tin học hệ đếm nào? Thông tin dạng số phi số biểu diễn máy tính nào? Khi giáo viên giới thiệu cho em cách chuyển đổi số số sang số khác học sinh cảm thấy lúng túng rối tinh với số 0,1,0,1, … dày đặc có học sinh đặt câu hỏi 12 hệ thập phân lại dãy bit 1100 hệ nhị phân C hệ thập lục phân? Và nhiều câu hỏi tương tự khác Vậy làm để học sinh tự chuyển đổi số số sang số khác cách thành thạo? Để học sinh tự học, tự nghiên cứu biết áp dụng để giải toán nhiều dạng khác thực tế? Bản thân tơi tín nhiệm, tin tưởng nhà trường phân công bồi dưỡng học sinh giỏi, nên tơi trăn trở, tìm tòi nhiều nguồn tài liệu, dành nhiều tâm huyết, thời gian nghiên cứu, tìm tòi để công việc bồi dưỡng học sinh giỏi đạt kết tốt 2.2 Thực trạng vấn đề - Lý thuyết hệ đếm chuyển đổi hệ đếm mang tính chất giới thiệu sơ qua lớp 10 – “Thông tin liệu” tập chuyển đổi hệ đếm số lại thường xuyên có đề thi cấp tỉnh, cấp quốc gia đa dạng Với lý thuyết mang tính chất giới thiệu sơ lược chủ yếu nằm phần đọc thêm hệ đếm cung cấp sách giáo khoa tin học 10 khơng đủ để vận dụng giải tập thực tế - Đa số học sinh trường THPT Thường Xuân người dân tộc Mường dân tộc Thái với xuất phát điểm đầu vào thấp Đặc biệt với chương trình tin học lớp 11 yêu cầu học sinh phải có tư tốn học tốt, hiểu rõ chất ngơn ngữ lập trình đại đa số học sinh khả tư chưa cao, đa số em học máy móc, học vẹt nên việc tự lập trình giải tốn học sinh khó khăn Mặt khác kiến thức lập trình mẻ với học sinh, môn Tin học môn học em làm quen bắt đầu vào THPT, môn tin học chương trình thi THPT quốc gia nên học sinh phụ huynh xem tin học môn học phụ nên chưa có ý thức đầu tư thời gian cho môn này, nên việc chọn tuyển học sinh vào đội tuyển học sinh giỏi môn tin học bồi dưỡng học sinh giỏi tin học lại khó khăn Đặc biệt giảng dạy cho học sinh nội dung chuyển đổi hệ đếm học sinh lúng túng, hay bị nhầm lẫn cách chuyển đổi hệ đếm, dẫn đến viết chương trình cho tốn cụ thể hay bị sai - Tài liệu hệ đếm cách chuyển đổi hệ đếm số nguồn Internet chủ yếu mang tính chất giới thiệu sơ lược lý thuyết chưa có cài đặt chương trình minh họa cụ thể, nên nguồn tài liệu tham khảo hệ đếm chuyển đổi hệ đếm giúp học sinh tự học, tự nghiên cứu hạn chế 2.3 Các giải pháp sử dụng để giải vấn đề Với lí nên để giải vấn đề đặt ra, thực giải pháp sau: - Tìm hiểu lý thuyết hệ đếm, hệ đếm tin học cách biểu diễn hệ đếm tin học - Tìm hiểu cách chuyển đổi qua lại hệ đếm thông dụng, cụ thể: Chuyển đổi từ hệ đếm số 10 sang hệ đếm số ngược lại; chuyển từ hệ đếm số 10 sang số 16 ngược lại; chuyển đổi từ hệ số sang số 16 ngược lại; chuyển đổi từ số 10 sang số ngược lại - Sử dụng ngôn ngữ lập trình FreePascal Turbo Pascal viết chương trình chuyển đổi hệ đếm Để làm điều này, hướng em phải bắt nguồn từ cách chuyển đổi qua lại hệ đếm tìm hiểu phần trước Định hướng ôn tập cho học sinh cách cung cấp cho học sinh hệ thống tập theo thứ tự từ dễ đến khó - Vận dụng giải tập đề thi học sinh giỏi cấp tỉnh để học sinh tự phân tích, định dạng tập, tự tìm lời giải thích hợp, kích thích tư phân tích, tổng hợp tư linh hoạt sáng tạo học sinh lập trình Hình thành dạng tập từ đến nâng cao, từ riêng lẻ dạng đến tập tổng hợp Nội dung giải pháp: 2.3.1 Tìm hiểu lý thuyết hệ đếm [1] Hệ đếm tập hợp kí hiệu (bảng chữ số) để biểu diễn số xác định Hệ thập phân (Decimal) Hệ thập phân sử dụng 10 kí hiệu (0, 1, 2, 3, …, 9) để biểu diễn thông tin Các số hệ thập phân biểu diễn dạng tổng lũy thừa số 10 Ví dụ số 1998 hệ thập phân có biểu diễn sau: (1998)10 = 1x103 + 9x102 +9x101+8x100 Hệ nhị phân (Binary) Hệ nhị phân dùng kí hiệu để biểu diễn thơng tin (0,1) Các số hệ nhị phân biểu diễn dạng tổng lũy thừa số Ví dụ: Số 1101 hệ nhị phân biểu diễn sau: (1101)2 = 1x23 + 1x22 + 0x21 + 1x20 =(13)10 Hệ bát phân (Octal) Hệ bát phân (hay gọi hệ đếm số 8) dùng kí tự (0, 1, 2, 3, 4, 5, 6, 7) để biểu diễn thông tin Các số hệ bát phân biểu diễn dạng tổng lũy thừa số Ví dụ: (165)8 = 1x82 + 6x81 +5x80 =(117)10 Hệ thập lục phân (Hexa Decimal) Hệ thập lục phân sử dụng 16 kí hiệu (0, 1, 2, …, 9, A, B, C, D, E, F) để biểu diễn thơng tin Các kí hiệu A, B, C, D, E, F tương ứng với giá trị 10, 11, 12, 13, 14, 15 hệ thập phân Các số hệ thập lục biểu diễn dạng tổng lũy thừa số 16 Ví dụ: Số 2B hệ thập lục có biểu diễn sau: (2B)16 = 2x161 + Bx160 = (43)10 2.3.2 Chuyển đổi hệ đếm [4] - Chuyển đổi từ hệ phận phân sang hệ nhị phân: Đem số thập phân chia liên tiếp cho 2, thương dừng lại Viết số dư ngược từ lên ta thu số nhị phân tương ứng Ví dụ: Chuyển số thập phân 13 sạng hệ nhị phân - 13 Dư Dư Dư Dư (13)10 = (1101)2 - Chuyển đổi từ nhị phân sang thập lục phân: Áp dụng theo quy tắc: hệ đếm số b, giả sử N có biểu diễn: dndn-1dn-2…d1d0,d-1d-2…d-m n+1 số chữ số bên trái, m số chữ số bên phải dấu phân chia phần nguyên phần thập phân số N d i thỏa mãn điều kiện ≤ di ≤ b giá trị N tính theo cơng thức: N = dnbn + dn-1bn-1 + ….+ d0b0 + d-1b-1 + … + d-mb-m Các số hệ nhị phân biểu diễn dạng tổng lũy thừa số Ví dụ: (1101)2 = 1x23 + 1x22 + 0x21 + 1x20 =(13)10 - Chuyển đổi hệ thập phân sang hệ thập lục phân Đem số thập phân chia liên tiếp cho 16 thương số khơng dừng lại Viết số dư ngược từ lên ta thu số thập lục phân tương ứng Ví 43 dụ: 16 Dư 11 Dư (43.10 16 = (2B)16 - Chuyển đổi từ hệ thập lục phân sang hệ thập phân Áp dụng theo quy tắc: hệ đếm số b, giả sử N có biểu diễn: dndn-1dn-2…d1d0,d-1d-2…d-m n+1 số chữ số bên trái, m số chữ số bên phải dấu phân chia phần nguyên phần thập phân số N d i thỏa mãn điều kiện ≤ di ≤ b giá trị N tính theo cơng thức: N = dnbn + dn-1bn-1 + ….+ d0b0 + d-1b-1 + … + d-mb-m Các số hệ thập lục phân biểu diễn dạng tổng lũy thừa số 16 Ví dụ: (2B)16 = 2x161 + Bx160 = (43)10 - Chuyển đổi từ hệ thập lục phân sang hệ nhị phân Việc chuyển đổi hệ đếm dễ dàng kí hiệu hệ Hex lại tương ứng với kí hiệu nhị phân Xem bảng chuyển đổi sau: Ví dụ: Chuyển đổi (2A)16 (?)2 Giải: Tra bảng ta thấy: (2)16 = (0010)2; (A)16 = (1010)2 Vậy (2A)16 = (0010 1010)2 - Chuyển từ hệ số nhị phân sang hệ thập lục phân: Đầu tiên ta đem chia dãy số nhị phân thành dãy bit theo thứ tự từ phải sang trái, dãy cuối chưa đủ bit ta thêm số vào dãy đủ bit Sau tra bảng tương ứng Ví dụ: Chuyển đổi (10110110)2 sang hệ Hex? Đầu tiên ta chia dãy bit nhị phân thành nhóm bit, thu nhóm sau: 0110 1011 Tra bảng ta thấy: (0110)2 = (6)16; (1011)2 =(B)16 Vậy (10110110)2 = (B6)16 - Chuyển từ hệ thập phân sang hệ bát phân Cũng giống cách chuyển đổi số từ thập phân sang nhị phân, để chuyển từ thập phân sang bát phân ta đem số thập phân chia liên tiếp cho 8, thương dừng lại Viết số dư ngược từ lên ta thu số bát phân tương ứng Ví dụ: Chuyển số (2764)10 (?)8 2764 Dư 345 Dư 43 Dư Dư Sắp xếp thứ tự từ lên trên: (2764)10 = 5314OCT Chuyển từ hệ bát phân sang hệ thập phân Tương tự hệ nhị phân, để chuyển đổi số từ hệ bát phân sang thập phân, ta lấy chữ số phần nguyên số cần chuyển nhân với mũ 0,1,2,3,…tăng dần từ phải qua trái Còn phần nguyên số cần chuyển ta nhân với mũ -1, -2, -3, … giảm dần từ phải qua trái VD: Chuyển 5314.17OCT (?)10 -1 -2 5314.17OCT = 5x83 + 3x 82 + 1x81 +4x 80 + 1x 8-1 +7x 8-2 = 2560 + 192 + + + 0.125 + 0.109375 = 2764.23437510 2.3.3 Sử dụng ngôn ngữ lập trình Free pascal để viết chương trình chuyển đổi hệ đếm program chuyen_10_sang_2; var n,du:integer; s,xau:ansistring; begin write('nhap n');read(n); s:=''; while n0 begin du:=n mod 2; n:=n div 2; str(du,xau); s:=xau+s; end; write(s); readln; end ******************************************************* program chuyen_2_sang_10; var n,so,code,i,j:integer; tich,soh10:real; s,xau:ansistring; begin write('nhap s');read(s); n:=length(s)-1; soh10:=0; for i:=1 to length(s) begin begin val(s[i],so,code); begin tich:=1; for j:=1 to n tich:=tich*2; end; soh10:=soh10+so*tich; end; n:=n-1; end; write(soh10:6:0); readln; end ******************************************************* program chuyen_10_sang_16; {Cách 1} var n,du:integer; s,xau:ansistring; t:char; begin write('nhap n'); read(n); s:=''; while n0 begin du:=n mod 16; n:=n div 16; if du>10 then begin t:=chr(du+55); s:=t+s; end else begin str(du,xau); s:=xau+s; end; end; write(s); readln; end ******************************************************* {Cách 2:} var n:longint; S:string; function chcs16(M:longint):string; Var du:longint; He16,T:String; Begin He16:=' '; Repeat du:=M Mod 16; If du < 10 Then Str(du, T) Else T:=Chr(du+55); He16:=T + He16; M:= M Div 16; Until M = 0; chcs16:=he16; End; { } BEGIN Writeln(‘Nhap n:’); Readln(N); writeln(chcs16(n)); END ******************************************************* {Cách 1:} program chuyen_16_sang_10; var tich,soh10:real; n,i,j,so,code:integer; s:ansistring; begin write('nhap s'); read(s); soh10:=0; n:=length(s)-1; for i:=1 to length(s) begin begin if s[i]='A' then so:=10 else if s[i]='B' then so:=11 else if s[i]='C' then so:=12 else if s[i]='D' then so:=13 else if s[i]='E' then so:=14 else if s[i]='F' then so:=15 else val(s[i],so,code); begin tich:=1.0; for j:=1 to n tich:=tich*16; end; soh10:=soh10+so*tich; end; n:=n-1; end; write(soh10:6:0); readln; end ******************************************************* {Cách 2} program chuyen_16_sang_10; var x,i,a,n:longint; S:string; FUNCTION luythua(n,x:longint):longint; var m,i:longint; begin m:=1; for i:=1 to n m:=m*x; luythua:=m; end; { -} FUNCTION he10(S:string):longint; var n,i,m,a:longint; k:array[1 1000] of longint; begin n:=0;a:=length(S); i:=1; for i:=1 to length(S) begin if S[i] in ['0' '9'] then val(S[i],k[i]) else begin if S[i]= 'A' then k[i]:=10; if S[i]= 'B' then k[i]:=11; if S[i]= 'C' then k[i]:=12; if S[i]= 'D' then k[i]:=13; if S[i]= 'E' then k[i]:=14; if S[i]= 'F' then k[i]:=15; end; n:=n+luythua(a-1,16)*k[i]; dec(a); end; 10 he10:=n; end; { -} BEGIN Writeln(‘nhap S’); Readln(S) writeln(he10(S)); readln; END ******************************************************* program chuyen_16_sang_2; var i:integer; s,s1,s2:ansistring; begin read(s); for i:=1 to length(s) begin if s[i]='0' then s1:='0000' else if s[i]='1' then s1:='0001' else if s[i]='2' then s1:='0010' else if s[i]='3' then s1:='0011' else if s[i]='4' then s1:='0100' else if s[i]='5' then s1:='0101' else if s[i]='6' then s1:='0110' else if s[i]='7' then s1:='0111' else if s[i]='8' then s1:='1000' else if s[i]='9' then s1:='1001' else if s[i]='A' then s1:='1010' else if s[i]='B' then s1:='1011' else if s[i]='C' then s1:='1100' else if s[i]='D' then s1:='1101' else if s[i]='E' then s1:='1110' else if s[i]='F' then s1:='1111'; s2:=s2+s1; end; write(s2); end ******************************************************* program chuyen_2_sang_16; Var i:integer; s,x,he16:string; 11 function so(nhi:string):string; begin case nhi of '0000': so:='0'; '0001': so:='1'; '0010': so:='2'; '0011': so:='3'; '0100': so:='4'; '0101': so:='5'; '0110': so:='6'; '0111': so:='7'; '1000': so:='8'; '1001': so:='9'; '1010': so:='A'; '1011': so:='B'; '1100': so:='C'; '1101': so:='D'; '1110': so:='E'; '1111': so:='F'; end; end; begin Write(‘nhap xau nhi phan’); readln(s); while length(s) mod 0 s:='0'+s; i:=1; he16:=''; while i10 then begin t:=chr(du+55); s:=t+s; end else begin str(du,xau); 13 s:=xau+s; end; end; writeln(f2,S); end; Close(f1); Close(f2); end Cách 2: var n,i,k:longint; S:string; f2,f1:text; function chcs16(M:longint):string; Var du:longint; He16,T:String; Begin He16:=' '; Repeat du:=M Mod 16; If du < 10 Then Str(du, T) Else T:=Chr(du+55); He16:=T + He16; M:= M Div 16; Until M = 0; chcs16:=he16; End; { -} BEGIN assign(f1,'bai1.inp');reset(f1); readln(f1,n); assign(f2,'bai1.out');rewrite(f2); for i:=1 to n begin readln(f1,k); writeln(f2,chcs16(k)); end; close(f2); close(f1); END Bài Quan hệ huyết thống (Đề HSG tỉnh Hải Dương năm 2013-2014)[3] 14 Trung tâm nghiêm cứu gen thu thập N mẫu gen N cá thể lồi N gen mã hố thành dãy N số nguyên dương a1, a2, …, aN Bộ phận phân tích sau xem xét đưa kết luận sau: Hai cá thể có quan hệ huyết thống gần mã gen chúng biểu diễn số giống khác bit Ví dụ: Hai cá thể có mã gen (biểu diễn số 111) (biểu diễn số 101) có quan hệ huyết thống gần Hãy đếm xem số mẫu gen N cá thể thu thập có cặp cá thể có quan hệ huyết thống gần Dữ liệu: Vào từ file văn GEN.INP • Dòng ghi số ngun dương N (N≤105) • N dòng tiếp theo, dòng thứ i ghi mã gen cá thể thứ i số nguyên dương phạm vi từ đến 1000) Kết quả: Ghi file văn GEN.OUT số nguyên số cặp có quan hệ huyết thống gần tìm Ví dụ: GEN.INP GEN.OUT 4 3 10 10 10 Giải thích ví dụ thứ nhất: Các số 1, 2, 3, 4, biểu diễn số 001, 010, 011, 100, 101 Có cặp có quan hệ huyết thống gần là: 3, 5, 3, Đáp án: program bai2; var d: array[1 1000] of longint; n: longint; kq,i,j,u: longint; f,g:text; function anhem(x,y: longint): boolean; var a, b: array[1 12] of longint; na, nb, nn: longint; 15 i,dem: longint; begin na:=0; While x0 Do Begin inc(na); a[na]:=x mod 2; x:=x div 2; end; nb:=0; While y0 Do Begin inc(nb); b[nb]:=y mod 2; y:=y div 2; end; if na