дано число в двоичной системе проверить правильность ввода этого числа(в его записи должны быть 0 и 1).если число введено неверно повторить ввод.при правильном вводе перевести число в десятичную систему счисления — Pascal(Паскаль)

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.

Leave a Comment

38 + = 47