Цитата:
Сообщение от Asya_inter
Как это сделать не знаю. Но думаю, что нужно складыват число 3 раза.
|
Вовсе не обязательно. Можно обойтись сложением двух чисел, одно из которых - исходное, второе - исходное, умноженное на 10. Вот так (здесь десятичная форма служит только для контроля и наглядности):
Код:
Var
n,i:byte;
M,M1,T:LongInt;
Function Bin2Dec(b:Longint):Integer;
var
Q,r:Integer;
B1:Longint;
begin
B1:=b;
Q:=B1 mod 10;
B1:=B1 div 10;
r:=1;
repeat
r:=r*2;
Q:=Q+(B1 mod 10)*r;
B1:=B1 div 10;
until B1=0;
Bin2Dec:=Q;
end;
Function Sum2Bin(b1,b2:LongInt):LongInt;
var
b1a,b2a,b3,r:LongInt;
c1,c2,c3,d:Byte;
begin
b1a:=b1;
b2a:=b2;
b3:=0;
r:=1;
d:=0;
repeat
c1:=b1a mod 10;
c2:=b2a mod 10;
if (c1+c2+d=0) or (c1+c2+d=1) then
begin
c3:=c1+c2+d;
d:=0;
end
else
if (c1+c2+d)=2 then
begin
c3:=0;
d:=1;
end
else
begin
c3:=1;
d:=1;
end;
b3:=b3+c3*r;
r:=r*10;
b1a:=b1a div 10;
b2a:=b2a div 10;
until (b1a=0) and (b2a=0);
b3:=b3+d*r;
Sum2Bin:=b3;
end;
Begin
Write('n (<=8) = ');
Readln(n);
Randomize;
T:=1;
for i:=1 to n-1 do
begin
M:=M+Random(2)*T;
T:=T*10;
end;
M:=M+T;
M1:=M*10;
Writeln(' M Binary: ',M);
Writeln(' M Decimal: ',Bin2Dec(M));
Writeln('3M Binary: ',Sum2Bin(M,M1));
Writeln('3M Decimal: ',Bin2Dec(Sum2Bin(M,M1)));
Readln
End.
ВНИМАНИЕ, ВАЖНО!
Программа писалась и отлаживалась в нормальном Паскале (Free, Turbo). Если у Вас этот зловонный АВС (у себя подобной гадости не держу), то следует:
1. Спереди присобачить Program Tralala;
2. Всюду LongInt заменить на Integer.