Chuyển đổi giữa các hệ cơ số. - Bài Tập Pascal Tổng Hợp

Chuyển đổi giữa các hệ cơ số.

Bài 1. Số hexa (năm 11-12)

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 ≤10
3).
- Dòng 2…n+1: Mỗi dòng chứa một sốnguyên K (0 ≤ K ≤ 10
9).
Kết quả: Ghi ra file BAI1.OUT gồm: n dòng là n số hexa tương ứng.
uses crt;
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,'hecoso10.out');reset(f1);
readln(f1,n);
assign(f2,'hecoso16.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. Từ hệ cơ số 10 sang hệ cơ số 2 làm tưong tự. Thay vì chia cho 16 ta chia cho 2.
program chuyen_cs_10_2;
uses crt;
var i,j,m,N:integer;
S:string;
f1,f2:text;
function nhiphan(n:longint):string;
var s,so,du:integer;
St,St1:string;
begin
s:=0;so:=n; St:='';St1:='';
while (so >0) do
begin
du:=so mod 2;
so:=so div 2;
if du=1 then St:=St+'1' else St:=St+'0';
end;
for i:=length(St) downto 1 do St1:=St1+St[i];
nhiphan:=St1;
end;
{----------------------------------}
BEGIN
assign(f1,'hecoso10.inp');reset(f1);
assign(f2,'hecoso2.out');rewrite(f2);
readln(f1,N);
for j:=1 to N do
begin
readln(f1,m);
S:=nhiphan(m);
writeln(f2,S);

end;
close(f1);close(f2);
END.
Bài 3. Chuyển từ hệ cơ số 2 sang hệ cơ số 10.
uses crt;
var x,i,j,a,n:longint;
m:array[1..100000] of longint;
S:string;
f1,f2:text;
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;


{===================================================================}
BEGIN
assign(f1,'hecoso2.out');reset(f1);
assign(f2,'hecoso10.out');rewrite(f2);
readln(f1,n);


for i:=1 to n do
begin
readln(f1,S);
n:=0;a:=length(S);

for j:=1 to length(S) do
begin
if (S[j]='1') or (S[j]='0') then val(S[j],m[j]);

n:=n+luythua(a-1,2)*m[j];
dec(a);
end;
writeln(f2,n);
end;
close(f1);close(f2);
END.



Câu 4. Hệ cơ số 16 sang 10 tương tự
uses crt;
var x,i,a,n:longint;
S:string;
f1,f2:text;
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
assign(f1,'hecoso16.inp');reset(f1);
assign(f2,'hecoso10.out');rewrite(f2);
readln(f1,n);
for i:=1 to n do
begin
readln(f1,S);
writeln(f2,he10(S));
end;
close(f1);close(f2);

END.
Previous
Next Post »