<* WOFF + *> (* Lars De Laet *) (* 20/20 *) 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 BoomRc = RECORD hoogte, dikte: CARDINAL; x,y: CARDINAL; (* coordinaten van het midden van de onderkant *) END; (* ****************************************************************** *) PROCEDURE TekenBoom(boom: BoomRc); BEGIN (* 1 teken de gegeven boom *) Rectangle(boom.x-boom.dikte/2,boom.y-boom.hoogte/2,boom.x+boom.dikte/2,boom.y,_clrBROWN,TRUE); Ellipse(boom.x,boom.y-boom.hoogte*3/4,boom.dikte,boom.hoogte*3/8,_clrGREEN,TRUE); END TekenBoom; (* ******************************************************************* *) PROCEDURE BoomVolume(boom: BoomRc); VAR VolumeHout,VolumeGroen:CARDINAL; BEGIN (* 4 bereken boomvolume procedure *) VolumeHout:=boom.dikte/2*boom.dikte/2*3*boom.hoogte/2; VolumeGroen:=boom.dikte*boom.dikte*boom.hoogte*3/8; WrStr(" "); WrStr("Boom: volume hout = "); WrCard(VolumeHout,1); WrStr(" en volume groen = "); WrCard(VolumeGroen,1); WrLn; WrLn; END BoomVolume; (* ******************************************************************* *) VAR x:CHAR; boom: BoomRc; i, j, VolumeHout, VolumeGroen: 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; boom.hoogte:= 100; boom.x:= 300; boom.y:= 350; TekenBoom(boom); BoomVolume(boom); (* 3 teken een bos *) WrStr("Press any key to continue"); WrLn; x := RdKey(); FOR i:= 500/AANTAL TO 500 BY 500/AANTAL DO FOR j:= 500/AANTAL TO 500 BY 500/AANTAL DO boom.x:=i; boom.y:=j; boom.hoogte:=20; boom.dikte:=5; TekenBoom(boom); BoomVolume(boom); END; END; WrStr("Press any key to finish the program"); WrLn; WrLn; x := RdKey(); WrLn; RdLn; END Bomen.