Advertisement
nblknn

2.2 (((

Oct 13th, 2023 (edited)
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.66 KB | None | 0 0
  1. Program LAB2_2;
  2.  
  3. Uses
  4.     System.SysUtils;
  5.  
  6. Const
  7.     MIN = 0;
  8.     MAX = 9;
  9.     MINNUM = 1;
  10.     MAXNUM = 1000000;
  11.  
  12. Type
  13.     TArrOI = Array Of Integer;
  14.  
  15. Procedure WriteCondition;
  16. Begin
  17.     Writeln('Данная программа складывает два числа столбиком.');
  18.     Writeln('Условие ввода чисел: числа целые, от 1 до 1000000.');
  19. End;
  20.  
  21. Procedure InputNum(Number: Integer; Var Num: Integer);
  22. Var
  23.     IsCorrect: Boolean;
  24. Begin
  25.     Repeat
  26.         IsCorrect := True;
  27.         Write('Введите ', Number, ' число: ');
  28.         Try
  29.             Read(Num);
  30.         Except
  31.             Writeln('Введенные данные не соответствуют условию. Повторите попытку.');
  32.             IsCorrect := False;
  33.         End;
  34.         If IsCorrect And ((Num < MINNUM) Or (Num > MAXNUM)) Then
  35.         Begin
  36.             Writeln('Введенные данные не соответствуют условию. Повторите попытку.');
  37.             IsCorrect := False;
  38.         End;
  39.     Until IsCorrect;
  40. End;
  41.  
  42. Function FindArraySize(Num, Size: Integer): Integer;
  43. Begin
  44.     Size := 0;
  45.     While Num > MIN Do
  46.     Begin
  47.         Size := Size + 1;
  48.         Num := Num Div 10;
  49.     End;
  50.     FindArraySize := Size;
  51. End;
  52.  
  53. Procedure ConvertToArray(Num, Size: Integer; Var NumArr: TArrOI);
  54. Var
  55.     I, Ten: Integer;
  56. Begin
  57.     SetLength(NumArr, Size);
  58.     Ten := 10;
  59.     For I := High(NumArr) DownTo Low(NumArr) Do
  60.     Begin
  61.         NumArr[I] := (Num Mod Ten) Div (Ten Div 10);
  62.         Ten := Ten * 10;
  63.     End;
  64. End;
  65.  
  66. Procedure FindSum(BiggerSize, SmallerSize: Integer;
  67.   BiggerNum, SmallerNum: TArrOI; Var Sum: TArrOI);
  68. Var
  69.     I: Integer;
  70. Begin
  71.     SetLength(Sum, BiggerSize);
  72.     For I := High(Sum) Downto 0 Do
  73.     Begin
  74.         If (I > (BiggerSize - SmallerSize - 1)) Then
  75.             Sum[I] := BiggerNum[I] + SmallerNum[I - (BiggerSize - SmallerSize)]
  76.         Else
  77.             Sum[I] := BiggerNum[I];
  78.     End;
  79. End;
  80.  
  81. Procedure AddOnes(Var Sum: TArrOI);
  82. Var
  83.     I, One: Integer;
  84. Begin
  85.     One := 0;
  86.     For I := High(Sum) Downto 1 Do
  87.     Begin
  88.         Sum[I] := Sum[I] + One;
  89.         If Sum[I] > MAX Then
  90.         Begin
  91.             One := 1;
  92.             Sum[I] := Sum[I] - 10;
  93.         End
  94.         Else
  95.             One := 0;
  96.     End;
  97.     Sum[0] := Sum[0] + One;
  98. End;
  99.  
  100. Procedure AddPosition(Var Sum: TArrOI);
  101. Var
  102.     I: Integer;
  103. Begin
  104.     If Sum[0] > MAX Then
  105.     Begin
  106.         SetLength(Sum, (High(Sum) + 2));
  107.         For I := (High(Sum) - 1) Downto 0 Do
  108.             Sum[I + 1] := Sum[I];
  109.         Sum[1] := Sum[0] - 10;
  110.         Sum[0] := 1;
  111.     End;
  112. End;
  113.  
  114. Procedure OutputArray(Arr: TArrOI);
  115. Var
  116.     I: Integer;
  117. Begin
  118.     For I := Low(Arr) To High(Arr) Do
  119.         Write(Arr[I]);
  120. End;
  121.  
  122. Procedure OutputSum(FstNumArr, SecNumArr, Sum: TArrOI);
  123. Var
  124.     I: Integer;
  125. Begin
  126.     OutputArray(FstNumArr);
  127.     Write(' + ');
  128.     OutputArray(SecNumArr);
  129.     Write(' = ');
  130.     OutputArray(Sum);
  131. End;
  132.  
  133. Var
  134.     FstNum, SecNum, FstSize, SecSize: Integer;
  135.     FstNumArr, SecNumArr, Sum: TArrOI;
  136.  
  137. Begin
  138.     WriteCondition;
  139.     InputNum(1, FstNum);
  140.     InputNum(2, SecNum);
  141.     FstSize := FindArraySize(FstNum, FstSize);
  142.     SecSize := FindArraySize(SecNum, SecSize);
  143.     ConvertToArray(FstNum, FstSize, FstNumArr);
  144.     ConvertToArray(SecNum, SecSize, SecNumArr);
  145.     If (FstSize > SecSize) Then
  146.         FindSum(FstSize, SecSize, FstNumArr, SecNumArr, Sum)
  147.     Else
  148.         FindSum(SecSize, FstSize, SecNumArr, FstNumArr, Sum);
  149.     AddOnes(Sum);
  150.     AddPosition(Sum);
  151.     OutputSum(FstNumArr, SecNumArr, Sum);
  152.     Readln(FstSize);
  153.  
  154. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement