Код:
uses crt;
var s:string;
    i,j,sum,sum2:integer;
begin
clrscr;
repeat
j:=0;
writeln('Введите число в двоичной системе:');
Readln(s);
for i:=1 to length(s) do
if not (s[i] in ['0','1']) then {если есть что-то кроме 0 и 1}
 begin
  j:=1;
  writeln('Число введено неверно. Повторите ввод.');
  break;
 end;
until j=0;
sum:=0;{начинаем составлять десятичное число}
for i:=length(s)-1 downto 1 do{идем спредпоследнего знака назад}
 begin
  if s[i]='1' then{если 1}
   begin
    sum2:=1;{составляем очередную степень числа 2}
    for j:=1 to length(s)-i do sum2:=sum2*2;{возводим 2 в степень ее позизии с конца-1}
   end
  else sum2:=0;{если ноль ничего}
  sum:=sum+sum2;{прибавляем очередное слагаемое}
 end;
if s[length(s)]='1' then inc(sum);{если последнее в исходной строке = 1, увеличиваем число на 1}
writeln('Число в десятичной системе = ',sum);
readln
end.