Воплотить в виде модуля набор подпрограмм для выполнения последующих операций над
Воплотить в виде модуля набор подпрограмм для выполнения следующих операций над обыкновенными дробями вида (P целое, Qестественное):
а) сложения;
б) умножения;
в) сокращения дроби.
Дробь представить следующим типом:
Type Frac=Record
P: Integer;
Q: 1..32767
End;
Используя этот модуль отыскать:
1) сумму 2-ух дробей, результат представить в виде несократимой дроби;
2) творенье 2-ух дробей, результат представить в виде несократимой дроби.
1 ответ
Андрей
Type
Frac = record
P: integer;
Q: 1..32767
end;
function gcd(a: integer; b: integer): integer;
Нахождение НОД
var
i: integer;
begin
while b lt;gt; 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
Frac = record
P: integer;
Q: 1..32767
end;
function gcd(a: integer; b: integer): integer;
Нахождение НОД
var
i: integer;
begin
while b lt;gt; 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
, оставишь ответ?
Похожие вопросы
-
Вопросы ответы
Новое
NEW
Статьи
Информатика
Статьи
Последние вопросы
Игорь 14 лет назад был на 8 лет моложе, чем его
Математика.
Два тела массами m1 и m2 находящие на расстоянии R друг
Физика.
В сосуде 4целых одна пятая литр воды что бы заполнить сосуд
Математика.
Двум малярам Диме И Олегу поручили выкрасить фасад дома они разделили
Разные вопросы.
найти порядковый номер 41Э если в ядре 20 нейтронов
Разные вопросы.
в ряду натуральных чисел 3, 8, 10, 24, … 18 одно
Математика.
Предприятие по производству с/хоз продукции на производство затратило 3527000 руб Валовый
Разные вопросы.
Математика, задано на каникулы. ВАРИАНТ 1004
НОМЕР 1,2,3,4,5,6,7,8.
Математика.
Имеются три конденсатора емкостью С1=1мкФ, С2=2мкФ и С3=3мкФ. Какую наименьшую емкость
Физика.
Из точки м выходят 3 луча MP MN и MK причём
Геометрия.
Облако тегов