Advertisement
gguuppyy

лаба2н2

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