Tentamen 1e kan ingenieur-architekten
11 januari 2002
Opgave
Definieer een type boom met de eigenschappen hoogte, dikte, x en y,
deze gaan we gebruiken om een boom te tekenen met behulp van een rechthoek
en een ellips:
De Modula-2 rechthoek procedure is als volgt gedefinieerd:
PROCEDURE Rectangle (x0, y0, x1, y1 :CARDINAL;
Color :CARDINAL; Fill :BOOLEAN);
met x0,y0 de coordinaten van de linkerbovenhoek en x1, y1 de coordinaten
van de rechterbenedenhoek.
De Modula-2 ellips procedure is als volgt gedefinieerd:
PROCEDURE Ellipse ( x0,y0:CARDINAL;
-- center
a,b :CARDINAL; -- semi-axes
c :CARDINAL; -- color
fill :BOOLEAN ); -- whether filled
Start met dit programmaskelet (deze staat ook hier Bomen.mod):
<* WOFF + *>
MODULE Bomen;
FROM IO IMPORT RdChar, WrChar, WrStr, RdStr, WrLn, RdKey,
RdLn, RdCard, WrCard, RdInt, WrInt, RdReal, WrReal;
FROM Graph IMPORT Init, Rectangle, Ellipse;
FROM Graph IMPORT _clrBROWN, _clrWHITE, _clrGRAY, _clrLIGHTBLUE,
_clrGREEN;
CONST AANTAL = 10;
TYPE
(* 1. maak type BoomRc *)
PROCEDURE TekenBoom(boom: BoomRc);
BEGIN
(* 1 teken de gegeven boom *)
END TekenBoom;
(* 4 bereken boomvolume procedure *)
VAR
x:CHAR;
boom: BoomRc;
i, j: CARDINAL;
BEGIN
IF NOT Init(1, 1, 600, 600) THEN
WrStr("Sorry, graphics doesn't work");WrLn;
RETURN;
END;
(* 2 teken een boom in het midden van het scherm *)
boom.dikte := 30;
(* 3 teken een bos met een dubbele lus *)
WrStr("Press any key to finish the program");
x := RdKey(); WrLn; RdLn;
END Bomen.
Gevraagd:
-
Definieer het type BoomRc en schrijf de TekenBoom procedure die een boom
tekent, kleur de rechthoek (_clrBROWN) bruin en de ellips groen
(_clrGREEN)
-
Teken een boom (dikte 30, hoogte 100) in het midden van het scherm (x=300,
y=350), dan bekom je dit:
-
Teken een heel bos van 10 bomen op 10 bomen, telkens met 50 eenheden tussen.
De dikte van de bomen is 5 en de hoogte 20. Gebruik de gegeven constante
AANTAL in je oplossing voor het aantal rijen en kolommen.
-
Maak een procedure die het volume van een boom berekent en als volgt naar
het scherm schrijft:
Boom: volume hout = 50 en volume groen = 20
Bereken het volume hout als dikte/2*dikte/2*3*hoogte/2 (3 is een afgeronde
Pi)
Bereken het volume groen als a*a*b (grove benadering)
Roep deze procedure dan op telkens als je een boom tekent.
-
Extra vraag: verander bovenstaande procedure zodat deze het volume teruggeeft.
Bereken dan in het hoofdprogramma het totaal volume hout van alle getekenden
bomen.