Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над...

0 голосов
63 просмотров

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


Информатика (20 баллов) | 63 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

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



(142k баллов)