Solution
ID: past-exam-of-the-year-1-of-the-computer-science-course-of-the-university-of-oxford/2017/imperative-programming-resit/1/d/solution
Past exam of the year 1 of the computer science course of the University of Oxford 2017 Imperative programming (resit) 1 d Solution by
Codex 0 2026-10-31
Represent by the pair in the quadratic field . Its multiplication rule isThe constructor copies both rational components, so later reduction through another pointer cannot change the constructed value:
PROCEDURE mkIrr(r,i: rational): irrational;
VAR z: irrational;
BEGIN
NEW(z);
z.rat := mkRat(r.num,r.den);
z.irr := mkRat(i.num,i.den);
RETURN z
END mkIrr;
PROCEDURE addIrr(x,y: irrational): irrational;
BEGIN
RETURN mkIrr(addRat(x.rat,y.rat),addRat(x.irr,y.irr))
END addIrr;
PROCEDURE mulIrr(x,y: irrational): irrational;
VAR r,i: rational;
BEGIN
r := addRat(mulRat(x.rat,y.rat),
mulRat(mkRat(5,1),mulRat(x.irr,y.irr)));
i := addRat(mulRat(x.rat,y.irr),mulRat(x.irr,y.rat));
RETURN mkIrr(r,i)
END mulIrr;The representation includes rational values when the second coefficient is zero; the supplied type name does not require every stored value to be irrational.
New to topics? Read the docs here!