informaticaI_commentaar_opl - martenserver.com

advertisement
Tips ’n Hints gathered of the solutions by Marten
Labo 1
// Elke inleesopdracht ('cin >>') zal één ononderbroken aaneenschakeling van karaktertekens inlezen.
Zulke reeks eindigt bij een witlijn of een spatie.
// let op de naamgeving! Hulpvariabelen gebruiken mag, maar geef ze dan goedgekozen namen: 'som'
en 'product'; niet 'c' en 'd'.
// conventie: noteer constanten in hoofdletters en declareer ze bovenaan het programma (eentje per
regel; dat past makkelijkst aan).
Bv. const double PI = 3.1416;
const double G = 9.8;
// je mag de variabelen ook allemaal bovenaan declareren; dat maakt de berekeningen zelf iets
overzichtelijker. En er misschien voor opteren om EERST alles te berekenen, DAN pas alles
uitschrijven? Vergelijk zelf de leesbaarheid !
// Gebruik Horner voor veeltermen in plaats van: 1 + 2*x + 3*x*x + 4*x*x*x + ...
Bv. Voor 1+2x+3x2+4x3+5x4+6x5 gebruikt men
((((6*x + 5)*x + 4)*x + 3)*x + 2)*x + 1
// laat genoeg spaties in de formule, zodat je het haakjespatroon kan controleren. Of: gebruik (zuinig)
hulpvariabelen.
Bv. Bij sqrt( ( (3*x+y)*(3*x+y) + (x-2*y)*(x-2*y) ) / (x*x+y*y) )
a = 3*x+y en b = x-2*y
// Bewerkingen met getallen NIET uitwerken! want dat is niet herkenbaar voor collega's!
Bv. dagen = sec/(24*60*60)
Labo 2
// De onderverdeling van een while lus bevat 4 delen;
Bv. int v = 11;
// DEEL 1 : item klaarzetten
while (v <= 150) {
// DEEL 2 : testen op item
cout << v << endl;
// DEEL 3 : verwerken
v = v + 11;
// DEEL 4 : item opnieuw klaarzetten
}
// Van zodra je constanten kent, gebruik je die best!
// Var1+=10 is hetzelfde als Var1=Var1+10. ZO is ook Var1++ hetzelfde als Var1=Var1+1 oftewel
Var1+=1.
// Je kan >, <, ==, <=, >=, !=, … ook gebruiken met letters en tekens.
Bv.
cin >> karakter;
// lees iets in
while(karakter < 'a' || karakter > 'z'){ // zorg dat dat 'iets'
cin >> karakter;
// een kleine
}
// letter is
// Dergelijke oefeningen (met 'cijferrekenen') komen dikwijls voor op testen!!
Bv. Lees een positief geheel getal in en tel op hoeveel tweeën het eindigt.
int main(){
int getal,aantal=0;
cout<<"Geef een strikt positief geheel getal in:"<<endl;
cin>>getal;
while(getal<=0){
cout<<">0 graag: "<<endl;
cin>>getal;
}
while(getal%10==2){
aantal=aantal+1;
getal=getal/10;
}
cout<<"Dit getal eindigt op "<<aantal<<" tweeen."<<endl;
return 0;
}
Bij cijferrekenen GEEN aftrekkingen of vermenigvuldigen toegelaten!
(Het kan nl. efficiënter zonder.)
merk op:
(123-3)/ 10 = 12
maar ook 123 / 10 = 12
// Men gebruikt enkel aantal=aantal+1, aantal+=1 of aantal++ (maar niet aantal=aantal++).
Labo 3
// Merk op! Als je met reele getallen werkt, zou je misschien beter nagaan of de waarde bv. Bij het
berekenen van punten in een vlak of 4*x + 5*y - 6*z ONGEVEER gelijk is aan 8. Want
afrondingsfouten kunnen er altijd zijn. Je test wordt dan:
if (abs(4*x + 5*y - 6*z - 8) < EPSILON) ...
waarbij EPSILON een constante is met een zeer kleine waarde, bvb.
const double EPSILON = 0.00004
// Als er 6 verschillende gevallen (if, else, else, else, …) mogelijk zijn, moet je maar 5 keer op
(on)gelijkheden testen.
// Als je gegevens opvraagt met lussen en je hebt een maximum aantal, gebruik je best een
hulpvariabele dat het aantal keer dat een getal wordt GEVRAAGD telt zodat de lus er maximaal x
aantal VRAAGT. verwerking van het laatste moet misschien nog apart gebeuren.
Labo 4
// Het levert je meer op om 1 oefening zelf te proberen maken, dan om er 10 te lezen.
PLUS: bij elke oplossing die je leest, beneem je jezelf de kans om die denkstappen in te oefenen die je
ook zal moeten zetten op de test. Houd daar rekening mee als je dit bestand doorneemt. Lees geen
enkele oplossing waarvan je de opgave niet hebt gelezen en waarop je niet minstens twintig minuten
(geconcentreerd) gezocht hebt.
Download