Dec(i);

end;

Writeln(F); Writeln(F);

end;

{ Процедура сложения сверхбольших чисел "в столбик".

Результат помещается в первое число, что равносильно оператору сложения

aNum1 := aNum1 + aNum2 }

procedure AddNumbers(var aNum1, aNum2 : TBigNumber);

var i,j : integer;

      n1, n2 : integer;       { слагаемые цифры }

      sum, ovr : integer; { сумма и перенос }

begin

ovr:=0; { в начале переполнение = 0 }

{ цикл по всем цифрам, кроме последней }

for i:=1 to CSize-1 do begin

      j:=i;       { j используется после завершения цикла }

      { Если в текущей позиции пробел, то считаем его нулем,

      а иначе символ цифры преобразуем в цифру 0..9 }

      if aNum1[i]=' '

      then n1:=0

      else n1:=Ord(aNum1[i])-Ord('0'); { n1 = 0..9 }

      if aNum2[i]=' '

      then n2:=0

      else n2:=Ord(aNum2[i])-Ord('0'); { n2 = 0..9 }

      sum:= (n1+n2+ovr) mod 10;       { сумма sum = 0..9 }

      ovr:= (n1+n2+ovr) div 10;       { перенос ovr = 0 или 1 }

      { Преобразуем цифру в символ цифры }

      aNum1[i]:= Char(sum + Ord('0'));

end;

{ Если было переполнение, то за последней цифрой помещаем единицу }

if ovr<>0 then aNum1[j+1]:='1';

end;

var F : text; i : integer;

begin       { === Главная программа === }

Assign(F, ''); Rewrite(F);

FillChar(BN1, SizeOf(BN1), ' '); FillChar(BN2, SizeOf(BN2), ' ');

for i:=1 to CSize-1 do BN1[i]:= Char(Random(100) mod 10 + Ord('0'));

for i:=1 to CSize-1 do BN2[i]:= Char(Random(100) mod 10 + Ord('0'));

WriteBigNumber(F, BN1); { первое слагаемое }

WriteBigNumber(F, BN2); { второе слагаемое }

AddNumbers(BN1, BN2);

WriteBigNumber(F, BN1); { сумма }

Close(F); Readln;

end.

Вы читаете Песни о Паскале
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату