Advertisement
nblknn

2.2 (spacity)

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