Реализовать в виде модуля набор подпрограмм для выполнения над обыкновенными дробями вида...

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

Реализовать в виде модуля набор подпрограмм для выполнения над обыкновенными дробями вида P /Q (где Р — целое число, Q — натуральное число). Вариант 1 В раздел реализации включить подпрограмму вычисления наибольшего общего делителя и на ее основе подпрограмму сокращения дробей. Помогите написать в паскале


Информатика (17 баллов) | 60 просмотров
Дан 1 ответ
0 голосов
Правильный ответ
// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
// Внимание! Если программа не работает, обновите версию!

unit ASM;

interface

  type SF=(integer,integer);
  function AddSF(a,b:SF):SF;
  function SubSF(a,b:SF):SF;
  function MultSF(a,b:SF):SF;
  function DivSF(a,b:SF):SF;
 
implementation
 
  function Gcd(p:SF):integer;
  begin
    (var a,var b):=p;
    a:=abs(a); b:=abs(b);
    while b>0 do (a,b):=(b,a mod b);
    Result:=a
  end;
 
  function ReductSF(p:SF):SF;
  begin
    var t:=Gcd(p);
    if t>1 then Result:=(p[0] div t,p[1] div t)
    else Result:=p
  end;
 
  function AddSF(a,b:SF):=ReductSF((a[0]*b[1]+a[1]*b[0],a[1]*b[1]));
 
  function SubSF(a,b:SF):=ReductSF((a[0]*b[1]-a[1]*b[0],a[1]*b[1]));

  function MultSF(a,b:SF):=ReductSF((a[0]*b[0],a[1]*b[1]));
    
  function DivSF(a,b:SF):=ReductSF((a[0]*b[1],a[1]*b[0]));
 
end.

***** Пример работы с модулем *****

uses ASM;

begin
  var a:=(5,24);
  var b:=(7,8);
  var c:=AddSF(a,b);
  Writeln(a[0],'/',a[1],'+',b[0],'/',b[1],'=',c[0],'/',c[1])
end.

Результат

5/24+7/8=13/12
(150k баллов)