SỞ GIÁO DỤC & ĐÀO TẠO THANH HÓATRƯỜNG THPT THƯỜNG XUÂN 2 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
Trang 1SỞ GIÁO DỤC & ĐÀO TẠO THANH HÓA
TRƯỜNG THPT THƯỜNG XUÂN 2
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 2
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
Trang 2MỤC LỤC
1 Mở đầu 1
1.1 Lí do chọn đề tài 1
1.2 Mục đích nghiên cứu 1
1.3 Đối tượng nghiên cứu 1
1.4 Phương pháp nghiên cứu 1
2 Nội dung sáng kiến kinh nghiệm 2
2.1 Cơ sở lí luận của sáng kiến kinh nghiệm 2
2.2 Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm 2
2.3 Các giải pháp đã sử dụng để giải quyết vấn đề 3
2.4 Hiệu quả của sáng kiến 19
3 Kết luận, kiến nghị 20
Trang 31 Mở đầu
1.1 Lí do chọn đề tài
Trong thời điểm hiện nay, toàn ngành chú 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 hiện những nhiệm vụ và giải pháp nhằm đổi mới và phát triển
sự nghiệp giáo dục và đào tạo Tuyển chọn và bồi dưỡng học sinh giỏi luôn là mộtnhiệm vụ đang được quan tâm hàng đầu
Hệ đếm và chuyển đổi giữa các hệ đếm là một nội dung luôn có trong các kỳthi chọn học sinh giỏi cấp tỉnh, cấp quốc gia.Tuy nhiên hệ đếm và chuyển đổi giữacác hệ đếm là một trong những chuyên đề hay và tương đối khó trong công tác bồidưỡng học sinh giỏi ở trường trung học phổ thông đối với học sinh và cả giáo viên.Trong khi nguồn tài liệu tham khảo lại không nhiều và đa dạng như các chuyên đềkhác Lý thuyết về các hệ đếm chỉ được đưa vào sách giáo khoa phổ thông ởchương I lớp 10 với các nội dung đơn giản không đủ để áp dụng làm bài tập.Nhưng các dạng bài tập về chuyển đổi giữa các hệ đếm lại rất đa dạng, đòi hỏi họcsinh phải hiểu rõ lý thuyết chuyển đổi giữa các hệ đếm, ý tưởng xây dựng giải thuậtrồi mới có thể viết được chương trình hoàn chỉnh
Trong quá trình làm công tác bồi dưỡng học sinh giỏi, tôi đã tham khảonhiều tài liệu trên Internet cũng như các dạng bài tập về chuyển đổi giữa các hệđếm trong các đề thi học sinh giỏi để làm nguồn tài liệu bồi dưỡng cho học sinh
trong đội tuyển và thấy có hiệu quả Với những lí do trên tôi chọn đề tài: “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 2” để giúp các em
học sinh có nguồn tài liệu tham khảo cũng như các giáo viên bồi dưỡng học sinhgiỏi ở trường THPT Thường xuân 2 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 quảdạy học Tin học 11 tại Trường THPT Thường Xuân 2 nói riêng và bộ môn tin họcnói chung
1.3 Đối tượng nghiên
- Các hệ đếm và cách chuyển đổi giữa các hệ đếm
- Ngôn ngữ lập trình Turo Pascal hoặc Free Pascal
- Học sinh trong đội tuyển học sinh giỏi mônTin học trường THPT ThườngXuân 2 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 cơ sở lý thuyết
- Thu thập thông tin trên Internet, kinh nghiệm và thực tế giảng dạy
- Sử dụng phần mềm FreePascal/Turbo Pascal để viết chương trình
Trang 42 Nội dung sáng kiến kinh nghiệm
2.1 Cơ sở lí luận của sáng kiến
Hệ đếm các cơ số là nội dung học sinh được giới thiệu khi bắt đầu học môntin học ở trường THPT, cụ thể ở lớp 10 – “bài 2 Thông tin và dữ liệu” các em nắmbắt được thông tin là gì? Đơn vị cơ bản nhất để đo lường thông tin là gì? Muốnmáy tính xử lý được thông tin thì thông tin phải được mã hóa như thế nào? 1 byte =bao nhiêu bit? 1Kb = bao nhiêu byte? Các hệ đếm thường dùng trong tin học lànhững hệ đếm nào? Thông tin dạng số và phi số được biểu diễn trong máy tính nhưthế nào? Khi giáo viên giới thiệu cho các em cách chuyển đổi một số ở cơ số nào
đó sang cơ số khác học sinh cũng cảm thấy lúng túng và rối tinh với những con số0,1,0,1, … dày đặc và có học sinh đặt câu hỏi vì sao 12 ở hệ thập phân lại là dãy bit
1100 ở hệ nhị phân và là C ở hệ thập lục phân? Và nhiều câu hỏi tương tự khác.Vậy làm thế nào để học sinh có thể tự chuyển đổi một số ở cơ số này sang cơ sốkhác một cách thành thạo? Để học sinh có thể tự học, tự nghiên cứu và biết áp dụng
để giải quyết các bài toán ở nhiều dạng khác nhau trong thực tế?
Bản thân tôi được sự tín nhiệm, tin tưởng của nhà trường đã phân công bồidưỡ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ềutâ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 đạtkết quả tốt nhất
2.2 Thực trạng của vấn đề
- Lý thuyết về hệ đếm và chuyển đổi giữa các hệ đếm chỉ mới mang tính chất
giới thiệu sơ qua ở lớp 10 – bài 2 “Thông tin và dữ liệu” nhưng các bài tập vềchuyển đổi hệ đếm giữa các cơ số lại thường xuyên có trong các đề thi cấp tỉnh, cấpquốc gia và rất đa dạng Với các lý thuyết chỉ mang tính chất giới thiệu sơ lược vàchủ yếu nằm trong phần bài đọc thêm về hệ đếm như đã cung cấp trong sách giáokhoa tin học 10 thì không đủ để vận dụng giải quyết các bài tập trong thực tế
- Đa số học sinh trường THPT Thường Xuân 2 là người dân tộc Mường hoặc
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ư duy về toán học tốt, hiểu rõ bản chất của ngôn ngữlập trình nhưng đại đa số học sinh khả năng tư duy chưa cao, đa số các em chỉ họcmáy móc, học vẹt nên việc tự lập trình giải một bài toán đối với học sinh là rất khókhăn Mặt khác kiến thức về lập trình cũng khá mới mẻ với học sinh, môn Tin học
là môn học các em mới được làm quen bắt đầu vào THPT, môn tin học không cótrong chương trình thi THPT quốc gia nên học sinh và phụ huynh chỉ xem tin học
là môn học phụ nên chưa có ý thức đầu tư thời gian cho bộ môn này, nên việc chọntuyển học sinh vào đội tuyển học sinh giỏi môn tin học và bồi dưỡng học sinh giỏitin học lại càng khó khăn Đặc biệt khi giảng dạy cho học sinh về nội dung chuyểnđổi giữa các hệ đếm học sinh còn lúng túng, hay bị nhầm lẫn về cách chuyển đổigiữa các hệ đếm, dẫn đến viết chương trình cho một bài toán cụ thể còn hay bị sai
Trang 5- Tài liệu về hệ đếm và cách chuyển đổi giữa các hệ đếm ở một số nguồn trên
Internet chủ yếu chỉ mang tính chất giới thiệu sơ lược về lý thuyết chưa có cài đặtcác chương trình minh họa cụ thể, nên nguồn tài liệu tham khảo về hệ đếm vàchuyển đổi giữa các hệ đếm giúp học sinh tự học, tự nghiên cứu còn hạn chế
2.3 Các giải pháp sử dụng để giải quyết vấn đề
Với những lí do nên trên để giải quyết vấn đề đặt ra, tôi đã thực hiện các giảipháp sau:
- Tìm hiểu lý thuyết về hệ đếm, các hệ đếm trong tin học và cách biểu diễn của
từng hệ đếm trong tin học
- Tìm hiểu cách chuyển đổi qua lại giữa các hệ đếm thông dụng, cụ thể:
Chuyển đổi từ hệ đếm cơ số 10 sang hệ đếm cơ số 2 và ngược lại; chuyển từ hệđếm cơ số 10 sang cơ số 16 và ngược lại; chuyển đổi từ hệ cơ số 2 sang cơ số 16 vàngược lại; chuyển đổi từ cơ số 10 sang cơ số 8 và ngược lại
- Sử dụng ngôn ngữ lập trình FreePascal hoặc Turbo Pascal viết các chương
trình chuyển đổi giữa các hệ đếm cơ bản Để làm được điều này, tôi luôn hướng các
em phải bắt nguồn từ cách chuyển đổi qua lại giữa các hệ đếm như đã tìm hiểu ởphần trước đó Định hướng ôn tập cho học sinh bằng cách cung cấp cho học sinhmột hệ thống các bài tập theo thứ tự từ dễ đến khó
- Vận dụng giải bài tập trong các đề thi học sinh giỏi cấp tỉnh để học sinh tự
phân tích, định dạng bài tập, tự mình tìm ra lời giải thích hợp, kích thích tư duyphân tích, tổng hợp cũng như tư duy linh hoạt sáng tạo của học sinh trong lập trình.Hình thành dạng bài tập từ cơ bản đến nâng cao, từ riêng lẻ từng dạng đến bài tậptổng hợp
Nội dung các giải pháp:
2.3.1 Tìm hiểu lý thuyết của các hệ đếm [1]
Hệ đếm là tập hợp các kí hiệu (bảng chữ số) để biểu diễn các 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ố trong hệ thập phân được biểu diễn dưới dạng tổng các lũy thừa cơ số 10
- Ví dụ số 1998 trong hệ thập phân có biểu diễn như sau:
(1998)10 = 1x103 + 9x102 +9x101+8x100
Hệ nhị phân (Binary)
- Hệ nhị phân chỉ dùng 2 kí hiệu để biểu diễn thông tin là (0,1) Các số trong
hệ nhị phân được biểu diễn dưới dạng tổng các lũy thừa cơ số 2
- Ví dụ: Số 1101 trong hệ nhị phân có thể biểu diễn như sau:
(1101)2 = 1x23 + 1x22 + 0x21 + 1x20 =(13)10
Hệ bát phân (Octal)
- Hệ bát phân (hay còn gọi là hệ đếm cơ số 8) dùng 8 kí tự (0, 1, 2, 3, 4, 5, 6,7) để biểu diễn thông tin Các số trong hệ bát phân được biểu diễn dưới dạngtổng các lũy thừa cơ số 8
Trang 6- 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ểudiễn thông tin
- Các kí hiệu A, B, C, D, E, F lần lượt tương ứng với các giá trị 10, 11, 12, 13,
14, 15 trong hệ thập phân
- Các số trong hệ thập lục được biểu diễn dưới dạng tổng lũy thừa cơ số 16
- Ví dụ: Số 2B trong hệ thập lục có biểu diễn như sau:
(2B)16 = 2x161 + Bx160 = (43)10
2.3.2 Chuyển đổi giữa các hệ đếm cơ bản [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, cho tới khi thương bằng 0 thì dừng lại.Viết các số dư ngược từ dưới lên ta thu được số nhị phân tương ứng
Ví dụ: Chuyển số thập phân 13 sạng hệ nhị phân
(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: trong hệ đếm cơ số b, giả sử N có biểu diễn:
dndn-1dn-2…d1d0,d-1d-2…d-m trong đó n+1 là số các chữ số bên trái, m là số các chữ sốbên phải dấu phân chia phần nguyên và phần thập phân của số N và các di thỏamãn điều kiện 0 ≤ ≤d i bkhi đó giá trị của N được tính theo công thức:
Trang 7- 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 cho đến khi thương số bằng không thìdừng lại Viết các số dư ngược từ dưới lên ta thu được số thập lục phân tương ứng
Ví dụ:
(43.10 = (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: trong hệ đếm cơ số b, giả sử N có biểu diễn:
dndn-1dn-2…d1d0,d-1d-2…d-m trong đó n+1 là số các chữ số bên trái, m là số các chữ sốbên phải dấu phân chia phần nguyên và phần thập phân của số N và các di thỏamãn điều kiện 0 ≤ ≤d i bkhi đó giá trị của N được tính theo công thức:
N = dnbn + dn-1bn-1 + ….+ d0b0 + d-1b-1 + … + d-mb-m
Các số trong hệ thập lục phân được biểu diễn dưới dạng tổng các lũy thừa cơ
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 giữa 2 hệ đếm này khá dễ dàng do mỗi kí hiệu trong hệ Hexlại tương ứng với 4 kí hiệu nhị phân Xem bảng chuyển đổi sau:
Trang 8Ví 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 4 bit theo thứ tự từ phải sangtrái, nếu dãy cuối cùng chưa đủ 4 bit thì ta thêm số 0 vào dãy cho đến khi đủ 4 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 từng nhóm 4 bit, thu được 2 nhómsau: 0110 và 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 như cách chuyển đổi cơ số từ thập phân sang nhị phân, đểchuyển từ thập phân sang bát phân ta cũng đem số thập phân chia liên tiếp cho 8,cho tới khi thương bằng 0 thì dừng lại Viết các số dư ngược từ dưới lên ta thu được
số bát phân tương ứng
Ví dụ : Chuyển số (2764)10 (?)8
Sắp xếp thứ tự từ dưới 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 cơ số từ hệ bát phân sang thập phân, talấy các chữ số trong phần nguyên của số cần chuyển nhân lần lượt với 8 mũ0,1,2,3,…tăng dần từ phải qua trái Còn phần nguyên của số cần chuyển ta sẽ nhânlần lượt với 8 mũ -1, -2, -3, … giảm dần từ phải qua trái
Trang 11if 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
Trang 12if 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;
Trang 13end;
{ -}BEGIN
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;
Trang 14Write(‘nhap xau nhi phan’); readln(s);
while length(s) mod 4 <>0 do s:='0'+s;
- Chương trình chuyển từ thập phân sang bát phân
(Tương tự chương trình chuyển từ thập phân sang nhị phân).
- Chương trình chuyển từ bát phân sang thập phân
(Tương tự chương trình chuyển từ nhị phân sang phận phân).
2.3.4 Bài tập vận dụng
Trang 15Bài 1 Số hexa (Đề HSG tỉnh Thanh hóa năm 2011 -2012)[3]
Trong toán học, lâu nay Bờm chỉ biết đến số thập phân Hôm nay, tình cờBờm đọc được tài liệu nói về số hexa Số hexa là số được tạo thành bởi các chữ số(0 →9) và các chữ cái (A →F) Muốn chuyển đổi một số nguyên K (K ≥ 0) từ hệthập phân sang hệ hexa Bờm làm như sau: Bờm lấy số K chia cho 16 được thương
là P, rồi lấy thương P chia cho 16 Cứ lặp lại như vậy cho đến khi nào thương bằng
0 thì dừng, sau đó viết liên tiếp phần dư từ dưới lên thì Bờm thu được số hexa:
Yêu cầu: Cho dãy số nguyên ở hệ thập phân Hãy giúp Bờm chuyển dãy số trên
thành dãy số tương ứng ở hệ hexa
Dữ liệu vào: Từ file BAI1.INP gồm:
- Dòng 1: Sốnguyên dương n (n ≤103)
- Dòng 2…n+1: Mỗi dòng chứa một sốnguyên K (0 ≤ K ≤ 109)
Kết quả: Ghi ra file BAI1.OUT gồm: n dòng là n số hexa tương ứng.
Trang 17Trung tâm nghiêm cứu gen thu thập N mẫu gen của N cá thể trong cùng một
loài N gen này được mã hoá thành dãy N số nguyên dương a 1 , a 2 , …, a N Bộ phậnphân tích sau khi xem xét đã đưa ra được kết luận sau:
Hai cá thể là có quan hệ huyết thống gần khi và chỉ khi mã gen của chúng biểu diễn trong cơ số 2 giống nhau hoặc khác nhau đúng 1 bit
Ví dụ: Hai cá thể có mã gen 7 (biểu diễn trong cơ số 2 là 111) và 5 (biểu diễntrong cơ số 2 là 101) là có quan hệ huyết thống gần
Hãy đếm xem trong số mẫu gen của N cá thể thu thập được có bao nhiêu cặp
cá thể có quan hệ huyết thống gần
Dữ liệu: Vào từ file văn bản GEN.INP
• Dòng đầu tiên ghi số nguyên dương N (N≤105)
• N dòng tiếp theo, dòng thứ i ghi mã gen của cá thể thứ i là một số nguyêndương trong phạm vi từ 1 đến 1000)
Kết quả: Ghi ra file văn bản GEN.OUT một số nguyên duy nhất là số cặp có
quan hệ huyết thống gần đã tìm được
Ví dụ:
GEN.INP GEN.OUT5
12345
4
3101010
function anhem(x,y: longint): boolean;
var a, b: array[1 12] of longint;
na, nb, nn: longint;
Trang 18if na<nb then nn:=nb else nn:=na;
for i:=na+1 to nn do a[i]:=0;
for i:=nb+1 to nn do b[i]:=0;