Написать функцию, которая переводит из дваичной системы в 10 пока пользователь не введёт...

0 голосов
62 просмотров

Написать функцию, которая переводит из дваичной системы в 10 пока пользователь не введёт 0.Pascal


Информатика (12.2k баллов) | 62 просмотров
0

нельзя записать просто 0, а все остальнык числа можно

0

Программа решается с помощью цикла while, предоставляя пользователю ввод любой из цифр (0 или 1). Если Вы просто предложите записать число в одну переменную - так программа не поймёт, когда именно ей надо окончить предоставление ввода.

0

И да, почему это нельзя 0 просто? 0 в двоичной = 0 в десятичной или любой другой

0

А теперь прочитай мой последний комментарий.

0

Если пользователь вводит 0,то цикл как и сама программа завершает свою работу,будь то просто 0 или же 101010

Дано ответов: 2
0 голосов
Правильный ответ

function binToDec(s:string):integer;

var a,d,i:integer;

begin

a:=0;

d:=1;

for i:=length(s) downto 1 do

begin

if s[i]='1' then a:=a+d;

d:=2*d;

end;

binTodec:=a;

end;

var dv: string; fl:boolean; i:integer;

begin

write('Введите двоичное число: ');

readln(dv);

while dv<>'0' do

begin

fl:=true;

for i:=1 to length(dv) do

 fl:=fl and (dv[i] in ['0','1']);

if fl then writeln(dv,'(2) = ',binToDec(dv),'(10)')

else writeln('Ошибка ввода');

write('Введите двоичное число:');

readln(dv);

end;

end.

Пример:

Введите двоичное число: 123

Ошибка ввода

Введите двоичное число:10101

10101(2) = 21(10)

Введите двоичное число:0

(194k баллов)
0 голосов

function decbin(n: int64): int64;

var k,m: int64;

    priz: boolean;

begin

 k:=1;  m:=0;

 priz:=true;

 repeat

   if (n mod 10)>1 then

   begin

     writeln('недопустимый ввод - цифра ',n mod 10);

     priz:=false;

     break;

   end;      

   m:=m+k*(n mod 10);

   n:=n div 10;

   k:=k*2;  

 until n=0;  

 if priz then decbin:=m

 else decbin:=-1;

end;

// основная программа

var n,k: int64;

begin

 repeat

   readln(n);

   if n=0 then break

   else

   begin

     k:=decbin(n);

     if k>0 then writeln('десятичное число: ',k);

   end;  

 until false;  

end.


1011100011210

недопустимый ввод - цифра 2

11101101

десятичное число: 237

11111111

десятичное число: 255

0


(9.7k баллов)