Другие языки программирования и технологии

помогите доработать маленькую прогу на паскале(см. внутри)

это программа для перевода из двоичной системы в десятичную. надо сделать так чтобы, если вводилось бинарное число с ошибкой( к примеру больше 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. буду дико благодарен!
Чтобы перевести число из двоичной в десятичную, нужно каждый единичный разряд двоичного числа умножить на основание двоичной сс, т. е. , на два, в степени "позиция этого разряда, отсчитывая справа от нуля". Затем сложить все получившиеся результаты. Это математика.
Пример:
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 или Агент.
Евгений Голубцов
Евгений Голубцов
7 465
Лучший ответ
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.