{Файл: prog61.pas Задача: Даны две обыкновенные дроби a1/a2 и b1/b2(a1, a2, b1, b2 - целые числа, при этом a2, b2 не равны нулю). Найти обыкновенную несокрагимую дробь c1/c2, равную сумме двух данных. } type Fraction = record num, den : integer; end; var a, b, c : Fraction; {процедура ввода дроби} procedure ReadF(var x : Fraction); begin {ReadF} readln(x.num, x.den); end; {ReadF} {функция 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} NOK := t1 * t2 div NOD (t1, t2); end; {NOK} {процедура SumF суммирует дроби x и y, результат - в z} 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 } {процедура вывода дроби на экран} procedure writeF( x : Fraction); begin {writeF} writeln(x.num,'/', x.den); end; {writeF} begin writeln ('Ввелите первую дробь'); ReadF(a); writeln ('Ввелите вторую дробь'); ReadF(b); writeln('Исходные дроби'); writeF(a); writeF(b); SumF(a, b, c); Reduction(c); writeln('Сумма дробей ='); writeF(c); end.