Показать сообщение отдельно
Старый 12.01.2015, 11:55   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от 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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070