TOPIC C: Boolean, real, conversion
Contents :
BOOLEAN, TRUE, FALSE, REAL, /, SQRT, VAL, RdBool,
WrBool, RdReal, WrReal, WrFixReal.
Exercises :
S1: Interpoleren
Start met deze code. Een
z-array wordt gedefinieerd en half gevuld. Er wordt 1 kubus getekend.
- Maak een x-array
die even groot is als z en vul het met de veelvouden van 15 waarbij je
100 optelt.
- Bij de array z mankeren de waarden voor de even indexen!
Bereken deze door interpolatie: neem het gemiddelde van de 2 aanliggende waarden.
- Teken 25 kubussen. Gebruik de elementen van de x-array als
x-coordinaat en die van de z-array als z. Gebruik Y0 als y-coordinaat. Neem als
grootte 8.
- Verbind de opeenvolgende punten met een (dikke) lijn.
- Verbind met een (dikke) lijn de opeenvolgende punten met de
gegeven kubus die op (X0, Y0, Z0) staat.
T1
- Ga na op papier hoeveel maal de lijn "x := 1;"
wordt
uitgevoerd bij het runnen van dit programma? Ik wil een getal + een
bondige
verklaring voor dit resultaat.
- Check daarna uw oplossing door het programma te runnen en het
aantal iteraties te tellen!
MODULE T1;
<* NOOPTIMIZE + *>
FROM IO IMPORT WrStr, WrLn, WrInt, WrChar, WrCard, WrReal;
CONST MAX = 6;
VAR
i, j, x: CARDINAL;
BEGIN
WrLn;
i := MAX;
REPEAT
FOR j := (i * 2) TO 1 BY -2 DO
x := 1; (*** hoeveel malen wordt dit
uitgevoerd??
***)
END;
i := i - 2;
UNTIL (i = 2);
END T1.
S2: Toren bouwen.
Start met deze
begincode en
JJ3D (de
files
van de zip-file moeten in dezelfde map als je code staan). Zie ook de
documentatie over JJ3D.
We wensen een toren van minimaal 5m te bouwen door het
opstapelen van
kubussen. Neem 1 meter = 100
pixels. We hebben hiervoor de constante HOOGTE gemaakt.
De onderste kubus heeft een ribbe van 2m, de volgende kubussen
zijn telkens 2/3 kleiner.
opgelet: als je 1m als CARDINAL
of INTEGER schrijft, in
centimeters bvb, dan geeft 2/3*... of ...*(2/3)
problemen,
immers wordt 2/3 = 0.666 afgerond tot 0.
Beter doe je daarom ...*2/3.
Ambetante
Modula
Toch..
Stapel de kubussen opeen tot je toren net hoger is dan 5m.
tip: bereken telkens opnieuw de
'grond' voor de volgende kubus en de nieuwe grootte.
Teken de kubussen mbv de Cube procedure.
Hoeveel kubussen heb je nodig? Print de waarde.
Extra vraag: wat moet je
veranderen als de toren net niet hoger mag zijn dag 5 meter.
S3: Van cirkel via spiraal tot trap
In de gegeven
code zie je hoe graden in radialen wordt omgezet.
1. Vul 2 arrays met de punten van een
cirkel (x en y-coordinaat respectievelijk). De x-coordinaat is x0
+
r * cos(t), de y-coordinaat is y0
+
r * sin(t).
De hoek tussen 2 punten is
een parameter. Teken alle punten met z-coordinaat 0.
2. Verbind de punten.
3. Maak een derde array met de z-coordinaten. Vul die met de veelvouden
van een bepaalde parameter. Gebruik z dan om de punten in de z-dimensie
te tekenen.
4. Verbind de punten met de centrale as (gedefinieerd door x0, y0).
5. Maak er een trap van.
6. Teken de trap trede per trede: voeg een Delay toe na het tekenen van
elke trede. Vergeet ook niet DrawAllFigures()
op te roepen.
S4: Verbonden
Start met deze begincode en JJ3D.
- Je krijgt 8 punten gedefinieerd in 3 arrays, 1 array voor de
x-waarden, 1 voor de y-waarden en 1 voor de z-waarden:
x[1] := 201;
y[1] := 60; z[1] := 100;
x[2] := 401; y[2] := 60; z[2] := 100;
x[3] := 542; y[3] := 201; z[3] := 100;
x[4] := 542; y[4] := 401; z[4] := 100;
x[5] := 401; y[5] := 542; z[5] := 100;
x[6] := 201; y[6] := 542; z[6] := 100;
x[7] := 60; y[7] := 401; z[7] := 100;
x[8] := 60; y[8] := 201; z[8] := 100;
- Teken een kubus van grootte 10 in elk punt. De definitie van de Cube procedure vind je hier.
- Verbind alle punten met een lijn: punt 1 met punt 2, punt 2 met
punt 3, ... en het laatste punt met het eerste.
- Maak gebruik van de procedure ThickLine, daarmee kan je ook
een
dikte aan de lijn toevoegen. De definitie van de procedure vind je hier.
- Verbind de punten ook met punt (300,300, 700), maar in een andere
kleur en een dunnere lijn.
S5: Interpoleren II
De volgende 3 arrays zijn onvolledig. Start met 3D-code (vind je hier
bvb: ) en zet
de
volgende code NA BEGIN:
z1[1] :=
50; z1[3] :=
103; z1[5] :=
161; z1[7] := 201;
z1[9] := 286;
z1[11] := 335;
z1[13] := 323;
z1[15] := 279;
z1[17] := 225;
z1[19] := 169; z1[21] :=
131; z1[23] := 178;
z1[25] := 209;
z1[27] := 246; z1[29] :=
299;
z2[1] := 15;
z2[3] :=066;
z2[5] := 105;
z2[7] := 155;
z2[9] := 205;
z2[11] := 242;
z2[13] := 231;
z2[15] := 203;
z2[17] := 155;
z2[19] := 130; z2[21] :=
101; z2[23] := 135;
z2[25] := 179;
z2[27] := 189; z2[29] :=
208;
z3[1] := 54;
z3[3] := 113;
z3[5] := 157;
z3[7] := 195;
z3[9] := 256;
z3[11] := 325;
z3[13] := 326;
z3[15] := 285;
z3[17] := 234;
z3[19] := 189; z3[21] :=
138; z3[23] := 183;
z3[25] := 229;
z3[27] := 236; z3[29] := 285;
- De waarden voor de even index's mankeren!
Bereken deze door interpolatie: neem het gemiddelde van de 2 aanliggende waarden.
- Maak een y-array
met de veelvouden van de constante DY die je definieert met waarde
15.
- Gebruik de 3 arrays om 3 rijen van kubusjes te tekenen. De 3
arrays geven de z-coordinaat, de y-coordinaat is gegeven door zonet de
gedefinieerde array. Definieer 3 constantes X1, X2 en X3 voor de
x-coordinaat van de rijen. Geef ze waarden 100, 200, 300.
- Verbind (met een rechte) elk punt van rij 1 met 3 punten van rij
2: met de vorige, dezelfde en met het volgende punt. Doe hetzelfde voor
rij 3 en rij 1.
H1: Interest.
- Write a program to compute the compound interest on a deposit.
The
principal amount P, interest rate i and the number of years n should
all
be read in from the keyboard.
- The formula for compound interest is:
A = P.(1 + i)^n
- A gives you the amount after n years.
- Show the growth of the amount P for n years. Print the amount
for
each year:
P = 100 euro, the intrest = 5%.
Year 1: 105 euro
Year 2: 110,5 euro
...
- Calculate after how many years your initial amount P has doubled!