Перевод из двоичной системы в двоично-десятичную - Pascal

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

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

var
  bin: string; {в этой переменной будем хранить считанное значение число в двоичной СС}
  bin_dec: string; {в этой переменной по окончании программы будет храниться результат}
  dec, t: integer; {в этупеременную запишем число, переведённое в десятичную СС}
 
function ToNormal(var x: string): integer;
var y: string;
    rez: real;
    i,t: integer;
begin
  y := x; rez := 0;
  for i:=0 to length(y)-1 do
   begin
     t := StrToInt(y[Length(y) - i]);
     rez := rez + t * Exp(i * ln(2));
   end;
  ToNormal := Round(int(rez));
end;
 
function ToBin(var x: integer): string;
var rez: string;
    y: integer;
begin
  rez := '';  y := x;
  Repeat
   if (y mod 2 = 0) then rez := '0' + rez
     else rez := '1' + rez;
   y := y div 2;
  Until y < 1;
  ToBin := rez;
end;
 
begin
  readln(bin); {Думаю, понятно ;)}
  dec:= ToNormal(bin); {переводим значение из переменной bin в десятичную СС. Результат пишем в переменную dec}
  { writeln(dec); {можно также показать число, переведённое в десятичную систему СС}}
  bin_dec:= ''; {изначально результаты нашей работы отсутствует}
  Repeat {задаём цикл}
    t:= dec mod 10; {запоминаем последнюю цифру числа из переменной dec}
    bin_dec:= bin_dec + ToBin(t); {в результирующую переменную дописываем цифру из t, переведённую в двоичную систему СС функцией ToBin}
    dec:= dec div 10; {число из переменной dec делаи целочисленно на 10, удаляя таким образом из него последнюю цифру}
  Until dec=0; {цикл выполняется до тех пор, пока значение переменной dec станет равно нулю}
  writeln(bin_dec); {ну, догадайтесь сами :)}
  readln;
end.

Решение задачи: «Перевод из двоичной системы в двоично-десятичную»

textual
Листинг программы
uses crt;
var
st:string;
summ,temp:real;
i,j,k,c:integer;
begin
ClrScr; // чистим экран
write ('Введите двоичное число: ');
read(st);
 for i:=1 to Length(st) do begin   //идём от 1 до длинны строки
    if st[i]='1' then
    else
       if st[i]='0' then            //проверка. если элемент i строки равен 1 или 0 то  c=5
       else
         c:=5;
 end;
if c<>5 then begin                 //если с не равно 5-и то идём дальше
   for i:=1 to Length(st) do begin  //идём от 1 до длинны строки
     val(st[i],j,k);                //присваиваем j целочисленный эквивалент i-того элемента строки
     c:=Length(st)-i;               //считаем степень
     temp:=j*(exp(c*ln(2)));        //умножаем i-тый элемент строки на 2 в степени с
     summ:=summ+temp;
       if i=Length(st) then         //вывод промежуточных действий
       write ('(',j,'*2^',c,')=')
       else
         write ('(',j,'*2^',c,')+');
   end;
   write (summ);
end
else
end.

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

  1. В первой строке кода используется библиотека crt, которая является стандартной для языка Pascal.
  2. Переменная st инициализируется строкой, которую вводит пользователь.
  3. Затем используется цикл for, который проходит от 1 до длины строки st.
  4. Внутри цикла проверяется каждый элемент строки st. Если элемент равен 1, то переменной c присваивается значение 5. Если элемент равен 0, то переменной c также присваивается значение 5.
  5. Если значение переменной c не равно 5, то цикл продолжается.
  6. Для каждого элемента строки st выполняется следующая последовательность действий:
    • Значение элемента преобразуется в целое число с помощью функции val.
    • Значение элемента умножается на 2 в степени c с помощью формулы temp = j exp(c ln(2)).
    • Результат умножения прибавляется к сумме summ.
  7. Если текущий элемент является последним элементом строки st, то выводится промежуточный результат с помощью функции write.
  8. Код завершается, и на экран выводится итоговое значение суммы summ.

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


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

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

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