Programmeren in TI-Basic/Controlestructuren
Als je programmeert dan moet je dingen controleren. Als je bijvoorbeeld een wachtwoordprogrammaatje maakt, dan moet je controleren of het wachtwoord goed is. Als je wilt dat mensen het wachtwoord meerdere keren kunnen invoeren heb je herhalingen nodig, zogenoemde loops. In dit hoofdstuk gaan we een programmaatje maken dat een text laat zien als je het wachtwoord hebt ingevoerd. Je moet het wachtwoord ook kunnen veranderen in het programma. Het wachtwoord zullen we opslaan in een lijst. We beginnen dus met het laden van de lijst.
PROGRAM:PASS :1→dim(LPASS :Input "WACHTWOORD:",A
If
bewerkenHet if commando wordt gebruikt om te kijken of dingen waar zijn, hiervoor gebruik je de TEST tekens: =, ≠, >, ≥, <, ≤. Dit is de syntax:
:If waarde van 1 of 0 :commando om uit te voeren
of
:If waarde van 1 of 0 :Then :commando :commando :End
of
:If waarde van 1 of 0 :Then :commando :commando :Else :commando :commando :End
Als er geen Then na een If komt, wordt alleen het commando achter de If uitgevoerd als de waarde 1 is. Als er een Then na de If komt wordt alles van de Then tot de End of Else uitgevoerd als de waarde 1 is. Als er een Else na Then komt, dan wordt alles na de Else en tot de End uitgevoerd als de waarde 0 is. Een voorbeeld:
:Input A :If A=2 :Then :Disp "A = 2 :Else :Disp "A ≠ 2 :End
Als A=2, dan wordt het eerste uitgevoerd, als A≠2, dan wordt alles van else tot end uitgevoerd.
TEST
bewerkenHieronder staat een beschrijving van de tekens.
=
bewerkenDit kijkt of twee waardes hetzelfde zijn.
2 = 2
≠
bewerkenDit kijkt of twee waardes niet hetzelfde zijn.
2 ≠ 3
>
bewerkenDit kijkt of de eerste waarde groter is dan de tweede waarde.
2 > 1
≥
bewerkenDit kijkt of de eerste waarde groter of gelijk is aan de tweede waarde.
2 ≥ 1
2 ≥ 2
<
bewerkenDit kijkt of de eerste waarde kleiner is dan de tweede waarde.
2 < 3
≤
bewerkenDit kijkt of de eerste waarde kleiner of gelijk is aan de tweede waarde.
2 ≤ 3
2 ≤ 2
We kunnen nu verder met ons programma omdat we nu kunnen kijken of het wachtwoord dat de gebruiker heeft ingevoerd klopt met wat er in de lijst staat.
PROGRAM:PASS :1→dim(LPASS :Input "WACHTWOORD:",A :If A≠LPASS(1 :Then :Disp "FOUT WACHTWOORD." :Return :End :Disp "GEFELICITEERD!"
Stop
bewerkenStop wordt gebruikt om het programma te stoppen. Het programma gaat niet terug naar het programma waarmee het is gestart, maar stopt helemaal.
Return
bewerkenReturn is de beste manier om een programma te stoppen. Het programma waarmee jouw programma is gestart gaat dan gewoon verder met waar het mee bezig was. Dit wordt ook vaak gebruikt bij routines (subprogramma's).
Het programma controleert nu of het wachtwoord goed is, maar doet er verder nog niets mee, het wachtwoord is altijd 0. We moeten nu nog iets maken waarmee je het wachtwoord kan veranderen. Dit kunnen we weer doen met een Input en een If.
PROGRAM:PASS :1→dim(LPASS :Input "WACHTWOORD:",A :If A≠LPASS(1 :Then :Disp "FOUT WACHTWOORD. :Return :End :Disp "GEFELICITEERD! :Disp "WACHTWOORD VERANDEREN? :Input "1 = JA: ",B :If B :Then :Input "NIEUW WACHTWOORD:",C :C→LPASS(1 :Disp "W8W VERANDERD :End
Loops
bewerkenAls iemand een verkeerd wachtwoord heeft ingevoerd, dan wil je dat hij het wachtwoord opnieuw moet invoeren tot hij het goede wachtwoord heeft. Dit kan je doen met een loop. Hieronder staan de manieren om te loopen.
While
bewerkenDe While loop lijkt een beetje op de If. Als de waarde 1 is dan blijft hij lopen, zo niet, dan slaat hij het over en gaat verder in het programma. De syntax van het While commando is:
:While waarde :commandos :commandos :End
Zo kun je het programma dus aanpassen zodat hij blijft lopen tot hij het goede wachtwoord heeft:
PROGRAM:PASS :1→dim(LPASS :DelVar A :Input "WACHTWOORD:",A :While A≠LPASS(1 :Disp "FOUT WACHTWOORD. :Input "WACHTWOORD:",A :End :Disp "GEFELICITEERD! :Disp "W8W VERANDEREN? :Input "1 = JA: ",B :If B :Then :Input "NIEUW W8W:",C :C→LPASS(1 :Disp "W8W VERANDERD :End
Repeat
bewerkenRepeat is eigenlijk het omgekeerde van While, hij blijft loopen tot de waarde 1 is. Hij gaat dus verder bij 0. Een Repeat loop wordt ook pas bij de end gecontroleerd en dus wordt het ook minstens 1 keer uitgevoerd. Een versie van ons programma met Repeat zou dus zijn:
PROGRAM:PASS :1→dim(LPASS :Input "WACHTWOORD:",A :Repeat A=LPASS(1 :Disp "FOUT WACHTWOORD. :Input "WACHTWOORD:",A :End :Disp "GEFELICITEERD! :Disp "W8W VERANDEREN? :Input "1 = JA: ",B :If B :Then :Input "NIEUW W8W:",C :C→LPASS(1 :Disp "W8W VERANDERD :End
For
bewerkenFor is een aparte manier van loopen. Hij loopt namelijk maar een paar keer. Je voert een variable in en stelt in van waar tot waar hij moet tellen. De syntax is:
:For(variable,van,tot,stapgrootte (als je niets invult wordt de waarde 1) :commandos :commandos :End
Zo kun je er dus voor zorgen dat je het wachtwoord maar een paar keer in kan voeren. Dit is veel beter, omdat het programma daarna weer kan stoppen. De nieuwe versie van het programma wordt dan:
PROGRAM:PASS :1→dim(LPASS :For(Z,1,5 (Het prgmtje kan vijf keer herhalen) :Input "WACHTWOORD:",A (het prgmtje vraagt naar je wachtwoord) :If A≠LPASS(1 (is deze niet gelijk aan het opgegeven wachtwoord?) :Then :Disp "FOUT WACHTWOORD. (Als de stelling waar is (ww fout) voert de TI dit uit) :Else (Anders... is het wachtwoord wel goed, dus voert hij deze uit) :Disp "GEFELICITEERD! (dit wordt dus niet uitgevoerd als de stelling goed is) :Disp "W8W VERANDEREN? (dan gaat het prgmtje door naar end ) :Input "1 = JA: ",B :If B (Boolean methode. Als waar = 1, als niet waar = 0.) :Then :Input "NIEUW W8W:",C (wachtwoord wordt ingevoerd (in cijfers)) :C→LPASS(1 (wordt opgeslagen in een lijst (ook in cijfers)) :Disp "W8W VERANDERD :End (Het stuk van ww veranderen wordt hier afgesloten) :Stop (Sluit het prgmtje af (alleen als het ww goed was)) :End (Else tot End wordt afgesloten) :End (De For() loop wordt hier afgesloten. Na 5x gaat het prgmtje niet terug) Opmerking: De waarde van Z wordt steeds veranderd.
Labels
bewerkenAls je het wachtwoord hebt veranderd wil je dat ze het nieuwe wachtwoord meteen uitproberen. Dit kan je doen door naar een bepaalde plek in het programma te springen met een functie. Deze functie heet Goto. Voordat je een Goto gebruikt moet je eerst een Lbl in je programma hebben gezet. Gebruik labels zo min mogelijk, ze zijn langzaam en je hebt kans op fouten. Probeer dus zo veel mogelijk loops te gebruiken. De enige plek waar je labels zonder veel problemen kunt gebruiken zijn bij menus.
Lbl
bewerkenDe Lbl functie doet op zich niets, het geeft alleen een plek in het programma weer. Goto kan alleen naar die labels springen. Labels hebben een naam die maximaal 2 tekens kan zijn en alleen de letters + θ en getallen. De syntax is:
:Lbl naam
Goto
bewerkenDe Goto functie kan naar labels springen in het programma. Doe dit alleen niet tijdens loops, alleen als je er zeker van bent dat er geen End meer achter komt, bijvoorbeeld bij het einde van het programma. Anders heb je kans dat hij weer terugspringt naar de loop. De syntax is:
:Goto label
Als we een programma willen hebben die na het veranderen van het wachtwoord weer terugspringt naar het begin kunnen we het zo doen:
PROGRAM:PASS :1→dim(LPASS :Lbl ST :DelVar A :Repeat A=LPASS(1 :Disp "FOUT WACHTWOORD. :Input "WACHTWOORD:",A :End :Disp "GEFELICITEERD! :Disp "W8W VERANDEREN? :Input "1 = JA: ",B :If B :Then :Input "NIEUW W8W:",C :C→LPASS(1 :Disp "W8W VERANDERD :Goto ST :End