Tải bản đầy đủ (.pdf) (23 trang)

(Sáng kiến kinh nghiệm) xây dựng chuyên đề hệ đếm và chuyển đổi giữa các hệ để để 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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (316.07 KB, 23 trang )

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


2


1. Mở đầu
1.1. Lí do chọn đề tài
Trong thời điểm hiện nay, tồ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 hồn chỉnh.
Trong q 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 Xn 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.

1


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ề tố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 tố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 tốn cụ thể cịn hay bị sai.

2


- 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.
3


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
-

13
Dư 1


2
6
Dư 0

2
3
Dư 1

2
1
Dư 1

2
0

(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 d i thỏa
mãn điều kiện 0  di  b 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

4


- 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í 43
dụ:
16
Dư 11

2
Dư 2
(43.10

16
0
= (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 d i thỏa
mãn điều kiện 0  di  b 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:

5



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
Dư 4

8
345
Dư 1

8
43

8


Dư 3

8

5

0

Dư 5

 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

3
2

1
1

4
0


.

1
-1

7
-2
6


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 n<>0 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;
7


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 n<>0 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
8


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;
9


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;
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) 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;
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 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

12


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 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.
Đá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 k<>0 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);
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 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]

14



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
4
1
2
3
4
5
3
3
10

10
10
Giải thích ví dụ thứ nhất:
Các số 1, 2, 3, 4, 5 biểu diễn trong cơ số 2 lần lượt là 001, 010, 011, 100,
101. Có 4 cặp có quan hệ huyết thống gần là:
1 và 3,
1 và 5,
2 và 3,
4 và 5
Đá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 x<>0 Do
Begin
inc(na);
a[na]:=x mod 2;
x:=x div 2;
end;

nb:=0;
While y<>0 Do
Begin
inc(nb);
b[nb]:=y mod 2;
y:=y div 2;
end;
if nafor i:=na+1 to nn do a[i]:=0;
for i:=nb+1 to nn do b[i]:=0;
dem:=0;
for i:=1 to nn do
if a[i]<>b[i] then inc(dem);
anhem:=(dem<=1);
end;
{-----------------------------------------------------}
BEGIN
assign(f,'GEN.INP'); reset(f);
assign(g,'GEN.OUT'); rewrite(g);
read(n);
for i:=1 to 1000 do d[i]:=0;
for i:=1 to n do
begin
read(u);
inc(d[u]);
end;
kq:=0;
for i:=1 to 1000 do
if d[i]<>0 then
begin

kq:=kq+d[i]*(d[i]-1) div 2;
for j:=i-1 downto 1 do
16


if (d[j]<>0) and anhem(i,j) then
kq:=kq+d[i]*d[j];
end;
writeln(kq);
close(f); close(g);
END.
Bài 3. Chuyển nhị phân sang hexa (Đề HSG tỉnh Nghệ An 2014-2015)[3]
Cho một số nhị phân.
Yêu cầu: Chuyển đổi số nhị phân sang hexa
Dữ liệu: file bai3.inp: Dòng 1 ghi số nhị phân N.
Kết quả: ghi vào file bai3.out: 1 dòng ghi số hexa nhận được.
Ví dụ:
Bai3.inp
Bai3.out
1011111
5F
Đáp án
Var i:integer;
s,x,he16:string;
f,g:text;
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
17


