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

And2008 And2008    3   27.08.2019 15:10    5

Ответы
akikoaki akikoaki  05.10.2020 22:57
// 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
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика