{Файл: prog8_1.pas Задача: Даны две обыкновенные дроби a1/a2 и b1/b2(a1,a2,b1,b2-целые числа, при этом a2b2 не равны нулю). Найти обыкновенную несократимую дробь c1/c2, равную сумме двух данных } type Fraction = record num, den : integer; end; var a, b, c : Fraction; {Функция Nod возвращает НОД двух целых чисел} function NOD(t1, t2 : integer):integer; begin {NOD} while t1 <> t2 do if t1 > t2 then t1:=t1-t2 else t2:=t2-t1; NOD:=t1; end; {NOD} {Функция NOK возвращает НОК двух целых чисел t1 и t2} function NOK(t1, t2 : integer):integer; begin NOK:=t1 * t2 div NOD (t1, t2); end; {Процедура ReadF вводит дробь x с клавиатуры} procedure ReadF (VAR X : Fraction); begin {ReadF} readln(x.num, x.den); end; {ReadF} {Процедура WriteF выводит дробь x на экран} procedure WriteF(x : Fraction); begin {WriteF} writeln(x.num, '/',x.den); end; {WriteF} {} procedure SumF(x, y : Fraction; var z : Fraction); begin {SumF} z.den := NOK(x.den, y.den); z.num := x.num * z.den div x.den + y.num * z.den div y.den; end; {SumF} {Процедура Reduction сокращает дробь x} procedure Reduction (var x : Fraction); var t: integer; begin {Reduction} t:= NOD(x.num, x.den); x.num := x.num div t; x.den:= x.den div t; end; {Reduction} begin writeln('Введите первую дробь:'); ReadF(a); writeln('Введите вторую дробь:'); ReadF(b); writeln('Исходные дроби:'); WriteF(a); WriteF(b); SumF(a, b, c); Reduction(c); writeln('Сумма дробей ='); WriteF(c); end.