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.
Вариант 2
uses crt;
var k,i,j:byte;
sum,sum1:longint;
s:string;
begin
clrscr;
k:=0;
repeat
write('Vvedite chislo v sisteme 2 s=');
readln(s);
for i:=1 to length(s) do
if not (s[i] in ['0'..'1'])
then k:=1;
until k=0;
sum:=0;
for i:=length(s) downto 1 do
begin
if s[i]='1' then
begin
sum1:=1;
for j:=1 to length(s)-i do sum1:=sum1*2;
end
else sum1:=0;
sum:=sum+sum1;
end;
writeln('Chislo v sisteme 10= ',sum);
readln
end.