Projekt mit
1 €
unterstützen?
So geht das *:


Step 11 - Programmsteuerung 3:

Die "for"-Schleife

Die for-Schleife ist eine Zählschleife die hoch- oder runterzählt.
Standartmäßig sieht die for-Schleife wie folgt aus:
  for [lokale Zählvariable:Integer]:=[Zahlenwert] to | downto [Zahlenwert] do
  begin
    // Anweisungen, die ausgeführt werden sollen
  end;
Die lokale Zählvariable kann nicht in der For-Schleife verändert werden.
Wenn von einer kleineren Zahl aus hochgezählt werden soll, dann benutzt man den Operator "to" ansonsten "downto".

Beispiel 1:
Hierbei soll die Reihe der Quadratzahlen in ein Memo eingetragen werden.
Procedure  Button1Click(Sender:TObject); 
var
  i:Integer;
begin
  for i:=1 to 10 do
    Memo1.Lines.Add(IntToStr(i*i));
end;
Wir sehen: Auch hier können wir wie bei der If-Anweisung begin und End weglassen, wenn wir nur eine Anweisung haben: Der Quelltext wird flüssiger lesbar!

Beispiel 2:
Die for-Schleife wird vor allem benutzt, wenn man mit Arrays (oder was wir vielleicht später kennenlernen: mit Listen) arbeitet.
Hier also ein Beispiel, wie man ein dynamisches Array of Integer mit 0 initialisiert.
procedure initMyArray( myLength : Integer);
var
  i : Integer;                     // Laufvar i muss eine lokale Variable sein!
begin
  SetLength( myArray, myLength);   // myArray ist global deklariert
  for i := 0 to High( myArray) do
    myArray[i] := 0;  
end;
Nähere Beschreibungen im nächsten Beispiel.

Beispiel 3:
Hier ist noch ein 3.Beispiel für euch das zudem auch als Beispiel von Step 07 - Arrays dient.
Damit der folgende Quelltext verständlich wird, erkläre ich euch erst einmal die Komponente "ListBox", welche wir in der Gruppe "Standart" finden sowie die Funktion "High". Eine "ListBox" ist im Prinzip eine Liste, bei der die Werte über die Eigenschaft ListBox.Items geändert bzw. gespeichert werden können. Zudem kann man auf diese Werte wie bei einem Array zugreifen. Dies ist über ListBox.Items.Strings[Index] möglich. Die Eigenschaft ListBox.Items.Count sagt, wieviele Werte die Listbox hat.
Nun zu der Funktion "High", diese gibt den Index des letzten Elementes des Arrays zurück! Wenn also Count (Menge der Elemente) = 10 ist, dann ist der Index des letzten Elementes also High(...) = 9

Jetzt solltet ihr den folgenden Quelltext verstehen, falls ihr doch noch Fragen habt, dann traut euch zu fragen!
Nun zu dem Programm.
Der nun folgende Teil muss in die FormCreate-Procedure:
var 
  myArray : Array [0..10] of Integer; 
  i, k : Integer; 
begin 
  for k := 0 to High(myArray) do  //Dem Array werden Werte von 0-10 zugewiesen
    myArray[ k] := k;  
  for I := 0 to High(myArray) do  //Werte aus dem Array werden in der
    ListBox1.Items.Strings[ i]:=IntToStr( myArray[ i]); //Listbox gespeichert
end; 
(Kleine Warnung: Diese Zuweisung auf Strings[ i] der Liste ist nicht immer möglich! Delphi ist "so schlau" und erstellt die Elemente in dieser Liste. Tatsächlich müssten wir aber erst mit ListBox1.Items.Add('') Elemente hinzufügen! )

Dieser Teil in die OnClick procedure eines Buttons:
var 
  myArray:Array of String; //Definition des Arrays
  i:Integer; 
begin 
  SetLength(myArray,ListBox1.Items.Count); //Setzen der Größe des Arrays
  for i := 1 to High(myArray) do 
  begin 
    myArray[i]:=ListBox1.Items.Strings[i]; //Die Werte aus der ListBox im Array speichern
    ShowMessage(myArray[i]); //Werte Anzeigen
  end; 
end; 

Wer an dieser Stelle mal einen Count-Down sehen möchte, wechselt einfach i mit High(myArray in dieser OnClick-Prozedur und schreibt downto anstatt to

Beispiel 4 (für Fortgeschrittenere!):
Wir wissen, dass eine Zeichenkette (String) aus Buchstaben besteht. Ein String ist im Prinzip ein Array of Char, mit dem einzigen Unterschied, dass es sich hierbei nicht um ein Null-Indexiertes Array handelt. Wenn wir jetzt einen kleinen Codier-Algorithmus entwerfen möchten, so könnte dies ein Teil unseres Algoritmus sein:
  // Hinweis:
  // Dies ist ein Modellbeispiel und wurde nicht auf Richtigkeit getestet!
  // Es dient lediglich der Vertiefung der Theorie!
  codeStr:='';
  for i:=0 to High(myStr) do
  begin
    codeStr := codeStr + codeTable[ (ord( myStr[i]) + 50) mod 256];
    // hierbei ist codeTable ein Array[0..255] of Char mit der codierten ASCII-Tabelle
  end;
  // der String ist hiernach wahrscheinlich nicht mehr anzeigbar!
  
  // Warum?

Da das Kommentarmodul dieser Seite zur Zeit neu überarbeitet werden muss, sendet bitte alle Fragen, Anregungen oder Probleme mit Betreff zu welchem Thema es sich handelt an folgende Mailadresse:


Hinweis:

Dieses Kommentar-Modul teilt seinen Inhalt mit dem gleichnamigen Kapitel im Lazarus-Anfängerkurs. Daher kann es vorkommen, dass Fragen zu Lazarus im Anfängerkurs im Delphi-Anfängerkurs und umgekehrt stehen. Wenn ihr euch registriert, werdet ihr aber immer an die richtige Stelle weitergeleitet.
Zu dieser gemeinsamen Nutzung der Datenbank habe ich mich entschlossen, weil die Sprachelemente in Lazarus genauso wie in Delphi genutzt werden können.

www.marco-hetzel.de
www.delphi-lernen.de
www.lazarus-lernen.de

© 2006-2019 by Marco Hetzel , last modified 01.11.2018, 11:28

(* Unterstützung dient der Aufrechthaltung laufender Kosten für dieses Projekt.)