Составить программу перевода этого числа в шестнадцатеричную систему счисления - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Дано дробное число в двоичной системе счисления, т.е. последовательность цифр 0 и 1, разделенных точкой. Составить программу перевода этого числа в шестнадцатеричную систему счисления.

Решение задачи: «Составить программу перевода этого числа в шестнадцатеричную систему счисления»

textual
Листинг программы
uses crt;
//тетрады для перевода 2 в 16
const tetr:array[0..15] of string[4]=('0000','0001','0010','0011',
                                      '0100','0101','0110','0111',
                                      '1000','1001','1010','1011',
                                      '1100','1101','1110','1111');
 
var s2,s21,s22,s16,s161,s162:string;
    i:integer;
    c:char;
begin
clrscr;
writeln('Введите дробное число в СС 2(разделитель точка), окончание ввода Enter:');
s2:='';
repeat
c:=readkey;
if c in ['0','1'] then //в строку только 0 и 1
 begin
  write(c);
  s2:=s2+c
 end;
if (c='.')and(pos('.',s2)=0)then
 begin
  write(c);
  s2:=s2+c
 end;
if c=#13 then writeln //Enter-на новую строку и выход
until c=#13;
if pos('.',s2)=0 then s2:='0.'+s2//если не ввели точку
else if pos('.',s2)=1 then s2:='0'+s2;//если ввели первой
clrscr;
writeln('Число в СС 2: ',s2);
//переводим целую часть
s21:=copy(s2,1,pos('.',s2)-1);
while length(s21) mod 4<>0 do s21:='0'+s21;//добавим в начало 0 до кратности 4
s161:='';
while s21<>'' do
 begin
  for i:=0 to 15 do
  if copy(s21,1,4)=tetr[i]then //читаем тетраду
   begin
    if i in [0..9] then s161:=s161+chr(i+48)//пишем или цифру
    else s161:=s161+chr(i+55);//или букву A..F
   end;
  delete(s21,1,4);//удалим тетраду
 end;
while (s161[1]='0')and(length(s161)>1) do delete(s161,1,1);//удалим ведущие ноли
//переводим дробную часть
delete(s2,1,pos('.',s2)); //удалим целую часть с точкой
s22:=s2;
while length(s22) mod 4<>0 do s22:=s22+'0';//добавим в конец 0 до кратности 4
s162:='';
while s22<>'' do
 begin
  for i:=0 to 15 do
  if copy(s22,1,4)=tetr[i]then
   begin
    if i in [0..9] then s162:=s162+chr(i+48)
    else s162:=s162+chr(i+55);
   end;
  delete(s22,1,4);
 end;
s16:=s161+'.'+s162;
writeln('Число в СС 16: ',s16);
end.

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

  1. Создается переменная s2 типа string, которая будет использоваться для хранения введенного числа в шестнадцатеричной системе счисления.
  2. Создается переменная s21 типа string, которая будет использоваться для хранения целой части числа, переведенной в шестнадцатеричную систему счисления.
  3. Создается переменная s22 типа string, которая будет использоваться для хранения дробной части числа, переведенной в шестнадцатеричную систему счисления.
  4. Создается переменная s16 типа string, которая будет использоваться для хранения итогового числа в шестнадцатеричной системе счисления.
  5. В цикле while считывается символ от пользователя, пока не будет введен символ Enter.
  6. Если введенный символ - это точка, то к переменной s2 добавляется точка.
  7. Если длина строки s2 равна нулю, то к переменной s2 добавляется ноль.
  8. Если длина строки s2 равна единице, то к переменной s2 добавляется ноль в начале.
  9. Переменные s21 и s22 инициализируются пустой строкой.
  10. Цикл while продолжается, пока длина строки s21 не станет равной нулю.
  11. Внутри цикла while считывается тетрада из массива tetr.
  12. Если строка s21 содержит соответствующий символ, то он заменяется на соответствующую цифру или букву.
  13. После окончания цикла while удаляется последний символ из строки s21.
  14. Цикл while продолжается, пока длина строки s22 не станет равной нулю.
  15. Внутри цикла while считывается тетрада из массива tetr.
  16. Если строка s22 содержит соответствующий символ, то он заменяется на соответствующую цифру или букву.
  17. После окончания цикла while удаляется последний символ из строки s22.
  18. Строки s21 и s22 объединяются в одну строку с разделителем точка.
  19. Итоговая строка s16 инициализируется пустой строкой.
  20. Цикл while продолжается, пока длина строки s16 не станет равной нулю.
  21. Внутри цикла while к строке s16 добавляется целая часть числа, переведенная в шестнадцатеричную систему счисления.
  22. После окончания цикла while к строке s16 добавляется дробная часть числа, переведенная в шестнадцатеричную систему счисления.
  23. Программа завершается и выводит итоговую строку s16 на экран.

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


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

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

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