Илья Павлов
Мыслитель
(7468)
12 лет назад
Чтобы перевести число из двоичной в десятичную, нужно каждый единичный разряд двоичного числа умножить на основание двоичной сс, т. е. , на два, в степени "позиция этого разряда, отсчитывая справа от нуля". Затем сложить все получившиеся результаты. Это математика.
Пример:
1010
Переводим (с права на лево) :
0 * 2 ^ 0 = 0
1 * 2 ^ 1 = 2
0 * 2 ^ 2 = 0
1 * 2 ^ 3 = 8
0 + 2 + 0 + 8 = 10.
На том же принципе основан код программы, только возведение в степень делается при помощи сдвига единицы на N разрядов влево. Можно заменить функцией Pow.
Код:
=======================
program PBinToDec;
var
Bin: String;
Dec: Integer;
LngBin: Integer;
I: Integer;
begin
Write('Input binary: ');
ReadLn(Bin);
LngBin := Length(Bin);
if LngBin > 8 then
begin
WriteLn('Bin > 8!');
ReadLn;
Exit;
end;
Dec := 0;
for I := 1 to LngBin do
begin
if Bin[ I ] = '1' then
{ Число = Число + 2 ^ (Длина - I),
равносильно: Число = Число + Pow(2, Длина - I) }
Dec := Dec + (1 shl (LngBin - I))
else
if Bin[ I ] <> '0' then
begin
WriteLn('Bin[', I, '] is not 0 or 1!');
ReadLn;
Exit;
end;
end;
WriteLn('Dec = ', Dec);
ReadLn;
end.
==================
Вопросы? Пиши в ICQ: 228004347 или Агент.
Ringo Yuki
Мудрец
(17933)
12 лет назад
var
s: string;
x, i: byte;
fail: boolean;
begin
readln(s);
fail := false;
if (length(s)>8) then
fail := true
else for i:=1 to length(s) do begin
if (not (s[ i ] in [ '0','1' ])) then begin
fail := true;
break;
end;
x := (x shl 1)+(ord(s[ i ])-ord('0'));
end;
if (fail) then
writeln('fool')
else
writeln(x);
end.
надо сделать так чтобы, если вводилось бинарное число с ошибкой( к примеру больше 8 цифирок, или что-то кроме 1, 0 ) то выводилось на экран "ты дурак" или что-то в этом роде.
вот сама прога:
program bin_to_dec;
uses crt;
var
a,i,c,e: integer;
bin,vozvod: array [1..8] of integer;
begin
ClrScr;
writeln('введите ДВОИЧНОЕ число');
readln(a);
i:=1;
while i<=8 do
begin
bin:= a mod 10;
a:=a div 10;
i:=i+1;
end;
i:=1;
e:=1;
while i<=8 do
begin
vozvod:=bin*e;
e:=e*2;
i:=i+1;
end;
i:=1;
c:=0;
while i<=8 do
begin
c:=c+vozvod;
i:=i+1;
end;
writeln('ДЕСЯТИЧНОЕ число ',c);
end.
буду дико благодарен!