Was ist "while (...)" und wie benutzt man ist ?

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Arterio
Beiträge: 3
Registriert: Di, 14.01.2014 18:02

Was ist "while (...)" und wie benutzt man ist ?

Beitrag von Arterio »

Hallo. Wie benutzt man die "Struktur" mit "while" ? und was ist es überhaupt ?
Es wird ja mit while angefangen und mit wend beendet aber ich verstehe nicht, wozu das da ist. Danke im Vorraus :)
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Was ist "while (...)" und wie benutzt man ist ?

Beitrag von Stephan »

While - End ist dazu da um eine Befehlsabfolge eine unbestimmte Anzahl von Malen auszuführen, "unbestimmt" in dem Sinne das es sich erst während des Ablauf des Makros ergibt und nicht schon zum Zeitpunkt der Programmierung feststeht.
Man nennt solche mehrfach zu durchlaufenden Befehlsabfolgen auch allgemein "Schleifen", gilt nicht für für While-Wend, sonden auch für Do-Loop, For-Next, usw.

Die Struktur bei While-Wend ist immer:

Code: Alles auswählen

While <irgeneine zu prüfende Bedingung>
	<Befehle die auszuführen sind>
Wend (kennzeichnet nur das Schleifenende)
Weil hier die Bedingung am Anfang der Schleife geprüft wird nennt man sowas auch kopfgesteuert, hingegen wäre das folgende do-loop fussgesteuert, weil die Bedingung am Ende der Schleife geprüft wird

Code: Alles auswählen

i = 0
Do
	i = i + 1
Loop While i < 10
aber weiter mit While - Wend:

sobald das Makro zu der Zeile kommt die mit While beginnt wird die Bedingung dahinter überprüft ob sie erfüllt ist und wenn sie das ist wird der nachfolgende Code ausgeführt bis WEnd ausgeführt und dann wieder zurück zum While gesprungen und erneut geprüft, wenn nicht wird sofort hinter WEnd fortgesetzt, Beispiele:

Code: Alles auswählen

i = 0
While i < 3
	i = i + 1
Wend
Msgbox i
Ablauf ist:
i ist 0 also kleiner 3
deshalb wird 1 addiert und zurückgesprungen
i ist jetzt 1 also noch kleiner 3
deshalb wird 1 addiert und zurückgesprungen
i ist jetzt 2 also noch kleiner 3
deshalb wird 1 addiert und zurückgesprungen
i ist jetzt 3 also nicht mehr kleiner 3
deshalb wird zur Zeile Msgbox i gesprungen und damit 3 angezeigt

Code: Alles auswählen

i = 0
While i > 3
	i = i + 1
Wend
Msgbox i
Ablauf ist:
i ist 0 also kleiner 3
deshalb wird sofort zur Zeile Msgbox i gesprungen und damit 0 angezeigt


Eine solche Schleife muss normalerweise immer Befehle enthalten die den zu prüfenden Wert irgendwie ändern, denn sonst besteht die Gefahr das sich das Makro in der Schleife fängt, d.h. die Schleife wird ewig wiederholt, z.B.:

Code: Alles auswählen

i = 0
While i < 3
	i = 1
Wend
Msgbox i


Reicht das?


Gruß
Stephan
Arterio
Beiträge: 3
Registriert: Di, 14.01.2014 18:02

Re: Was ist "while (...)" und wie benutzt man ist ?

Beitrag von Arterio »

Danke für diese sehr ausführliche Antwort ! Die gleiche Frage stelle ich mir allerdings leider auch für die "function ()" ... "End function " Wie ist es da der Fall ?
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Was ist "while (...)" und wie benutzt man ist ?

Beitrag von Stephan »

Die gleiche Frage stelle ich mir allerdings leider auch für die "function ()" ... "End function " Wie ist es da der Fall ?
Das hat nichts miteinander zu tun, auch ist zu "function ()" ... "End function" nichts weiter zu sagen, weil das keine 'Struktur' innerhalb eines Makros ist sondern lediglich die Benennung für eine Funktion. Eine Function ist etwas Ähnliches wie eine Sub-Prozedur, jedoch nichts Ähnliches zu einer Schleife.

Sub ist:

Code: Alles auswählen

Sub meinMakro()

'irgendwelche Befehle

End Sub
Function ist:

Code: Alles auswählen

Function meine Function()
'irgendwelche Befehle
End Function
der Unterschied ist das eine Function üblicherweise einen Rückgabewert liefert wenn man sie in einem Makro aufruft:

Code: Alles auswählen

Sub aufruf()
Msgbox meineFunktion()
End Sub

Function meineFunktion()
meineFunktion = "Hallo"
End Function 
Functions können Parameter nutzen, z.b.:

Code: Alles auswählen

Sub aufruf()
Msgbox meineFunktion(1, 3)
End Sub

Function meineFunktion(x As Integer, y As Integer)
meineFunktion = x + y
End Function



Gruß
Stephan
Antworten