program Harmonie; const MAXIMUM : integer = 16; type breuk = record { fraction } t,n : integer; end; function let(a,b : integer) : breuk; { a/b } var c : breuk; begin c.t := a; c.n := b; let := c; 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 simpel(x : breuk) : breuk; { Simplify } var c : breuk; d : integer; begin c := x; d := GGD(c.t,c.n); c.t := c.t div d; c.n := c.n div d; simpel := c; end; function plus(a,b : breuk) : breuk; { a + b } var c : breuk; begin c.t := a.t*b.n + b.t*a.n; c.n := a.n * b.n; plus := c; end; function maal(a,b : breuk) : breuk; { a * b } var c : breuk; begin c.t := a.t*b.t; c.n := a.n*b.n; maal := c; end; procedure druk(c : breuk); { Print } begin Writeln(c.t,'/',c.n,' = ',c.t/c.n); end; procedure itereer(n : integer; x : breuk); { Cantilever } begin if n > MAXIMUM then Exit; druk(x); x := simpel(plus(x,let(1,n+1))); itereer(n+1,x); end; procedure test; { Test } begin itereer(0,let(0,1)); end; begin test; end.