assign(f,’bai3.inp’); reset(f);
assign(g,’bai3.out’);rewrite(g);
readln(f,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(g,he16);
close(f); close(g);
end.
Câu 4. Đối xứng nhị phân (Đề thi Tin học trẻ tỉnh Nghệ An 2016-2017)[3]
Một số N được gọi là đối xứng nhị phân nếu biểu diễn nhị phân của N là xâu đối
xứng.(n<105)
Yêu cầu: Kiểm tra N có phải đối xứng nhị phân hay không?
Dữ liệu vào: từ file DXNP.INP gồm:
- Một dòng ghi số N.
Dữ liệu ra: ghi ra file DXNP.OUT như sau:
Số 1 - Nếu N là đối xứng nhị phân.
Số 0 - Nếu N không phải là đối xứng nhị phân.
Ví dụ:
DXNP.INP
DXNP.OUT
DXNP.INP
DXNP.OUT
27
1
19
0
Đáp án:
program doi_xung_nhi_phan;
var n,i,du:longint;
s,xau,s1:ansistring;
f,g:text;
begin
assign(f,'dxnp.inp');reset(f);
assign(g,'dxnp.out');rewrite(g);

read(f,n);
s:='';
while n<>0 do
begin
du:=n mod 2;
n:=n div 2;
18


str(du,xau);
s:=xau+s;
end;
s1:='';
for i:=length(s) downto 1 do s1:=s1+s[i];
if s=s1 then write(g,'1')
else write(g,'0');
close(f);close(g);
end.
2.4. Hiệu quả của sáng kiến kinh nghiệm đối với hoạt động giáo dục, với bản
thân, đồng nghiệp và nhà trường
- Với hoạt động giáo dục
Đề tài này tôi đã áp dụng bồi dưỡng 2 học sinh trong đội tuyển học sinh giỏi
cấp tỉnh 2018-2019 là em Lê Trọng Thắng và em Nguyễn Tuấn Tùng 11B1 trường
THPT Thường Xuân 2. Sau khi dạy xong chuyên đề và tiến hành kiểm tra khảo sát,
đánh giá; có thể thấy được kết quả trong bảng so sánh sau:
Tên Học sinh
Điếm số
Thi KS trước khi dạy chuyên Lê Trọng Thắng
5.25/10
đề hệ đếm và chuyển đổi giữa

Nguyễn Tuấn Tùng
5.0/10
các hệ đếm
Thi KS sau khi dạy chuyên đề Lê Trọng Thắng
9.0/10
hệ đếm và chuyển đổi giữa các
Nguyễn Tuấn Tùng
8.75/10
hệ đếm
Với đề tài trên trong quá trình áp dụng cho học sinh trong đội tuyển học sinh
giỏi Tin học trường THPT Thường Xuân 2, căn cứ vào kết quả học tập của các em
tôi thấy việc sử dụng chuyên đề hệ đếm và chuyển đổi giữa các hệ đếm vào việc
dạy bồi dưỡng học sinh giỏi đã góp phần nâng cao hiệu quả học tập của học sinh,
giúp cho học sinh tích cực, chủ động nắm vững cách chuyển đổi giữa các hệ đếm
và vận dụng vào giải các bài tập thuộc dạng chuyển đổi giữa các hệ đếm một cách
thuần thục, các em trở nên yêu thích, đam mê lập trình tạo tiền đề cho các em học
các chuyên đề bồi dưỡng tiếp theo.
- Với bản thân: Bản thân tôi đúc rút được nhiều kinh nghiệm trong quá trình bồi
dưỡng học sinh giỏi và tạo được nguồn tài liệu giúp BDHSG trong các năm học sau.
- Với đồng nghiệp và nhà trường: Với đề tài này có tính khả thi cao thể ứng
dụng rộng rãi cho các học sinh trong nhà trường, các đồng nghiệp có thể sử dụng
áp dụng trong giảng dạy để nâng cao hiệu quả dạy học trong bộ môn tin học, đặc
biệt trong bồi dưỡng học sinh giỏi tin học 11.

19


3. Kết luận, kiến nghị
- Kết luận
Dạy học là nghệ thuật, áp dụng phương pháp dạy học nào cho có hiệu quả là

một công việc khoa học. Nhiệm vụ của giáo viên bồi dưỡng học sinh giỏi là dạy
cho học sinh không những biết tri thức, thành thạo kĩ năng, kĩ xảo mà còn dạy cho
học sinh biết tư duy, sáng tạo, năng lực tự học, tự nghiên cứu để có thể giải quyết
được mọi bài tốn trong thực tế.
Đề tài này mang tính khả thi rất cao, cụ thể là: trong quá trình bồi dưỡng học
sinh giỏi về hệ đếm và chuyển đổi giữa các hệ đếm, sử dụng chuyên đề này học sinh
dễ dàng nắm bắt được kiến thức cơ bản, biết cách chuyển đổi giữa các hệ đếm một
cách thuần thục. Vì vậy, khi giáo viên giao các dạng bài tập tổng hợp liên quan đến
chuyển đổi giữa các hệ đếm thì học sinh đều giải quyết nhanh chóng và hiệu quả.
Q trình nghiên cứu và thực hiện đề tài này bản thân đã cố gắng tìm tòi, học
hỏi, tham khảo tài liệu để xây dựng đề tài. Rất mong được sự đóng góp ý kiến của
các đồng chí đồng nghiệp và Hội đồng khoa học để sáng kiến trên được hồn thiện
hơn khơng chỉ áp dụng ở trường THPT Thường Xuân 2 mà có thể được áp dụng ở
nhiều trường THPT khác.
- Kiến nghị:
Để nâng cao hiệu quả việc dạy và học bộ môn Tin học thì cần bổ sung thêm
số lượng máy trong phịng thực hành, lắp đặt máy chiếu trong phòng thực hành Tin
học.
XÁC NHẬN CỦA THỦ TRƯỞNG ĐƠN VỊ

Thanh hóa, ngày 25 tháng 05 năm 2019
Tơi xin cam đoan đây là SKKN của
mình viết, không sao chép nội dung của
người khác.
Lê Thị Hoa

20


TÀI LIỆU THAM KHẢO

[1]. Sách giáo khoa tin học 10 – Hồ Sĩ Đàm – Nhà xuất bản Giáo dục, 2013
[2]. Sách giáo viên tin học 11 – Hồ Sĩ Đàm – Nhà xuất bản Giáo dục, 2013
[3]. Đề thi học sinh giỏi cấp tỉnh - Thanh Hóa, Hải Dương, Nghệ An các năm
2012, 2014, 2016, 2017
[4]. Tham khảo một số tài liệu trên Internet
- Nguồn:
- Nguồn: />
1



×