PDF-Datei zum - Realschule Rheinhausen

Transcription

PDF-Datei zum - Realschule Rheinhausen
Realschule Rheinhausen
Informatik
Turtlegrafiken
mit
Visual Basic
Turtlegrafiken mit VisualBasic
Geplanter Verlauf
1. Die Oberfläche von VisualBasic
2. Turtle-Modul laden
3. Turtle-Befehle
fd, bk, rt, lt, …
4. Einfache Grafiken
Quadrat, Dreieck, Stern, Auto, Roboter
5. Gezählte Wiederholung
Quadrat, Dreieck, n-Eck, Kreis, Stern
6. Wiederholungen in Wiederholungen
Drehbilder
7. Unterprogramme
Quadrat, Dreieck, Stern, Strich
8. Unterprogramme mit Parametern
Quadrat(x)
9. Unterprogramme mit mehreren Parametern
Quiz(a,b,c)
10. Ungezählte Wiederholung
Do … Loop
z.B. RandomWalk, Sternenhimmel …
Abbruchbedingungen
11. Strukturen der Programmierung
Turtle-Befehle
Alle Befehle am besten klein eingeben. Identifiziert VisualBasic einen Befehl, so wandelt es ihn in die
richtige Schreibweise um. So erkennt Ihr Schreibfehler schneller!!
Turtle installieren
Turtle object, xmin, xmax, ymin, ymax
bindet die Turtle an das Objekt und legt das Koordiantensystem fest.
Die Turtle ist in der Objektmitte und schaut nach oben (90Grad)
Turtlebewegungen
Back x
Bk x
Zurueck x
Forward x
Fd x
Vorwaerts x
Die Turtle geht x - Schritte zurück
Die Turtle geht x - Schritte vorwärts.
Dreht die Turtle um den Winkel w nach links
Lt w
Links w
Dreht die Turtle um den Winkel w nach rechts
Rt w
Rechts w
MoveTo x,y
GeheZu x,y
DrawTo x,y
ZeichneZu x,y
Punkt x,y
KreisRechts r
KreisLinks r
KreisUm r
Fill füllfarbe
Home
Farben
PenColor farbe
Stiftfarbe farbe
BackGround farbe
HinterGrund farbe
Bewegt die Turtle zum Punkt (x,y) ohne zu zeichnen.
Zeichnet eine Linie vom aktuellen Standort zum Punkt (x,y)
Zeichnet den Punkt (x,y)
Zeichnet einen Kreis nach rechts mit dem Radius r
Zeichnet einen Kreis nach links mit dem Radius r
Zeichnet einen Kreis um die Turtle mit dem Radius r
Füllt vom Turtleort (x,y) ausgehend solange alles mit der Füllfarbe
bis der Rand erreicht wird. Rand = Ort mit der aktuellen Stiftfarbe.
Die Turtle geht in die Objektmitte und guckt nach oben (90Grad)
farbe, z.B.: vbGreen, vbRed, RGB(rot,gelb,blau) ....
mit 0 <= rot, gelb, blau <= 255
Die Turtle malt mit der Farbe.
Die Turtle malt mit der Farbe.
Der Hintergrund erhält die Farbe.
Der Hintergrund erhält die Farbe.
!!!Achtung: alles wird mit der Farbe übermalt !!!
Sonstiges
SetHeading w
Die Turtle schaut in die Richtung mit dem Winkel w
Heading
liefert die Blickrichtung der Turtle zurück
Nichts
Macht wies schon der Name sagt: nichts.
OutOfRange
Zeigt an, ob die Turtle das Zeichenblatt verlassen hat.
PenDown
Der Zeichenstift ist unten, die Turtle malt wenn sie sich bewegt.
PenUp
Der Zeichenstift ist oben, die Turtle malt nicht wenn sie sich bewegt.
BildschirmLoeschen Die Zeichenfläche wird mit der aktuellen Hintergrundfarbe gelöscht.
Warte t
Warte an dieser Stelle des Programms um t Millisekunden
DoEvents
Übergibt kurzzeitig die Steuerung an das System
Random a,b,c
Gibt eine Zufallszahl zwischen a und b zurück.
Ist c=true, so werden auch Dezimalzahlen zurückgegeben.
Starten von Visual Basic
Start -> Programme -> Microsoft Visual Basic 5.0 -> Visual Basic 5.0
Standard - EXE auswählen
Turtle - Modul hinzufügen
Projekt -> Modul hinzufügen
Auf “Vorhanden” klicken und dort im Home-Laufwerk turtle.bas auswählen
Programm - Code eingeben
Fertig geladen müsste es dann so aussehen:
Bei Doppelklick mit links auf die Form öffnet sich das
Codefenster:
Jetzt kannst Du die Anweisungen für die Turtle eintippen.
Als erstes musst Du der Turtle sagen wie ihre Zeichenfläche heisst und wie groß
das Koordinatensystem darauf ist.
Wenn Du alles “klein” eingibst, kannst Du Tippfehler leichter erkennen, da VB
bekannte Befehle in die richtige Schreibweise (bei uns “groß”) umwandelt.
Vor ENTER
Nach ENTER
Das Turtlesystem
Die Turtle (Schildkröte) kannst Du Dir wie enien Zeichenstift vorstellen, den Du über
Deine Zeichenfläche schicken kannst.
Als Zeichenfläche kommen in Frage:
das Fenster selber (Form),
oder eine Picture-Box (das kriegen wir später).
Dieser Zeichenfläche ordnen wir ein Koordinatensystem wie folgt zu.
Erstes Programm
Die Turtle soll direkt auf dem Fenster Form1 malen. Die x-Koordinaten liegen zwischen 0
und 360, die y-Koordinaten zwischen o und 200.
Die Turtle geht 50 Schritte nach vorne, dreht sich um 90 Grad nach rechts, und bewegt
sich dann um 100 Schritte zurück.
Die gezählte Wiederholung
Die große Stärke eines Computers besteht darin, die gleichen Aktionen wiederholt
ausführen zu können. Mit Hilfe der
FOR ... TO ... - Schleife
kann in Visual Basic eine Befehlsfolge eine bestimmte Anzahl von Malen
wiederholt werden.
For i =1 To z
{ ... }
Next i
wiederholt die in geschweiften Klammern stehende Befehlsfolge z - mal.
Beispiele:
Dreieck
Turtle Form1, 0, 320, 0, 240
For i = 1 To 3
Fd 90
Rt 120 '360/3 = 120 !!
Next i
Viereck
Turtle Form1, 0, 320, 0, 240
For i = 1 To 4
Fd 90
Rt 120 '360/4 = 90 !!
Next i
36-Eck
Turtle Form1, 0, 320, 0, 240
For i = 1 To 36
Fd 9
Rt 10 '360/36 = 10 !!
Next i
N-ECK
Turtle Form1, 0, 320, 0, 240
For i = 1 To N
Fd x
Rt 360/N
Next i
Die gezählte Wiederholung
Vielfache von 360 Grad
Lassen wir sich die Turtle nicht nur 1-mal im Kreis herum drehen (360 Grad) ,
sondern um Vielfache Winkel von 360 Grad (720, 1080, 1440 usw. ) entshen
wieder ganz andere Bilder.
Beispiele:
stern2
Turtle Form1, 0, 320, 0, 240
For i = 1 To 5
Fd 80
Rt 720 / 5
Next i
sonne2
Turtle Form1, 0, 320, 0, 240
For i = 1 To 50
Fd 80
Rt 190
Next i
garn
Turtle Form1, 0, 320, 0, 240
For i = 1 To 50
Fd 80
Rt 14400 / 101
Next i
sonne
Turtle Form1, 0, 320, 0, 240
For i = 1 To 21
Fd 80
Rt 1440 / 21
Next i
Die gezählte Wiederholung
Nicht - geschlossene Grafiken
Sehr interessante Bilder können entstehen, wenn wir Grafiken erzeugen, deren
Kurven nicht geschlossen sind.
Beispiele:
Offen90
Turtle Form1, 0, 320, 0, 240
For i = 1 To 100
Fd i
Rt 90
Next i
Offen87
Turtle Form1, 0, 320, 0, 240
For i = 1 To 100
Fd i
Rt 87
Next i
Offen i
Turtle Form1, 0, 320, 0, 240
For i = 1 To 200
Fd i
Rt i
Next i
Offen mit bk
Turtle Form1, 0, 320, 0, 240
For i = 1 To 120
Fd i
Bk i
Rt 87
Next i
Wie können die folgenden Bilder programmiert werden ?
(Einfache FOR .. TO .. - Schleife
Lösungen zu
Wie können folgende Bilder programmiert werden?
(Einfache for..to..-Schleife)
Stern
Option Explicit
Dim i As Integer
Private Sub Form_Load()
Turtle Form1, 0, 320, 0, 260
For i = 1 To 5
Fd 60
Rt 149
Fd 60
Lt 77
Next i
End Sub
Drehstriche
Drehstriche 2
Kreise
Turtle Form1, 0, 320, 0, 220
For i = 1 To 90
Fd i
Bk i
Rt 360 / 90
Next i
Turtle Form1, 0, 320, 0, 200
MoveTo 160, 100
For i = 0 To 80 Step 4
KreisRechts i
Next
Turtle Form1, 0, 320, 0, 220
For i = 1 To 24
Fd 90
Bk 90
Rt 360 / 24
Next i
Drehkreis1
Option Explicit
Dim i, n As Integer
Drehkreise2
Option Explicit
Dim i, n As Integer
Private Sub Form_Load()
Turtle Form1, 0, 310, 0, 260
For n = 1 To 12
KreisRechts 50
Lt 360 / 12
Next
End Sub
Private Sub Form_Load()
Turtle Form1, 0, 310, 0, 260
For n = 1 To 36
KreisRechts 25
Fd 5
Lt 360 / 36
Next
End Sub
Wiederholungen können auch ineinander geschachtelt werden !
Dreh1
Turtle Form1, 0, 320, 0, 220
For i = 1 To 6
For n = 1 To 4
Fd 60
Rt 90 ' = 360/4
Next n
Rt 60
' = 360/6
Next i
Dreh2
Turtle Form1, 0, 480, 0, 320
For i = 1 To 4
For n = 1 To 9
Fd 40
Rt 60
Next n
Rt 90
Next i
Welche Bilder liefern die folgenden Programme ?
Dreh 3
Turtle Form1, 0, 320, 0, 220
For i = 1 To 12
For n = 1 To 36
Fd 5
Rt 10 ' = 360/36
Next n
Rt 30
' = 360/12
Next i
Dreh 4
Turtle Form1, 0, 320, 0, 220
For i = 1 To 50
For n = 1 To 5
Fd 50
Rt 360 / 5
Next n
Rt 360 / 50
Next i
Wie können die folgenden Bilder programmiert werden ?
(Doppelte FOR .. TO .. - Schleife
Lösungen zu
Wie können folgende Bilder programmiert werden?
Dreiecke
Option Explicit
Dim i, n As Integer
Private Sub Form_Load()
Turtle Form1, 0, 310, 0, 260
For n = 1 To 4
For i = 1 To 3
Fd n * 30
Rt 360 / 3
Next
Next
End Sub
Drehdreiecke
Turtle Form1, 0, 320, 0, 260
For i = 1 To 6
For n = 1 To 3
Fd 60
Rt 120
Next
Rt 360 / 6
Next
Drehdreiecke mit Lücke
Turtle Form1, 0, 320, 0, 260
For i = 1 To 4
For n = 1 To 3
Fd 80
Rt 120
Next n
Rt 90
Next i
Drehfähnchen
Turtle Form1, 0, 320, 0, 220
For i = 1 To 12
Fd 50
For n = 1 To 3
Fd 50
Rt 360 / 3
Next n
Bk 50
Rt 360 / 12
Next i
Drehfünfecke
Turtle Form1, 0, 320, 0, 220
For i = 1 To 10
For n = 1 To 5
Fd 50
Rt 360 / 5
Next n
Rt 360 / 10
Next i
12 Drehfünfecke mit Versatz
Turtle Form1, 0, 310, 0, 260
For n = 1 To 12
For i = 1 To 5
Fd 30
Rt 360 / 5
Next
Fd 10
Lt 360 / 12
Next
Unterprogramme
( Sub - Routinen )
Wir können einzelnen Programmteilen auch eigene Namen geben.
Vorteile:
1. Das Gesamtprogramm kann in mehrere Teilaufgaben zerlegt werden.
2. Das Programm kann dadurch leichter lesbar (verständlicher) werden.
3. Die SUB-Routinen können auch in anderen Programmen benutzt werden.
Beispiel: Ein Drehbild aus 8 Quadraten
Ohne Sub
Turtle Form1, 0, 320, 0, 220
For i=1 to 8
For n= 1 to 4
Fd 60
Rt 90
Next n
Rt 360/8
Next i
Mit Sub
Turtle Form1, 0, 320, 0, 220
For i=1 to 8
Quadrat
Rt 360/8
Next i
Sub Quadrat
For n= 1 to 4
Fd 60
Rt 90
Next n
End Sub
Mit dieser SUB-Routine hat der Computer “gelernt”, was ein Quadrat ist. Wir können
diese SUB-Routine genauso verwenden, wie die anderen BASIC-Befehle. Um ein
Quadrat zu zeichnen, braucht nur noch der Name Quadrat getippt zu werden.
Es empfiehlt sich den ersten Buchstaben der Sub-Routine groß zu definieren. Bei
der Eingabe tippt man ihn dann klein. Erkennt der Computer den Befehl, so
wandelt er den Befehl in die richtige Schreibweise um. Schreibfehler können so
leichter erkannt werden!
Programmiere folgende Grafiken
Benutze als SUB-Routine die dick gemalte Figur
Lösungen zu SUB-Routinen
Proc1
Option Explicit
Dim i, n As Integer
Proc 2
Option Explicit
Dim i, n As Integer
Proc 3
Option Explicit
Dim i, n As Integer
Private Sub Form_Load()
Turtle Form1, 0, 320, 0, 220
For i = 1 To 8
fahne
Rt 360 / 8
Next
End Sub
Private Sub Form_Load()
Turtle Form1, 0, 320, 0, 220
For i = 1 To 16
haken
Rt 360 / 16
Next
End Sub
Private Sub Form_Load()
Turtle Form1, 0, 320, 0, 220
For i = 1 To 12
raute
Rt 360 / 12
Next
End Sub
Sub fahne()
Fd 25
For n = 1 To 4
Fd 25
Rt 90
Next
Bk 25
End Sub
Sub haken()
Fd 75
Rt 90
Fd 25
Bk 25
Lt 90
Bk 75
End Sub
Sub raute()
For n = 1 To 2
Fd 50
Rt 30
Fd 50
Rt 150
Next
End Sub
Proc 4
Option Explicit
Dim i, n As Integer
Proc 5
Option Explicit
Dim i, n As Integer
Proc 6
Option Explicit
Dim i, n As Integer
Private Sub Form_Load()
Turtle Form1, 0, 320, 0, 220
For i = 1 To 4
rechteck
Rt 360 / 4
Next
End Sub
Private Sub Form_Load()
Turtle Form1, 0, 320, 0, 220
For i = 1 To 4
lolli
Lt 360 / 4
Next
End Sub
Private Sub Form_Load()
Turtle Form1, 0, 320, 0, 220
For i = 1 To 4
pyramide
Lt 360 / 4
Next
End Sub
Sub rechteck()
For n = 1 To 2
Fd 100
Rt 90
Fd 20
Rt 90
Next
End Sub
Sub lolli()
Fd 50
For n = 1 To 3
KreisRechts 10 * n
Next
Bk 50
End Sub
Sub pyramide()
Fd 50
For n = 1 To 26
Fd n
Rt 90
Next
End Sub
Die verschiedenen Variablen - Typen von Visual Basic
Typ
Byte
Boolean
Integer
Long
(long integer)
Single
(singleprecision
floating-point)
Speicher
1 byte
2 bytes
2 bytes
4 bytes
Bereich
0 to 255
True oder False (logische Variable)
-32 768 to 32 767
-2 147 483 648 bis 2 147 483 647
4 bytes
-3,402823E38 bis -1,401298E-45 für negative
Werte;
Double
8 bytes
(doubleprecision
floating-point)
Currency
(scaled
integer)
Decimal
8 bytes
14 bytes
1,401298E-45 bis 3,402823E38 für positive
Werte
-1,79769313486232E308 bis 4,94065645841247E-324 für negative Werte;
4,94065645841247E-324 bis
1,79769313486232E308 für positive Werte
-922 337 203 685 477,5808
bis
922 337 203 685 477,5807
+/-79 228 162 514 264 337 593 543 950 335
ohne Dezimalpunkt;
+/-7,9228162514264337593543950335
mit 28 Stellen vor dem Komma;
Date
Object
String
(variablelength)
String
(fixed-length)
Variant
(bei Zahlen)
Variant
(bei Zeichen)
8 bytes
4 bytes
10 bytes + string
length
die kleinste Nicht-Null-Zahl ist +/0,0000000000000000000000000001
1. Januar 100 bis 31. Dezember 9999
Object Referenz
0 bis ungefähr 2 Billionen
Länge der
Zeichenkette
16 bytes
1 bis ungefähr 65.400
22 bytes +
Zeichnkettenlänge
wie variabler String
Zahl bis max. Double
Für uns genügen die Typen:
integer und long für Ganze Zahlen,
single und double für Dezimalzahlen .
SUB - Routinen mit Parametern
Anstatt einen Zahlenwert (z. B. die Seitenlänge eines Quadrats) im Editor zu
verändern, kann dieser Zahlenwert auch bei der Definition des Unterprogramms
offen bleiben und erst bei der Verwendung (Aufruf) des Programms festgelegt
werden. In der Unterprogrammdefinition wird ein "Stellvertreter" (Parameter)
anstelle des Zahlenwertes verwendet.
Beispiel: Quadrat 50
Sub Quadrat (ByVal x As Single)
Dim i As Integer
For i = 1 To 4
Fd x
Rt 90
Next i
End Sub
UUUps!!? Was bedeutet das denn alles ?
Wird der Befehl “Quadrat 50” aufgerufen, wird dem Unterprogramm Quadrat die
Zahl 50 übergeben. Das Unterprogramm speichert diese Zahl in der Variablen x,
die nur in diesem Unterprogramm gültig ist. Die Schleifenvariable “i” wird deshalb
auch im Unterprogramm definiert. So gibt es keine eventuellen Probleme mit den
Variablen in anderen Unterprogrammen, bzw. mit dem Hauptprogramm.
Beispiel: 20 immer größer werdende Quadrate
Option Explicit
Private Sub Form_Load()
Dim i As Single
Turtle Form1, 0, 320, 0, 220
For i = 0 To 20
Quadrat i * 5
Next i
End Sub
Sub Quadrat(ByVal x As Single)
Dim i As Single
For i = 1 To 4
Fd x
Rt 90
Next i
End Sub
Wir sehen wie die Quadrate entstehen
Wenn das Programm wie auf der vorigen Seite aufgebaut ist, dann sehen wir sofort
das Ergebnis. Manchmal ist es aber schön anzuschauen, wie so ein Computerbild
entsteht, bzw. es ist zur Fehleranalyse wichtig zu “sehen”, an welcher Stelle etwas
nicht so läuft wie erwartet.
Wir fügen daher auf der Zeichenfläche einen sogenannten “Comand” - Button
(Befehlsknopf) ein.
Dazu klicken wir auf der Werkzeugleiste (links) auf den Command-Button. Danach
hat der Cursor die Gestalt eines Kreuzes. Damit ziehen wir jetzt auf der
Zeichenfläche (Form) ein Rechteck auf. Das ist jetzt unser Command-Button.
Mit einem Doppelklick (linke Maustaste) auf den Command-Button öffnet sich
wieder das Code-Fenster ( Private Sub Form_Load() ), und wir können die
Befehlsfolge eingeben, welche ausgeführt werden soll, wenn der Button während
der Programmausführung mit links angeklickt wird.
Beispiele: 40 SUB_Drehrechtecke
Option Explicit
Private Sub Form_Load()
Turtle Form1, 0, 120, 0, 80
Pu
Bk 10
Pd
End Sub
Private Sub Command1_Click()
Dim i As Integer
For i = 0 To 40
Rechteck i
Rt 360 / 40
Warte 1
Next i
End Sub
Sub Rechteck(ByVal x As Single)
Dim i As Integer
For i = 1 To 2
Fd x
Rt 90
Fd x / 2
Rt 90
Next
End Sub
Strichdreieck
Option Explicit
Private Sub Form_Load()
Turtle Form1, 0, 300, 0, 200
Pu
Bk 50
Pd
StrichDreieck 120
End Sub
Sub StrichDreieck(ByVal x As Single)
Dim i As Integer
For i = 1 To 3
Strich x
Rt 360 / 3
Next
End Sub
Sub Strich(ByVal x As Single)
Dim i As Single
For i = 1 To x / 10
Fd 3
Pu
Fd 4
Pd
Fd 3
Next
End Sub
Wie kannst Du folgendes Bild mit Hilfe der Subroutine “Strich” programmieren?
(Tipp: Winkeländerung konstant, Länge wird immer größer, die Turtle muss aber
immer wieder in die Mitte zurück!)
Unterprogramme mit mehreren Parametern
Unterprogramme (Subroutinen) können auch mehrere Parameter haben. Z. B.
Kann beim Zeichnen eines N-Ecks die Anzahl der Ecken (N) und die Seitenlänge
(S) Parameter sein:
Option Explicit
Private Sub Form_Load()
Turtle Form1, 0, 300, 0, 200
neck 9, 30
End Sub
Sub neck(ByVal n, s As Single)
Dim i As Single
For i = 1 To n
Fd s
Rt 360 / n
Warte 50 ' dient dazu den Zeichenvorgang zu verlangsamen
Next
End Sub
Das folgende Überraschungsprogramm enthält außer der Anzahl der Ecken und
der Seitenlänge noch einen Überraschungsfaktor f:
Sub quiz(ByVal n, s, f As Single)
Dim i As Single
For i = 1 To n
Fd s
Rt f * 360 / n
Warte 200 ' dient dazu den Zeichenvorgang zu verlangsamen
Next
End Sub
Wir haben die Aufrufe quiz 9,70,2 quiz 8,70,3 quiz 9,70,3 quiz 9,70,4
Ausprobiert, aber leider sind die Bilder durcheinandergeraten. Welcher Aufruf
gehört zu welchem Bild?
Zufallszahlen und Funktionen
Die Verwendung von Zufallszahlen und Funktionen unter Visual Basic soll anhand
eines einfachen Beispiels gezeigt werden:
Wir wollen einen “Sternenhimmel” mit unterschiedlich großen, zufällig am
Bildschirm verteilten Sternen erzeugen.
Zum Zeichnen eines Sternes dient das Unterprogramm “Stern” :
Sub Stern(g As Single)
Dim i As Integer
Rt Rnd * 360
For i = 1 To 5
Fd g
Rt 144
Next
End Sub
Aufruf z. B.
Stern 50
Um die Seitenlänge eines Sterns “zufällig” groß zu machen, kann in Visual Basic die
Funktion RND verwendet werden.
RND
: liefert zufällig eine Zahl zwischen Null und Eins 0 <= RND <= 1 .
RND * 50: liefert zufällig eine Zahl zwischen Null und Fünfzig 0 <= RND*50 <= 50.
Stern RND * 60
Zeichnet einen Stern, dessen Seitenlänge kleiner als 60 ist. Man weiß aber im
vorhinein nie, wie groß sie wirklich ist. Um ganz kleine Sterne zu vermeiden (auch
ein Stern der Seitenlänge Null wäre möglich!) Gibt es im Turtle-Modul eine Funktion
Random, deren Ergebnis eine Zufallszahl in einem bestimmten Bereich sein kann:
Z.B. Random (2 , 12 , False) , liefert ganzzahlige Zufallszahlen zwischen 2 und 12.
Random (5,25,True ) liefert zufällige Dezimalzahlen zwischen 5 und 25 .
Um die Turtle nun zufällig irgendwohin auf dem Bildschirm zu positionieren, können
wir schreiben: MoveTo Rnd * 320 , Rnd * 220 .
Das Programm zum Zeichnen eines Sternenhimmels kann nun aus diesen
Bausteinen zusammengesetzt werden, Hauptprogramm z. B. :
For i = 1 To 500
MoveTo Rnd * 320, Rnd * 220
Stern Random(2, 10, False)
Warte 1
Next
Sternenhimmel mit 500 Sternen
400 Zufallsrechtecke
500 Zufallskreise
Die ungezählte Wiederholung
Abbruchbedingung am Anfang
(Schleife kann übersprungen werden)
DO WHILE Bedingung = wahr
{
... Anweisungen ...
}
LOOP
Bei der DO WHILE {...} LOOP - Struktur, werden die Anweisungen zwischen den
Klammen solange ausgeführt, wie die Bedingung erfüllt ist.
Abbruchbedingung am Ende
(Schleife wird mindestens einmal durchlaufen)
DO
{
... Anweisungen ...
}
LOOP UNTIL Bedingung = wahr
Bei der DO {...} LOOP UNTIL - Struktur werden die Anweisungen zwischen den
Klammern solange ausgeführt, bis die Bedingung erfüllt ist.
Beispiel: Setze 5 Sekunden lang zufällig Punkte auf die Zeichenfläche
Option Explicit
Private Sub Form_Load()
Turtle Form1, 0, 320, 0, 220
Form1.DrawWidth = 4 'Punkt 4 Pixel dick
End Sub
Private Sub Command1_Click()
Dim t As Long
t = Zeit
Do While (Zeit - t) < 5000 ' Zeit in Millisekunden
PenColor RGB(Rnd * 255, Rnd * 255, Rnd * 255)
Punkt Rnd * 320, Rnd * 220
Form1.Caption = Zeit - t
DoEvents
Loop
Form1.Caption = "ENDE"
End Sub
RandomWalk
Im folgenden Programm soll sich die Turtle zufällig in eine Richtung drehen und
dann einen Schritt vorwärts gehen.
Das Programm soll beendet werden, wenn die Turtle die Zeichenfläche verlässt.
Option Explicit
Private Sub Form_Load()
Turtle Form1, 0, 320, 0, 220
End Sub
Private Sub Command1_Click()
Do
Rt Rnd * 359
Fd 1
DoEvents
Loop Until OutOfRange
Form1.Caption = "ENDE"
End Sub
Berechnung von PI
Private Sub Form_Load()
Turtle Form1, 0, 1, 0, 1
End Sub
Private Sub Command1_Click()
Dim imKreis, gesamt, x, y As Double
imKreis = 0
gesamt = 0
Do
x = Rnd
y = Rnd
gesamt = gesamt + 1
If x * x + y * y <= 1 Then
imKreis = imKreis + 1
PenColor vbRed
Else
PenColor vbBlue
End If
Punkt x, y
Form1.Caption = 4 * imKreis / gesamt
DoEvents
Loop Until imKreis > 9999
End Sub
Bedingungen
Bedingungen können in Visual Basic wahr oder falsch sein und können zum
Beispiel durch den Vergleich zweier Zahlenwerte auf kleiner (<) , größer (>) oder
gleich (=) gebildet werden.
If x=y Then Print “Die Zahlen sind gleich”
Hier wird nicht etwa der Variablen x der Wert der Variablen y zugeordnet, sondern
die Werte von x und y verglichen. Sind sie gleich , so wird der Text “Die Zahlen sind
gleich” geschrieben.
NOT ... [ Bedingung ]
Bewirkt, dass die Bedingung in ihr Gegenteil umgekehrt wird.
If NOT x=y then print “Die Zahlen sind ungleich”
AND
Zwei Bedingungen, die beide gleichzeitig zutreffen sollen, können durch AND
(und) zusammengesetzt werden.
If x>1 AND x<9 Then Print “x liegt zwischen 1 und 9”
OR
Zwei Bedingungen, von denen zumindest eine zutreffen soll, können durch OR
(oder) zusammengesetzt werden.
If x<1 OR x>9 Then Print “X liegt nicht zwischen 1 und 9”
TurtleX
Liefert die x-Position der Turtle.
TurtleY
Liefert die y-Position der Turtle
Heading
Liefert die momentane Blickrichtung der Turtle in Winkelgrad
Bedingungen können dazu verwendet werden, um die Position und die Richtung
der Turtle abzufragen.
Mit diesen Abfragen können wir ein Programm schreiben, das die Turtle wie eine
Billardkugel zurückschickt, sobald sie den Rand des Fensters erreicht:
Billard - Programm
Option Explicit
Private Sub Form_Load()
Turtle Form1, 0, 640, 0, 480
End Sub
Private Sub Start_Click()
SetHeading Rnd * 360
Do
If TurtleX >= 640 Or TurtleX <= 0 Then
Rt (180 + 2 * Heading)
End If
If TurtleY >= 480 Or TurtleY <= 0 Then
Rt (2 * Heading)
End If
Fd 2
DoEvents
Loop
End Sub
Private Sub Ende_Click()
Unload Me
End
End Sub
Strukturen der Programmierung
1. Anweisungsliste A
( ein Befehl nach dem anderen wird ausgeführt )
Z.B. Dreieck
Fd 30
Rt 120
Fd 30
Rt 120
Fd 30
Rt120
2. Einfache Schleife
( gezählte Wiederholung )
Z.B. Dreieck
For i= 1 To 3
Fd 30
Rt120
Next i
3. Schleife in Schleife
Z. B. 30 Dreiecke
For n = 1 To 30
For i = 1 To 3
Fd 30
Rt 120
Next i
Rt 360/30
Next n
4. Sub - Routinen
( Unterprogramme )
Einzelnen Programmteilen können wir auch einen eigenen Namen geben. Z. B.
dem Programmteil, der im vorangegangenen Programm das Dreieck gezeichnet
hat:
Hauptprogramm
For n = 1 to 30
Dreieck
Rt 360 / 30
Next n
Unterprogramm
Sub Dreieck ()
For i = 1 to 3
Fd 30
Rt 120
Next i
End Sub
Vorteile:
1. Das Hauptprogramm wird lesbarer (leichter verständlich) .
2. Einmal definierte Unterprogramme lassen sich in anderen Programmen wieder
verwenden. ( Das Rad muss nicht zum zweiten mal erfunden werden!)
5. Sub - Routinen mit Parametern
Unterprogrammen können auch Werte ( z. B. Zahlen ) übergeben werden. So
können wir bequem die Größe des Dreiecks ändern.
Beispiel:
20 immer größer werdende Dreiecke
1 Option Explicit
2 Private Sub Form_Load()
3
Dim i As Integer
4
5
6
7
8
9 End
Turtle Form1, 0, 70, 0, 50
For i = 1 To 20
Dreieck i
Rt 360 / 20
Next i9
Sub
10 Sub Dreieck(ByVal x As Single)
11
Dim i As Integer
12
For i = 1 To 3
13
Fd x
14
Rt 120
15
Next i
16 End Sub
Sub Dreieck(ByVal x As Single)
Das heißt:
Dem Unterprogramm “Dreieck” wird eine Zahl übergeben. Diese
Zahl wird in der Variablen X gespeichert. X ist eine einfache
Dezimalzahl (single). Die Variable x ist nur innerhalb des
Unterprogramms gültig!
In Zeile 11 wird eine Laufvariable “i” definiert. Sie ist
nur innerhalb des Unterprogramms gültig.
In Zeile 13
fd x : die Turtle geht x - Schritte vorwärts !