Код:
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.