TI-Basic: Programma voor vierkantsvergelijking en uitbreiden
Wat is een vierkantsvergelijking? Als leerling zal je het wel geweten hebben. Je kan heel makkelijk een programma maken op je rekenmachine om de discriminant en de wortels te berekenen. Degenen die een sjieker programma willen maken, kunnen hier allemaal verbeteringen terugvinden en zelfs gebruiken in andere programma's!
TI-Basic: Vierkantsvergelijking
Wat is een vierkantsvergelijking?
Een vierkantsvergelijking is een lang woord, daarom zal ik vkv gebruiken... Een vkv is een tweedegraadsvergelijking (bv. y=x²+3x-10), maar de y-waarde is altijd 0 (bv. 0=x²+3x-10) - een functie met vergelijking y=0, valt samen met de x-as. Door middel van de discriminant (b²-4ac), kunnen we de snijpunten van de functie met de x-as berekenen. Als de dicriminant negatief is zijn er geen snijpunten. Als hij 0 is, is er één oplossing voor x. In het geval dat de discriminant groter is dan 0, zijn er twee oplossingen of wortels.
| Algemeen | TI-Basic | Voorbeeld |
Vergelijking | y=ax²+bx+c | y=AX²+BX+C | y=x²+3x-10 |
Vkv | 0=ax²+bx+c | 0=AX²+BX+C | 0=x²+3x-10 |
Discriminant | d=b²-4ac | B²-4AD->D | 49 |
Wortel 1 (E) | -b+v(d)/(2a) | (-B-v(D))/(2A)->E | -5 |
Wortel 2 (F) | -b+v(d)/(2a) | (-B+v(D))/(2A)->F | 2 |
prgmVKV Simpel
(Een degelijk programma bestaat uit drie delen: Invoer, Verwerking, Uitvoer.)
Eerst maken we een simpel programmaatje waarmee we een vkv kunnen in voeren: (invoer)
:Prompt A,B,C
Dan berekenen we de discriminant en de wortels: (verwerking)
:B²-4AC->D
:(-B+v(D))/2/A->E
:(-B-v(D))/2/A->F
Tenslotte laten we de resultaten zien op het scherm:(uitvoer)
:Disp "DISCR",D,"WORTELS",E,F
Het totaal:
:Prompt A,B,C
:B²-4AC->D
:(-B+v(D))/2/A->E
:(-B-v(D))/2/A->F
:Disp "DISCR",D,"WORTELS",E,F
Grootte: 94
prgmVKV Uitbreiden
Nu gaan we het programma wat uitbreiden, we beginnen bij de invoer.
We maken de user(degene die het programma gebruikt) duidelijk wat hij moet invullen:
:Disp "AX²+BX+C=0"
:Prompt A,B,C
Om het wat mooier te maken:
:Disp "AX²+BX+C=0"
:Input "A: ",A
:Input "B: ",B
:Input "C: ",C
Het invoergedeelte is klaar, dus we gaan over op de verwerking. Stel je voor: een vkv heeft een negatieve discriminant, dus kan hij ook geen wortels hebben. Maar als we een negatieve discriminant hebben, zal het programma stoppen bij:
:(-B+v(D))/2/A->E
Waarom? Omdat de vierkantswortel van een negatief getal - hier is dit D - niet bestaat. We kunnen dit oplossen door te vragen of D kleiner is dan 0, we doen dit zo:
...
:B²-4AC->D
:If D<0
:Stop
:Disp "DISCR",D,"WORTELS",E,F
Nu weet de user wel de discriminant niet, dus:
...
:B²-4AC->D
:Disp "DISCR",D
:If D<0
:Stop
:(-B+v(D))/2/A->E
:(-B-v(D))/2/A->F
:Disp "WORTELS",E,F
Dit is al een hele verbetering: bij elke invoer zal de discriminant getoond worden, als hij positief of 0 is komen de wortels er ook bij. We creëren nog een situatie en zetten alle situaties eens apart:
...
:B²-4AC->D
:If D<0
:Then
:Disp "DISCR",D
:Stop
:End
:(-B+v(D))/2/A->E
:(-B-v(D))/2/A->F
:If D=0
:Then
:Disp "DISCR",D,"DE WORTEL",E
:Stop
:End
:Disp "DISCR",D,"DE WORTELS",E,F
De verwerking is in drie situaties opgedeeld: D<0, D=0, iets anders (Dus: D>0). We kunnen de uitvoer nu uitbreiden:
...
:Disp "DISCR IS NEG:",D,"","DIT BETEKENT:","GEEN WORTELS..."
...
:Disp "DISCR = 0","DE WORTEL",E
...
:Disp "DISCR",D,"TWEE WORTELS",E,F
Elke keer het programma uitgevoerd is komt er rechts 'Done' te staan, die gaan we wegwerken:
...
:Disp "DISCR IS NEG:",D,"","DIT BETEKENT:","GEEN WORTELS..."
:Output(1,1,"")
...
:Disp "DISCR = 0","DE WORTEL",E
:Output(1,1,"")
...
:Disp "DISCR",D,"TWEE WORTELS",E,F
:Output(1,1,"")
Voor degenen die er niet genoeg van kunne krijgen, we zetten alles nog eens om in breuken:
...
:Disp "DISCR IS NEG:",D,D>Frac"","DIT BETEKENT:","GEEN WORTELS..."
:Output(1,1,"")
...
:Disp "DISCR = 0","DE WORTEL",E,E>Frac
:Output(1,1,"")
...
:Disp "DISCR",D,"TWEE WORTELS",E,E>Frac,F,F>Frac
:Output(1,1,"")
Zo hebben we het wel gehad.
prgmVKV Uitgebreid
Nu we het hebben uitgebreid, zetten we het allemaal eens achter elkaar: (Een Clrhome in het begin is wel handig)
:Clrhome
:Disp "AX²+BX+C=0"
:Input "A: ",A
:Input "B: ",B
:Input "C: ",C
:B²-4AC->D
:If D<0
:Then
:Disp "DISCR IS NEG:",D,D>Frac"","DIT BETEKENT:","GEEN WORTELS..."
:Output(1,1,"")
:Stop
:End
:(-B+v(D))/2/A->E
:(-B-v(D))/2/A->F
:If D=0
:Then
:Disp "DISCR = 0","DE WORTEL",E,E>Frac
:Output(1,1,"")
:Stop
:End
:Disp "DISCR",D,"TWEE WORTELS",E,E>Frac,F,F>Frac
:Output(1,1,"")
Grootte: 393
Dit is nog een beetje 'onprofessioneel' omdat elke situatie helemaal apart staat, een beetje snoeien en een paar ingrepen:
:Clrhome
:Disp "AX²+BX+C=0"
:Input "A: ",A
:Input "B: ",B
:Input "C: ",C
:B²-4AC->D
:Disp "D",D,D>Frac
:If D<0
:Then
:Disp "DUS GEEN WORTELS"
:Else
:(-B+v(D))/2/A->E
:(-B-v(D))/2/A->F
:If D=0
:Disp "WORTEL",E,E>Frac
:If D>0
:Disp "WORTELS",E,E>Frac,F,F>Frac
:End
:Output(1,1,"")
Grootte: 296
Zo spaar ik bijna 100 bytes!
Hierbij hoop ik iedereen veel bijgeleerd te hebben. Nog veel succes met het schrijven van programma's!