|
© h.hofstede (h.hofstede@hogeland.nl)
|
|
De ABC-formule |
|
Deze les gaan we een programma
voor de ABC-formule maken.
Misschien denk je dat dat een makkie is, en maak je haastig het volgende
programma: |
|
|
|
|
|
|
|
|
|
Rechts staat jouw
programma, midden en links laat jij mij trots zien dat het inderdaad
werkt!!!!
En toch heb je een fout gemaakt.....
|
Probeer het maar eens
met A = 1, B = 2 en C = 6.
Dan krijg je een foutmelding "NONREAL ANS"
En als je 2:
GOTO indrukt kom je in je programma op de plaats van het
zwarte blokje in de tweede figuur.
Zie je wat er fout is gegaan?
Je wilt de waarde van √(B2 - 4AC)
uitrekenen, maar als dat getal onder die wortel negatief is, dan bestaat
die wortel niet!!!
Weet je het nog? Bij de ABC formule zijn er drie mogelijkheden:
1. D > 0 met twee oplossingen
2. D = 0 met één oplossing
3. D < 0 met geen oplossingen |
|
|
|
|
|
Je wilt natuurlijk
wel graag dat jouw programma met alle drie de mogelijkheden rekening
houdt. Maar dat betekent dat je de gevallen D > 0, D = 0, D < 0
apart moet bekijken: je zult het programma moeten splitsen,
afhankelijk van de waarde van D.
Dat kan met de commando's IF.....THEN...... ELSE......END
Of, iets schematischer: |
|
|
|
|
IF
(A) THEN (B) ELSE (C) END |
|
|
|
|
Hoe werkt het?
• Op de plaats van A kun je een voorwaarde neerzetten
(bijvoorbeeld D > 0)
• Als die voorwaarde klopt dan worden de opdrachten B uitgevoerd
en gaan we naar END
• Als die voorwaarde niet klopt dan worden de opdrachten C
uitgevoerd en gaan we naar END
Laten we nadat we D hebben uitgerekend daarom eerst maar eens testen of
D misschien negatief is, want dan is er geen oplossing. Dat gaat
zo: |
Die "<" bij D < 0 vind je bij
2nd
TEST
5: <
Als de discriminant kleiner dan nul is, dan wordt er de melding "geen
oplossing" gegeven en gaan we naar END.
Tussen Else en End bij die rode pijl komt de rest van het programma, en
daarin weten we dus nu zeker dat de discriminant niet kleiner dan nul
is.
Nou, laten we in die rest van het programma dan nu maar eens testen of de discriminant misschien precies nul is. |
|
|
|
|
Dat is hiernaast gebeurd. Ik stap
even af van de rekenmachineschermpjes om het hele programma wat
overzichtelijker te maken. Bovendien kun je dan door in te
springen beter laten zien welke IF-THEN-ELSE-END bij elkaar horen. Dat
zie je hiernaast weergegeven
Daar bij die rode pijl komt nu de rest van het programma waarvoor we nu
weten dat D > 0 dus dat er twee oplossingen zijn.
|
PROGRAM: ABC
: ClrHome
: Prompt A, B, C
: B^2-4AC →
D
: If D < 0
: Then Disp "geen oplossing"
: Else
: If D = 0
: Then -B/(2A) → X
: Disp "1 oplossing",X
: Else
: ←
: End
: End |
|
|
|
|
|
Hiernaast is ook die rest van het
programma toegevoegd (de twee oplossingen). Merk nog even op dat
door dat inspringen direct duidelijk is welke END bij welke IF THEN ELSE
hoort. Vooral bij erg grote programma's helpt je dat om het overzicht te
behouden.
Nou, dat lijkt zo een mooi compleet programma geworden !
Kan er nog iets fout gaan?
Is er nog iets waarmee we geen rekening hebben gehouden?
Jazeker; het zou kunnen dat één of andere sukkel probeert ons
ABC-formule programma te gebruiken met a = 0. Jij en ik weten dat
het dan een gewone lineaire vergelijking is, maar dat weet die sukkel
kennelijk niet.
|
PROGRAM: ABC
: ClrHome
: Prompt A, B, C
: B^2-4AC →
D
: If D < 0
: Then Disp "geen oplossing"
: Else
: If D = 0
: Then -B/(2A) → X
: Disp "1 oplossing",X
: Else
:
(-B - √(D))/(2A)
→
X
: (-B
+
√(D))/(2A)
→
Y
: Disp
"2 oplossingen", X, Y
: End
: End |
|
|
|
|
|
Daarom zou je kunnen overwegen om
eerst A te laten invoeren en dan even te testen of die niet nul is.
Dat is hiernaast gebeurd.
Nu kan er niets meer misgaan.
☺
(Je zou trouwens kunnen overwegen om in het geval van a = 0 de
lineaire vergelijking ook gewoon op te lossen). |
PROGRAM: ABC
: ClrHome
: Prompt A
: If A = 0
: Then Disp: "een lineaire
vergelijking, sukkel!": STOP
: Else
: Prompt B, C
: B^2-4AC →
D
: If D < 0
: Then Disp "geen oplossing"
: Else
: If D = 0
: Then -B/(2A)
→ X
: Disp "1 oplossing",X
:
Else
:
(-B -
√(D))/(2A)
→
X
: (-B
+ √(D))/(2A)
→
Y
: Disp
"2 oplossingen", X, Y
:
End
: End
: End |
|
Een Stroomdiagram |
|
|
|
Als jouw programma's steeds maar
groter en ingewikkelder worden, dan wil een stroomdiagram
nog wel eens een handig hulpje zijn om de zaken duidelijk te houden.
Hiernaast zie je een stroomdiagram voor het ABC-formule programma dat we
in deze les hebben gemaakt.
Volg de pijlen maar en kijk of je snapt wat er gebeurt!
Bij die blauwe vakken splitst het programma want daar wordt een vraag
gesteld.
Bij die groene vakken is er een uitvoer naar het scherm.
Ik hoop dat je met me eens bent dat dit een mooie overzichtelijke
manier is om de structuur van een programma weer te geven. Nou was dit
nog een vrij makkelijk programma, maar bij erg ingewikkelde programma's
kun je je misschien voorstellen dat zo'n stroomdiagram je helpt om
overzicht te houden. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OPGAVEN |
|
|
|
|
1. |
Pas het ABC-programma hierboven aan zodat ook
lineaire vergelijkingen worden opgelost. |
|
|
|
|
2. |
Schrijf een programma dat drie in te voeren
getallen op volgorde van klein naar groot weer uitvoert. Gebruik
het stroomdiagram hieronder |
|
|
|
|
|
|
|
|
|
|
3. |
Schrijf een programma dat vraagt de drie zijden
van een driehoek in te voeren, en dat daarna onderzoekt of de
driehoek een rechte hoek heeft (bedenk dat een driehoek
rechthoekig is als de stelling van Pythagoras geldt!). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
© h.hofstede (h.hofstede@hogeland.nl)
|