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