Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Anfängerkurs Teil 3 - Kontrollstrukturen: Bedingungen, Schleifen usw.

von RedakteurytwinkySeite 3 von 4

Wenn also in der Do..Loop nur noch andere Schleifen verwendet werden, könnte also mit 'Exit Do' das Spiel an jeder Stelle beendet werden..
Moment mal, also keine Do..Loop mehr? Doch, erlaubt sind natürlich auch verschachtelte Do..Loop-Schleifen, nur das Exit bezieht sich immer auf die nächstliegende zugehörige Schleife..
..also doch Goto? Besser nicht, es gibt die Möglichkeit mit Flags zu arbeiten oder aber den Code so in Subs/Functions aufzuteilen, daß Goto schlicht überflüssig wird..
Der Lohn für die Mühe, die wir uns dabei machen, ist ein Programm, das leichter zu warten ist, wenn es später mal ergänzt werden soll..
..oder, was natürlich auch vorkommen kann, geändert werden muß, weil sich Compiler-Funktionen geändert haben oder weil der Compiler eine neue Funktion erhält, mit der das Programm effektiver gestaltet werden kann.
Eine besondere Bedeutung erhält die Gestaltung von Arrays im Zusammenhang mit Schleifen. Arrays sind(grob gesagt) Felder mit Zeilen und Spalten, bei denen die einzelnen Elemente mit Indizes angesprochen werden können. Dabei ist es letztlich egal, ob die Indizierung bei 0 oder bei 1 beginnt, denn im weitern Verlauf des Programmes ist der Autor selbst verantwortlich dafür, daß die Elemente richtig adressiert werden.
Dafür hat FreeBASIC 'Fallstricke' eingebaut: Nehmen wir an, ein Array a sei mit

Dim a(9)

erstellt. Dann ist der unterste Index 0 und der Oberste 9, d.h. es werden 10 Elemente gespeichert. Wer jetzt sagt, das kann man sich ja an den Fingern einer Hand abzählen, irrt, denn für 10 Elemente werden zwei Hände benötigt. Auch das Beispiel mit 2(für Leute, die nicht bis 3 zählen können) hinkt, aber warum das so ist, wird nicht verraten :lol:

Dim As Integer a(9), i, j
For i=LBound(a) To Ubound(a) 'von der Untergrenze bis zur Obergrenze
  Print "" &i &":";
  Input "", j
Next i
Print "" &i &" Zahlen eingegeben"
Sleep

Tipp: Wer in diesem Beispiel 9 durch 2 ersetzt, braucht seine Finger nicht zu bemühen ;-)
Dies Beispiel hat aber noch einen anderen Grund: Seit FreeBASIC 0.17 ist es möglich, Schleifenvariablen direkt in der Schleife zu dimensionieren. Allerdings funktioniert das Beispiel dann nicht mehr:

Dim As Integer a(9), j
For i As Integer=LBound(a) To Ubound(a) 'von der Untergrenze bis zur Obergrenze
  Print "" &i &":";
  Input "", j
Next i
Print "" &(UBound(a)-LBound(a)+1) &" Zahlen eingegeben"
Sleep

Jetzt läßt sich natürlich leicht festlegen, daß Arrays immer mit 1 beginnen, dann gibt UBound immer den 'richtigen' Wert an. Ja, aber nur bei den Feldern, die sich auch daran halten..
Schließlich könnte ein Array auch von 4 bis 17 gehen:

Dim a(4 To 17)

Das Feld ist vollkommen korrekt deklariert und läßt sich nur per LBound und UBound richtig ansprechen..
Statt die Schleife also immer von 0 starten zu lassen, ist es also sinnvoller, immer LBound zu nehmen. Die Anzahl der Elemente läßt sich IMMER über

Print UBound(a)-LBound(a)+1

ermitteln. Apropos ermitteln: In Schleifen werden sehr oft große Datenmengen bearbeitet. Da ist sorgfältiges Arbeiten angesagt, denn sehr schnell verstecken sich hier Codebremsen, die nur sehr schwer zu entdecken sind. So lassen sich Berechnungen manchmal nur einmal durchführen und stehen dann(in einer Variablen) in der gesamten Schleife zur Verfügung. Das hilft natürlich ganz besonders bei zeitraubenden Berechnungen mit Double-Werten. Ach, in meinem Grafikprogramm benutze ich gar keine Doubles, das trifft auf mich nicht zu? Ehrlich? In Grafik-Programmen werden Winkelfunktionen(Sinus, Cosinus, Tangens o.ä.) benötigt und die sind alle doppelt genau! Bei Gelegenheit also prüfen, ob derartige Berechnungen nicht schon vor der Schleife gemacht werden können.

 

Gehe zu Seite Gehe zu Seite  1  2  3  4  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 09.06.2007 von Redakteurytwinky angelegt.
  • Die aktuellste Version wurde am 20.10.2008 von Redakteurytwinky gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen