Перевод чисел в различные системы счисления - Pascal (80625)
Формулировка задачи:
Помогите составить программу перевода из некоторой системы счисления в родственную ей систему счисления вещественных чисел, содержащих как целую, так и дробную часть: Из шестнадцатеричной системы счислению в восьмеричную
Решение задачи: «Перевод чисел в различные системы счисления»
textual
Листинг программы
const
//цифры в СС 16
cf:string[16]='0123456789ABCDEF';
//тетрады для перевода 16 в 2
tetr:array[1..16] of string[4]=('0000','0001','0010','0011',
'0100','0101','0110','0111',
'1000','1001','1010','1011',
'1100','1101','1110','1111');
//триады для перевода 2 в 8
trd:array[1..8] of string[3]=('000','001','010','011',
'100','101','110','111');
var s16t,s16f,s2t,s2f,s8t,s8f,s:string;
i:byte;
begin
write('Введите целую часть вещественного числа в СС 16: ');
readln(s16t);
write('Введите дробную часть вещественного числа в СС 16: ');
readln(s16f);
//переведем все в верхний регистр
for i:=1 to length(s16t)do
s16t[i]:=UpCase(s16t[i]);
for i:=1 to length(s16f)do
s16f[i]:=UpCase(s16f[i]);
writeln('Число в СС 16');
writeln(s16t+'.'+s16f);
//переведем в СС 2
s2t:=''; //целая часть
while length(s2t)mod 4<>0 do s2t:='0'+s2t;
for i:=1 to length(s16t) do
s2t:=s2t+tetr[pos(s16t[i],cf)];
while s2t[1]='0' do delete(s2t,1,1);
s2f:='';//дробная часть
while length(s2f)mod 4<>0 do s2f:=s2f+'0';
for i:=1 to length(s16f) do s2f:=s2f+tetr[pos(s16f[i],cf)];
while s2f[length(s2f)]='0' do delete(s2f,length(s2f),1);
writeln('Число в СС 2');
writeln(s2t+'.'+s2f);
//перевод в СС 8
while length(s2t) mod 3 <> 0 do s2t:='0'+s2t;
s8t:='';//целая часть
while s2t<>'' do
begin
for i:=1 to 8 do
if copy(s2t,1,3)=trd[i] then s8t:=s8t+chr(i+47);
delete(s2t,1,3);//удаляем триаду
end;
while length(s2f) mod 3 <> 0 do s2f:=s2f+'0';
s8f:=''; //дробная часть
while s2f<>'' do
begin
for i:=1 to 8 do
if copy(s2f,1,3)=trd[i] then s8f:=s8f+chr(i+47);
delete(s2f,1,3);//удаляем триаду
end;
writeln('Число в СС 8');
s:=s8t+'.'+s8f;
writeln(s);
end.
Объяснение кода листинга программы
- cf - строка, содержащая цифры в системе счисления 16:
0123456789ABCDEF - tetr - массив строк, содержащий тетрады для перевода чисел из системы счисления 16 в 2:
0000,0001,0010, ... ,1110,1111
- trd - массив строк, содержащий триады для перевода чисел из системы счисления 2 в 8:
000,001,010, ... ,110,111
- s16t - строка, вводится пользователем целая часть вещественного числа в СС 16
- s16f - строка, вводится пользователем дробная часть вещественного числа в СС 16
- s2t - строка, целая часть вещественного числа в СС 2
- s2f - строка, дробная часть вещественного числа в СС 2
- s8t - строка, целая часть вещественного числа в СС 8
- s8f - строка, дробная часть вещественного числа в СС 8
- s - строка, результирующее число в СС 8
- i - переменная типа byte для использования в циклах Код выполняет следующие действия:
- Запрашивает у пользователя целую и дробную части вещественного числа в системе счисления 16.
- Переводит введенные числа в верхний регистр.
- Выводит введенное число в системе счисления 16.
- Переводит число из системы счисления 16 в систему счисления 2 и выводит результат.
- Переводит число из системы счисления 2 в систему счисления 8 и выводит результат.