Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над обыкновенными дробями вида (P – целое, Q—натуральное): а) сложения; б) умножения; в) сокращения дроби. Дробь представить следующим типом: Type Frac=Record P: Integer; Q: 1..32767 End; Используя этот модуль найти: 1) сумму двух дробей, результат представить в виде несократимой дроби; 2) произведение двух дробей, результат представить в виде несократимой дроби.

8 Фев 2020 в 19:41
222 +1
0
Ответы
1
unit FractionOperations;
interface
type
Frac = record
P: Integer;
Q: 1..32767;
end;
function GCD(a, b: Integer): Integer;
procedure Reduce(var F: Frac);
function Add(F1, F2: Frac): Frac;
function Multiply(F1, F2: Frac): Frac;
implementation
function GCD(a, b: Integer): Integer;
begin
if b = 0 then
Result := a
else
Result := GCD(b, a mod b);
end;
procedure Reduce(var F: Frac);
var
divisor: Integer;
begin
divisor := GCD(F.P, F.Q);
F.P := F.P div divisor;
F.Q := F.Q div divisor;
end;
function Add(F1, F2: Frac): Frac;
var
res: Frac;
begin
res.P := F1.P * F2.Q + F2.P * F1.Q;
res.Q := F1.Q * F2.Q;
Reduce(res);
Result := res;
end;
function Multiply(F1, F2: Frac): Frac;
var
res: Frac;
begin
res.P := F1.P * F2.P;
res.Q := F1.Q * F2.Q;
Reduce(res);
Result := res;
end;
end.

Пример использования модуля для нахождения суммы и произведения двух дробей:

program FractionOperationsTest;
uses
FractionOperations;
var
F1, F2, Sum, Product: Frac;
begin
F1.P := 1;
F1.Q := 2;
F2.P := 3;
F2.Q := 4;
Sum := Add(F1, F2);
writeln('Sum: ', Sum.P, '/', Sum.Q);
Product := Multiply(F1, F2);
writeln('Product: ', Product.P, '/', Product.Q);
end.
18 Апр 2024 в 17:48
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир