Unit Breuken;
INTERFACE
type
breuk = record { fraction }
teller,noemer : integer; { numerator,denominator }
end;
function maak(a,b : integer) : breuk; { make }
function afdruk(f : breuk) : string; { print }
function plus(a,b : breuk) : breuk; { addition }
function minus(a,b : breuk) : breuk; { substraction }
function maal(a,b : breuk) : breuk; { multiplication }
function deel(a,b : breuk) : breuk; { division }
function gelijk(a,b : breuk) : boolean; { equality }
function groter(a,b : breuk) : boolean; { greater }
function dubbel(a : breuk) : double; { Double precision }
IMPLEMENTATION
function maak(a,b : integer) : breuk;
{
Make
}
var
h : breuk;
begin
h.teller := a;
h.noemer := b;
maak := h;
end;
function Letterlijk(nr : integer) : string;
{
Number -> string
}
const
cijfer : string = '0123456789';
var
no,t,tel,wel : integer;
vgl : string;
c : char;
begin
no := nr;
tel := 0;
vgl := '';
while no > 0 do
begin
c := cijfer[(no mod 10) + 1];
vgl := vgl + c;
no := no div 10;
tel := tel + 1;
end;
wel := tel div 2;
for t := 0 to wel-1 do
begin
c := vgl[t+1];
vgl[t+1] := vgl[tel-t];
vgl[tel-t] := c;
end;
if vgl = '' then vgl := '0';
Letterlijk := vgl;
end;
function afdruk(f : breuk) : string;
{
Print
}
begin
afdruk := Letterlijk(f.teller) + '/' + Letterlijk(f.noemer);
end;
function GGD(aa,bb : integer) : integer;
{
Greatest Common Divisor
with Euclid's Algorithm
}
var
a,b,uit : integer;
begin
a := aa; b := bb;
if b = 0 then uit := a
else uit := GGD(b,a mod b);
GGD := uit;
end;
function vereenvoudig(f : breuk) : breuk;
{
Simplify
}
var
h : breuk;
deler : integer;
begin
h := f;
deler := GGD(h.teller,h.noemer);
h.teller := h.teller div deler;
h.noemer := h.noemer div deler;
vereenvoudig := h;
end;
function plus(a,b : breuk) : breuk;
{
a + b
}
var
h : breuk;
begin
h.noemer := a.noemer * b.noemer;
h.teller := a.teller * b.noemer + b.teller * a.noemer;
plus := vereenvoudig(h);
end;
function minus(a,b : breuk) : breuk;
{
a - b
}
var
h : breuk;
begin
h.noemer := a.noemer * b.noemer;
h.teller := a.teller * b.noemer - b.teller * a.noemer;
minus := vereenvoudig(h);
end;
function maal(a,b : breuk) : breuk;
{
a * b
}
var
h : breuk;
begin
h.noemer := a.noemer * b.noemer;
h.teller := a.teller * b.teller;
maal := vereenvoudig(h);
end;
function deel(a,b : breuk) : breuk;
{
a / b
}
var
h : breuk;
begin
h.noemer := a.noemer * b.teller;
h.teller := a.teller * b.noemer;
deel := vereenvoudig(h);
end;
function gelijk(a,b : breuk) : boolean; { equality }
{
Equality
}
var
p,q : breuk;
begin
p := vereenvoudig(a);
q := vereenvoudig(b);
gelijk := (p.teller = q.teller)
and (p.noemer = q.noemer);
end;
function groter(a,b : breuk) : boolean;
{
Greater
}
var
p,q : breuk;
begin
p := vereenvoudig(a);
q := vereenvoudig(b);
groter := (p.teller*q.noemer > q.teller*p.noemer);
end;
function dubbel(a : breuk) : double;
{
Convert to double precision float
}
begin
dubbel := a.teller/a.noemer;
end;
END.
program test;
Uses breuken;
begin
Writeln(afdruk(plus(maak(1,2),maak(1,3))));
Writeln(afdruk(minus(maak(1,2),maak(1,3))));
Writeln(afdruk(maal(maak(2,3),maak(3,4))));
Writeln(afdruk(deel(maak(2,3),maak(3,4))));
Writeln(groter(maak(1,2),maak(1,3)));
Writeln(groter(maak(1,3),maak(1,2)));
Writeln(gelijk(maak(1,3),maak(9,27)));
end.