SKKN 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

SKKN 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

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ột nhiệ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ữa các hệ đếm là một trong những chuyên đề hay và tương đối khó trong công tác bồi dưỡ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ọc sinh 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ật rồ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ảo nhiề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 sinh giỏi ở trường THPT Thường xuân 2 có tài liệu rèn luyện cho học sinh.

 

doc 23 trang thuychi01 6962
Bạn đang xem 20 trang mẫu của tài liệu "SKKN 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", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
SỞ 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
MỤ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
1. 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ột nhiệ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ữa các hệ đếm là một trong những chuyên đề hay và tương đối khó trong công tác bồi dưỡ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ọc sinh 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ật rồ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ảo nhiề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 sinh giỏ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ọc nó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ường Xuâ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.
2. 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ôn tin học ở trường THPT, cụ thể ở lớp 10 – “bài 2. Thông tin và dữ liệu” các em nắm bắt được thông tin là gì? Đơn vị cơ bản nhất để đo lường thông tin là gì? Muốn má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ồ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 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ấp quố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áo khoa 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ọc má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ọn tuyể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ỏi tin 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 đổi giữ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.
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 đặt cá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ải phá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 sinh mộ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ư duy phâ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ập tổ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ạng tổng các lũy thừa cơ số 8.
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 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
2
13
2
6
Dư 1
Dư 0
0
Dư 1
Dư 1
2
1
3
2
 (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-2d1d0,d-1d-2d-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ỏa mãn điều kiện khi đó 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ệ 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ụ:
(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 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ụ:
2
Dư 2
0
16
43
Dư 11
2
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: trong hệ đếm cơ số b, giả sử N có biểu diễn:
dndn-1dn-2d1d0,d-1d-2d-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ỏa mãn điều kiện khi đó 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ệ Hex lại tương ứng với 4 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 4 bit theo thứ tự từ phải sang trá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óm sau: 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
2764
8
8
345
Dư 4
Dư 1
0
Dư 3
Dư 5
8
5
43
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, ta lấ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ân lần lượt với 8 mũ -1, -2, -3,  giảm dần từ phải qua trái.
VD: Chuyển  5314.17OCT à(?)10
5
3
1
4
.
1
7
3
2
1
0
-1
-2
5314.17OCT = 5x83 + 3x 82 + 1x81 +4x 80 + 1x 8-1 +7x 8-2
= 2560 + 192 + 8 + 4 + 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 giữa các hệ đếm.
program chuyen_10_sang_2;
var n,du:integer;
 s,xau:ansistring;
begin
write('nhap n');read(n); 
s:='';
while n0 do
 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) do
begin
 begin
 val(s[i],so,code);
 begin
 tich:=1;
 for j:=1 to n do
 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 do
 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) do
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 do
 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 do 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) do
 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;
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) do
 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;
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 4 0 do s:='0'+s;
 i:=1; he16:='';
 while i<=length(s)-3 do
 begin
 x:=copy(s,i,4);
 he16:=he16+so(x);inc(i,4);
 end;
 write(he16);
 readln;
end.
Chú ý: 
- 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
Bà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 2n+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.
Đáp án:
Cách 1:
var n,du:word;
 K:longint;
 s,xau:ansistring;
 t:char;
	 f1,f2:text;
begin
assign(f1,'bai1.inp');reset(f1);
readln(f1,n);
assign(f2,'bai1.out');rewrite(f2);
for i:=1 to n do
begin
readln(f1,k);
 s:='';
 while k0 do
 begin
 du:=k mod 16;
 k:=k 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;
 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 do
begin
readln(f1,k);
writeln(f2,chcs16(k));
end;
close(f2); close(f1);
END.
Bài 2. Quan hệ huyết thống (Đề HSG tỉnh Hải Dương năm 2013-2014)[3]
Trung 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 a1, a2, , aN. Bộ phận phâ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ễn trong 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ên dươ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.OUT
5
1
2
3
4
5
4
3
10
10
10
3
Giải thích ví dụ thứ nhất:
Các số 1, 2, 3, 4, 5 biể

Tài liệu đính kèm:

  • docskkn_xay_dung_chuyen_de_he_dem_va_chuyen_doi_giua_cac_he_dem.doc