Advertisement
gguuppyy

лаба2н2(изм)

Oct 21st, 2023
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.11 KB | None | 0 0
  1. Program Laba2_2;
  2. Uses
  3.     Windows, System.SysUtils;
  4.  
  5. Function NOD(A, B: Integer): Integer;
  6. Var
  7.     Temp: Integer;
  8. Begin
  9.     While B <> 0 Do
  10.     Begin
  11.         Temp := B;
  12.         B := A Mod B;
  13.         A := Temp;
  14.     End;
  15.     NOD := A;
  16. End;
  17.  
  18. Function InputAndCheckNum: Integer;
  19. Var
  20.     IsCorrect: Boolean;
  21.     Num: Integer;
  22. Begin
  23.     Repeat
  24.         IsCorrect := True;
  25.         Try
  26.             Readln(Num);
  27.         Except
  28.             Writeln('Ошибка. Введите целое число:');
  29.             IsCorrect := False;
  30.         End;
  31.     Until IsCorrect;
  32.     InputAndCheckNum := Num;
  33. End;
  34.  
  35. Function InputAndCheckDenom(Num: Integer): Integer;
  36. Var
  37.     IsCorrect: Boolean;
  38.     Denom: Integer;
  39. Begin
  40.     Repeat
  41.         IsCorrect := True;
  42.         Denom := InputAndCheckNum;
  43.         If Denom = 0 Then
  44.         Begin
  45.             Writeln('Ошибка. Делить на ноль нельзя. Повторите ввод знаменателя:');
  46.             IsCorrect := False;
  47.         End
  48.         Else
  49.         Begin
  50.             If Abs(Num) > Abs(Denom) Then
  51.             Begin
  52.                 Writeln('Ошибка. Числитель должен быть меньше знаменателя по модулю, дробь обыкновенная. Повторите ввод знаменателя:');
  53.                 IsCorrect := False;
  54.             End
  55.             Else
  56.             Begin
  57.                 If (NOD(Abs(Num), Abs(Denom)) <> 1) Or
  58.                   ((Num < 0) And (Denom < 0)) Then
  59.                 Begin
  60.                     Writeln('Ошибка. Дробь должна быть несократимой. Повторите ввод знаменателя:');
  61.                     IsCorrect := False;
  62.                 End;
  63.             End;
  64.         End;
  65.     Until IsCorrect;
  66.     InputAndCheckDenom := Denom;
  67. End;
  68.  
  69. Procedure SubtractionAndPrint(M, N, P, Q: Integer);
  70. Var
  71.     NewNumerator, NewDenominator, X: Integer;
  72. Begin
  73.     NewNumerator := M * Q - P * N;
  74.     NewDenominator := N * Q;
  75.     X := NOD(Abs(NewNumerator), Abs(NewDenominator));
  76.     NewNumerator := NewNumerator Div X;
  77.     NewDenominator := NewDenominator Div X;
  78.     If NewNumerator Mod NewDenominator = 0 Then
  79.         Writeln('Результат вычитания дробей: ', #13#10, M, '/', N, ' - ', P,
  80.           '/', Q, ' = ', (NewNumerator Div NewDenominator))
  81.     Else
  82.         Writeln('Результат вычитания дробей: ', #13#10, M, '/', N, ' - ', P,
  83.           '/', Q, ' = ', NewNumerator, '/', NewDenominator);
  84. End;
  85.  
  86. Var
  87.     M, N, P, Q: Integer;
  88.  
  89. Begin
  90.     SetConsoleCP(1251);
  91.     SetConsoleOutputCP(1251);
  92.     Writeln('Эта программа выполняет вычитание 2-х обыкновенных несократимых дробей M/N и P/Q:');
  93.     Writeln('Введите М: ');
  94.     M := InputAndCheckNum;
  95.     Writeln('Введите N: ');
  96.     N := InputAndCheckDenom(M);
  97.     Writeln('Введите P: ');
  98.     P := InputAndCheckNum;
  99.     Writeln('Введите Q: ');
  100.     Q := InputAndCheckDenom(P);
  101.     SubtractionAndPrint(M, N, P, Q);
  102.     Readln;
  103. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement