>

Третя задача. Перейдемо до написання програми додавання двох "довгих додатних чисел". Початкові числа і результат зберігаємо у файлах. Назвемо процедуру додавання SumLongTwo.

Тоді програма введення двох "довгих чисел" і виведення результату їх додавання матиме вигляд:

Var A,B,C:Tlong;

Begin

Assign(Input,'Input.txt'); Reset(Input);

ReadLong(A); ReadLong(B);

Close (Input);

SumLongTwo(A,B,C);

Assign(Output,'Output.txt');

Rewrite(Output);

WriteLong(C);

Close(Output);

End.

Нехай А = 870613029451, В = 3475912100517461.

i

А[i]

B[i]

C[1]

C[2]

C[3]

C[4]

1

9451

7461

6912

1

0

0

2

1302

51

6912

1354

0

 

3

8706

9121

6912

1354

7827

1

4

0

3475

6912

1354

7827

3476

Алгоритм імітує звичайне додавання стовпчиком, починаючи з молодших розрядів. Для простоти реалізації арифметичних операцій з "довгими числами використовується машинне представлення ззаду наперед.

Результат: C = 3476782713546912.

Процедура додавання двох "довгих чисел".

Procedure SumLongTwo(A,B:Nlong; Var C:Tlong);

Var i,k:Integer;

Begin

FillChar(C,SizeOf (C),0);

If А[0]>B[0] Then k:=A[0] Else k:=B[0];

For i:=l To k Do

Begin

C[i+1]:=(C[i]+A[i]+B[i]) Div Osn;

C[i]:=(C[i]+A[i]+B[i]) Mod Osn;

{Чи є в цих операторах помилка?}

End;

If C[k+l]=0 Then C[0]:=k Else C[0]:=k+l;

End;

Четверта задача. Реалізація операцій порівняння для "довгих чисел" (А=В, А<В, А>В, А<В, А>В).

Function Eq(A,B:TLong):Boolean;

Var i:Integer;

Begin

Eq:=False;

If А[0]<>B[0] Then Exit

Else

Begin

i:=l;

While (i<=A[0]) And (А[i]=B[i]) Do Inc(i);

Eq:=(i=A[0]+l);

End;

End;

Реалізація функції А>В така.

Function More(A,B:Tlong):Boolean;

Var i:Integer;

Begin

If А[0]<B[0] Then More:=False

Else

If А[0]>B[0] Then More:=True

Else

Begin

i:=A[0];

While (i>0) And (А[i]=B[i]) Do Dec(i);

If i=0 Then More:=False

Else

If А[i]>B[i] Then More:=True

Else

More:=False;

End;

End;

Решта функцій реалізується через функції Eq і More.

Function Less(A,B:Tlong):Boolean;{A<B}

  Begin

       Less:=Not(More(A,B) Or Eq(A,B));

  End;

Function More_Eq(A,B:Tlong):Boolean;

     Begin

             More_Eq:=More(A,B) Or Eq(A,B);

       End;

І, нарешті, остання функція А<В.

Function Less_Eq (А, B:Tlong) : Boolean;

       Begin

                 Less_Eq:-Not(More(A,B)) ;

       End;

 

Hosted by uCoz