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