Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиПоискОблакоVK ComboВсе проекты

помогите доработать маленькую прогу на паскале(см. внутри)

василий агутин Ученик (68), закрыт 11 лет назад
это программа для перевода из двоичной системы в десятичную.

надо сделать так чтобы, если вводилось бинарное число с ошибкой( к примеру больше 8 цифирок, или что-то кроме 1, 0 ) то выводилось на экран "ты дурак" или что-то в этом роде.
вот сама прога:

program bin_to_dec;
uses crt;
var
a,i,c,e: integer;
bin,vozvod: array [1..8] of integer;
begin
ClrScr;
writeln('введите ДВОИЧНОЕ число');
readln(a);
i:=1;
while i<=8 do
begin
bin:= a mod 10;
a:=a div 10;
i:=i+1;
end;
i:=1;
e:=1;
while i<=8 do
begin
vozvod:=bin*e;
e:=e*2;
i:=i+1;
end;
i:=1;
c:=0;
while i<=8 do
begin
c:=c+vozvod;
i:=i+1;
end;
writeln('ДЕСЯТИЧНОЕ число ',c);
end.

буду дико благодарен!
Лучший ответ
Илья Павлов Мыслитель (7459) 11 лет назад
Чтобы перевести число из двоичной в десятичную, нужно каждый единичный разряд двоичного числа умножить на основание двоичной сс, т. е. , на два, в степени "позиция этого разряда, отсчитывая справа от нуля". Затем сложить все получившиеся результаты. Это математика.
Пример:
1010
Переводим (с права на лево) :
0 * 2 ^ 0 = 0
1 * 2 ^ 1 = 2
0 * 2 ^ 2 = 0
1 * 2 ^ 3 = 8
0 + 2 + 0 + 8 = 10.

На том же принципе основан код программы, только возведение в степень делается при помощи сдвига единицы на N разрядов влево. Можно заменить функцией Pow.

Код:
=======================
program PBinToDec;

var
Bin: String;
Dec: Integer;
LngBin: Integer;
I: Integer;

begin
Write('Input binary: ');
ReadLn(Bin);
LngBin := Length(Bin);

if LngBin > 8 then
begin
WriteLn('Bin > 8!');
ReadLn;
Exit;
end;

Dec := 0;
for I := 1 to LngBin do
begin
if Bin[ I ] = '1' then
{ Число = Число + 2 ^ (Длина - I),
равносильно: Число = Число + Pow(2, Длина - I) }
Dec := Dec + (1 shl (LngBin - I))
else
if Bin[ I ] <> '0' then
begin
WriteLn('Bin[', I, '] is not 0 or 1!');
ReadLn;
Exit;
end;
end;
WriteLn('Dec = ', Dec);
ReadLn;
end.
==================
Вопросы? Пиши в ICQ: 228004347 или Агент.
Остальные ответы
Ringo Yuki Мудрец (17913) 11 лет назад
var
s: string;
x, i: byte;
fail: boolean;

begin
readln(s);

fail := false;
if (length(s)>8) then
fail := true
else for i:=1 to length(s) do begin
if (not (s[ i ] in [ '0','1' ])) then begin
fail := true;
break;
end;

x := (x shl 1)+(ord(s[ i ])-ord('0'));
end;

if (fail) then
writeln('fool')
else
writeln(x);
end.
Похожие вопросы