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 !