Перевод чисел в различные системы счисления - 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.

Объяснение кода листинга программы

  1. cf - строка, содержащая цифры в системе счисления 16: 0123456789ABCDEF
  2. tetr - массив строк, содержащий тетрады для перевода чисел из системы счисления 16 в 2:
    • 0000, 0001, 0010, ... , 1110, 1111
  3. trd - массив строк, содержащий триады для перевода чисел из системы счисления 2 в 8:
    • 000, 001, 010, ... , 110, 111
  4. s16t - строка, вводится пользователем целая часть вещественного числа в СС 16
  5. s16f - строка, вводится пользователем дробная часть вещественного числа в СС 16
  6. s2t - строка, целая часть вещественного числа в СС 2
  7. s2f - строка, дробная часть вещественного числа в СС 2
  8. s8t - строка, целая часть вещественного числа в СС 8
  9. s8f - строка, дробная часть вещественного числа в СС 8
  10. s - строка, результирующее число в СС 8
  11. i - переменная типа byte для использования в циклах Код выполняет следующие действия:
  12. Запрашивает у пользователя целую и дробную части вещественного числа в системе счисления 16.
  13. Переводит введенные числа в верхний регистр.
  14. Выводит введенное число в системе счисления 16.
  15. Переводит число из системы счисления 16 в систему счисления 2 и выводит результат.
  16. Переводит число из системы счисления 2 в систему счисления 8 и выводит результат.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5
Похожие ответы