Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над обыкновенными дробями вида (p – целое, q—натуральное): а) сложения; б) умножения; в) сокращения дроби. дробь представить следующим типом: type frac=record p: integer; q: 1..32767 end; используя этот модуль найти: 1) сумму двух дробей, результат представить в виде несократимой дроби; 2) произведение двух дробей, результат представить в виде несократимой дроби.

KateHe KateHe    2   20.06.2019 11:00    0

Ответы
Лёлик8881 Лёлик8881  02.10.2020 06:19
Type
  Frac = record
    P: integer;
    Q: 1..32767
  end;

function gcd(a: integer; b: integer): integer;
{Нахождение НОД}
var
  i: integer;
begin
  while b <> 0 do
  begin
    a := a mod b;
    i := b; b := a; a := i
  end;
  result := a
end;

function RedFrac(a: Frac): Frac;
{Сокращение дроби}
var
  igcd: integer;
  r: Frac;
begin
  igcd := gcd(a.P, a.Q);
  r.P := a.P div igcd;
  r.Q := a.Q div igcd;
  RedFrac := r
end;

function Add(a, b: Frac): Frac;
{Сложение дробей}
var
  r: Frac;
begin
  r.P := a.P * b.Q + b.P * a.Q;
  r.Q := a.Q * b.Q;
  Add := RedFrac(r)
end;

function Mult(a, b: Frac): Frac;
{Умножение дробей}
var
  r: Frac;
begin
  r.P := a.P * b.P;
  r.Q := a.Q * b.Q;
  Mult := RedFrac(r)
end;

var
  m, n, k: Frac;

begin
  m.P := 4; m.Q := 15; {4/15}
  n.P := 9; n.Q := 25; {9/25}
  k := Add(m, n);
  Writeln(k.P, '/', k.Q);
  k := Mult(m, n);
  Writeln(k.P, '/', k.Q);
end.

Результат выполнения программы:
47/75
12/125
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика