(→Verzweigungen im Bascom) |
(→Siehe auch) |
||
(13 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
== Verzweigungen im Bascom == | == Verzweigungen im Bascom == | ||
+ | Was den Programmablauf betrifft, zeigen weder irgendein Controller noch Bascom eine besonders phantasievolles Verhalten: Es wird mit der (Programmspeicher-) Adresse 0000 begonnen, und dann wird mit aufsteigender Adresse ein Befehl nach dem anderen ausgeführt. Wenn dieser Adresszähler überläuft, springt er wieder auf null, und alles geht von wieder vorne los.<br> | ||
+ | Das ist natürlich nicht das, was man sich unter einem "Programm" vorstellt. Bei einem Programm werden diese oder jene Dinge geprüft, und je nachdem wird entschieden, ob dieses oder jenes zu tun ist. Das heißt, im Programmablauf sollen bedingte Verzweigungen stattfinden, was technisch soviel heißt, daß bei Bedarf in den oben genannten Adress-Zähler einfach die Adresse reingeschrieben wird, wo es weitergehen soll. Das kann natürlich genausogut ein Sprung zurück sein, sprich, die letzten Befehle werden wiederholt. Der Fachmann bezeichnet letzteres als "Programmschleife" und der Über-Fachmann als "Iteration" | ||
+ | Bei den Schleifen gibt es einen großen Unterschied: | ||
+ | *Soll die Bedingung VOR den enthaltenen Anweisungen geprüft werden, | ||
+ | *oder sollen die Anweisungen auf jeden Fall mal gemacht werden und erst danach entschieden werden, ob das Ganze vielleicht wiederholt werden soll. | ||
− | + | Zu dieser letzen Variante gehört der: | |
+ | === Verzweigung: Do-Loop=== | ||
'''Struktur:''' | '''Struktur:''' | ||
Zeile 24: | Zeile 30: | ||
</pre> | </pre> | ||
− | Die Schleife geht so lang zwischen Do und Loop, bis die Bedingung | + | Die Schleife geht so lang zwischen Do und Loop, bis die Bedingung |
− | die hinter Until kommt, richtig ist (= True) | + | die hinter Until kommt, richtig ist (= True). |
− | Die Schleife kann auch vorzeitig mit dem Befehl „ Exit Do“ verlassen werden. | + | Die Schleife kann auch vorzeitig mit dem Befehl „ Exit Do“ verlassen werden. |
− | + | ||
− | + | ||
+ | Do-Loop Schleifen können ineinander geschachtelt werden. | ||
− | |||
− | + | ---- | |
+ | Hier erfolgt die Bedingungsprüfung vorher: | ||
+ | === Verzweigung: While-Wend === | ||
'''Struktur:''' | '''Struktur:''' | ||
Zeile 55: | Zeile 61: | ||
</pre> | </pre> | ||
− | Wenn die Bedingung hinter ‘While’ richtig ist(=True), dann springe in die Schleife. | + | Wenn die Bedingung hinter ‘While’ richtig ist(=True), dann springe in die Schleife. |
− | „Wend“ springt dann wieder zu While, um dort wieder zu überprüfen, | + | „Wend“ springt dann wieder zu While, um dort wieder zu überprüfen, |
− | ob die Bedingung True ist. | + | ob die Bedingung True ist. |
− | Wenn sie True ist, dann Schleife wiederholen. | + | Wenn sie True ist, dann Schleife wiederholen. |
− | Wenn nicht, dann setze Programm hinter „Wend“ fort. | + | Wenn nicht, dann setze Programm hinter „Wend“ fort. |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
+ | While-Wend Schleifen können ineinander verschachtelt werden. | ||
+ | Im Vergleich zur Do-Loop Schleife wird die While-Wend Schleife erst ausgeführt, wenn die Bedingung richtig ist. | ||
---- | ---- | ||
− | + | Die klassische Entweder-oder-Konstruktion: | |
− | + | === Verzweigung: If-Then-Else === | |
'''Struktur:''' | '''Struktur:''' | ||
Zeile 80: | Zeile 84: | ||
</pre> | </pre> | ||
− | ''' | + | |
+ | '''Einfachstes Beispiel:''' | ||
<pre> | <pre> | ||
− | If A= 10 Then A= 100 | + | If A= 10 Then A=100 |
</pre> | </pre> | ||
− | Wenn A=10 dann weise A den Wert 100 zu. | + | Wenn A=10 dann weise A den Wert 100 zu. |
− | Wenn die If-Then Anweisung in eine Zeile geht, dann kann man das so wie obiges Beispiel schreiben. | + | Wenn die If-Then Anweisung in eine Zeile geht, dann kann man das so wie |
− | Mann kann auch hinter Then | + | obiges Beispiel schreiben. |
− | Die müssen aber untereinander durch Doppelpunkt getrennt werden und noch immer in eine Zeile passen. | + | Mann kann auch hinter dem Then, mehrere Anweisungen schreiben. |
+ | Die müssen aber untereinander durch Doppelpunkt getrennt werden | ||
+ | und noch immer in eine Zeile passen. | ||
+ | |||
Für mehrere Anweisung schreibt man aber besser einen IF-Block: | Für mehrere Anweisung schreibt man aber besser einen IF-Block: | ||
− | + | ||
+ | '''IF-Block Beispiel:''' | ||
+ | <pre> | ||
If A= 10 Then | If A= 10 Then | ||
− | + | A = 100 | |
− | + | Print A | |
− | + | Print A | |
End if | End if | ||
+ | </pre> | ||
− | Hier kann man dann unter “Then”, mehrere Anweisung schreiben. Muss diese aber dann mit „End if“ abschließen. | + | Hier kann man dann unter “Then”, mehrere Anweisung schreiben. |
− | (Das einrücken dient nur zum besserem lesen | + | Muss diese aber dann mit „End if“ abschließen. |
− | Ein IF-Block ist übersichtlicher und leichter lesbar. | + | (Das einrücken dient nur zum besserem lesen der Schleife, und trägt nichts zur Funktion bei.) |
+ | Ein IF-Block, ist übersichtlicher und leichter lesbar. | ||
+ | |||
+ | ---- | ||
+ | Oft sind mehr als zwei Möglichkeiten zu bearbeiten | ||
+ | === Verzweigung: select === | ||
+ | |||
+ | '''Struktur:''' | ||
+ | <pre> | ||
+ | SELECT CASE Variable | ||
+ | CASE wert1: | ||
+ | CASE wert2: | ||
+ | CASE ELSE | ||
+ | END SELECT | ||
+ | </pre> | ||
+ | |||
+ | Ist eine numerische Variable mit Inhalt [ 0 - nn] zu prüfen, gibt es auch | ||
+ | === Verzweigung: ON === | ||
+ | '''Struktur:''' | ||
+ | <pre> | ||
+ | ON Variable GOTO Label-0, Label-2, ...... Label-n | ||
+ | End if | ||
+ | </pre> | ||
+ | |||
+ | ---- | ||
+ | Es gibt natürlich auch Verzweigungen, die nicht an eine Bedingung geknüpft sind | ||
+ | === Verzweigung: GOTO === | ||
+ | '''Struktur:''' | ||
+ | <pre> | ||
+ | GOTO Label-0 | ||
+ | </pre> | ||
+ | |||
+ | ---- | ||
+ | Und es können auch Befehle gewissermaßen "eingeschoben" werden | ||
+ | === Verzweigung: GOSUB/RETURN === | ||
+ | '''Struktur:''' | ||
+ | <pre> | ||
+ | ...Anweisung | ||
+ | GOSUB Label-0 | ||
+ | ...Anweisung | ||
+ | |||
+ | Label-0: | ||
+ | ...Anweisung | ||
+ | RETURN | ||
+ | </pre> | ||
+ | ==Autor== | ||
+ | * [[Benutzer:Roberto|Roberto]] | ||
+ | * [[Benutzer:PicNick|Ergänzungen:PicNick]] | ||
− | + | ==Siehe auch== | |
− | + | * [[Bascom]] | |
− | + | [[Kategorie:Robotikeinstieg]] | |
+ | [[Kategorie:Microcontroller]] | ||
+ | [[Kategorie:Software]] | ||
+ | [[Kategorie:Praxis]] | ||
+ | [[Kategorie:Quellcode Bascom]] |
Aktuelle Version vom 22. Januar 2006, 16:57 Uhr
Inhaltsverzeichnis
Verzweigungen im Bascom
Was den Programmablauf betrifft, zeigen weder irgendein Controller noch Bascom eine besonders phantasievolles Verhalten: Es wird mit der (Programmspeicher-) Adresse 0000 begonnen, und dann wird mit aufsteigender Adresse ein Befehl nach dem anderen ausgeführt. Wenn dieser Adresszähler überläuft, springt er wieder auf null, und alles geht von wieder vorne los.
Das ist natürlich nicht das, was man sich unter einem "Programm" vorstellt. Bei einem Programm werden diese oder jene Dinge geprüft, und je nachdem wird entschieden, ob dieses oder jenes zu tun ist. Das heißt, im Programmablauf sollen bedingte Verzweigungen stattfinden, was technisch soviel heißt, daß bei Bedarf in den oben genannten Adress-Zähler einfach die Adresse reingeschrieben wird, wo es weitergehen soll. Das kann natürlich genausogut ein Sprung zurück sein, sprich, die letzten Befehle werden wiederholt. Der Fachmann bezeichnet letzteres als "Programmschleife" und der Über-Fachmann als "Iteration"
Bei den Schleifen gibt es einen großen Unterschied:
- Soll die Bedingung VOR den enthaltenen Anweisungen geprüft werden,
- oder sollen die Anweisungen auf jeden Fall mal gemacht werden und erst danach entschieden werden, ob das Ganze vielleicht wiederholt werden soll.
Zu dieser letzen Variante gehört der:
Verzweigung: Do-Loop
Struktur:
Do ..Anweisung Loop [Until Bedingung]
Beispiel:
Do Print A ‘Gib Variable A aus Incr A ‘ Erhöhe Variable A um 1 Loop Until A=10 ‘ Wenn A = 10 , verlasse Schleife
Die Schleife geht so lang zwischen Do und Loop, bis die Bedingung die hinter Until kommt, richtig ist (= True). Die Schleife kann auch vorzeitig mit dem Befehl „ Exit Do“ verlassen werden.
Do-Loop Schleifen können ineinander geschachtelt werden.
Hier erfolgt die Bedingungsprüfung vorher:
Verzweigung: While-Wend
Struktur:
While Bedingung ..Anweisung Wend
Beispiel:
While A < 10 ‘ Wenn A kleiner als 10 ist, dann springe in die Schleife Print A ‘ Variable A ausgeben Incr A ‘ Variable A um 1 erhöen Wend
Wenn die Bedingung hinter ‘While’ richtig ist(=True), dann springe in die Schleife. „Wend“ springt dann wieder zu While, um dort wieder zu überprüfen, ob die Bedingung True ist. Wenn sie True ist, dann Schleife wiederholen. Wenn nicht, dann setze Programm hinter „Wend“ fort.
While-Wend Schleifen können ineinander verschachtelt werden. Im Vergleich zur Do-Loop Schleife wird die While-Wend Schleife erst ausgeführt, wenn die Bedingung richtig ist.
Die klassische Entweder-oder-Konstruktion:
Verzweigung: If-Then-Else
Struktur:
If Bedingung Then [Elseif Bedingung Then] [Else] End if
Einfachstes Beispiel:
If A= 10 Then A=100
Wenn A=10 dann weise A den Wert 100 zu. Wenn die If-Then Anweisung in eine Zeile geht, dann kann man das so wie obiges Beispiel schreiben. Mann kann auch hinter dem Then, mehrere Anweisungen schreiben. Die müssen aber untereinander durch Doppelpunkt getrennt werden und noch immer in eine Zeile passen.
Für mehrere Anweisung schreibt man aber besser einen IF-Block:
IF-Block Beispiel:
If A= 10 Then A = 100 Print A Print A End if
Hier kann man dann unter “Then”, mehrere Anweisung schreiben. Muss diese aber dann mit „End if“ abschließen. (Das einrücken dient nur zum besserem lesen der Schleife, und trägt nichts zur Funktion bei.) Ein IF-Block, ist übersichtlicher und leichter lesbar.
Oft sind mehr als zwei Möglichkeiten zu bearbeiten
Verzweigung: select
Struktur:
SELECT CASE Variable CASE wert1: CASE wert2: CASE ELSE END SELECT
Ist eine numerische Variable mit Inhalt [ 0 - nn] zu prüfen, gibt es auch
Verzweigung: ON
Struktur:
ON Variable GOTO Label-0, Label-2, ...... Label-n End if
Es gibt natürlich auch Verzweigungen, die nicht an eine Bedingung geknüpft sind
Verzweigung: GOTO
Struktur:
GOTO Label-0
Und es können auch Befehle gewissermaßen "eingeschoben" werden
Verzweigung: GOSUB/RETURN
Struktur:
...Anweisung GOSUB Label-0 ...Anweisung Label-0: ...Anweisung RETURN