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.