Перевод чисел в различные системы счисления - 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 и выводит результат.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д