Sloshenie.PAS

{* Сложение двух дробей с разными знаменателями *}

Unit SLOSHENIE;
Interface
Implementation
Begin
 writeln('Сложение двух дробей с разными знаменателями
'
);
End.

Program Sloshenie;

Uses Sloshenie.pas; {* Эту строку можно удалить *}
Uses Crt; {* Подключаем внешние файлы *}
Var {* В работе нам потребуются переменные: *}
  a   : longint;
  b   : longint;
  c   : longint;
  a1  : longint;
  b1  : longint;
  a2  : longint;
  b2  : longint;
  nok : longint;
Procedure Nod; {процедура находит НОД чисел a и b}
{a, b, c - глобальные параметры     }
Begin
  If b > a Then
  Begin
    c := a;
    a := b;
    b := c;
  End;
  While a Mod b  0 Do
  Begin
    c := b;
    b := a Mod b;
    a := c;
  End;
  
End;
Begin
  ClrScr; {* Очищаем экран *}
  Write('Введите числитель 1ой дроби: > ');
  Readln(a1);
  Write('Введите знаменатель 1ой дроби: > ');
  Readln(b1);
  Write('Введите числитель 2ой дроби: > ');
  Readln(a2);
  Write('Введите знаменатель 2ой дроби: > ');
  Readln(b2);
  If (b1 = 0) Or (b2 = 0) Then
  Begin
    Writeln('Ошибка!! Знаменатель не должен равнятся нулю.');
    Readkey; {* Ждем нажатия любой клавиши *}
    Halt(1);
  End;
  Write(a1, ' / ', b1, ' + ', a2, ' / ', b2, ' = ');
  If (a1 = 0) Or (a2 = 0) Then
  Begin
    If a1 = 0 Then
    Begin
      a := a2;
      b := b2;
      a1 := a2;
      nok := b2;
    End;
    Else Begin
      a := a1;
    b := b1;
    nok := b1;
  End;
  
End;
Else Begin
  a := b1;
b := b2;
Nod; {находим НОД и записываем его в переменную b}
nok := b1 * b2 Div b; {находим НОК знаменателей 2х дробей (b1 и b2)}
a1 := a1 * nok Div b1; {умножаем числитель первой дроби на дополнительный                        множитель}
a2 := a2 * nok Div b2; {умножаем числитель второй дроби на дополнительный                        множитель}
a1 := a1 + a2; {складываем дроби: числитель полученной дроби - a1, знаменатель                требуемой дроби - nok}
a := a1;
b := nok;
End;
Nod; {сокращаем полученную дробь до несократимой дроби}
Write (a1 Div b); {выводим на экран полученный результат}
If nok Div b1 Then
  Writeln(' / ', nok Div b);
Writeln; {* Пустая строка *}
Readkey; {* Ждем нажатия пользователя *}
End......