Lazarus/Felder (Arrays): Unterschied zwischen den Versionen

Aus ZUM-Unterrichten
main>Peterdauscher
Keine Bearbeitungszusammenfassung
main>Peterdauscher
Keine Bearbeitungszusammenfassung
Zeile 19: Zeile 19:
Wir betrachten ein einfaches Beispiel aus der Schulwelt: Lehrer Lempel hat gerade seine Klassenarbeit korrigiert und möchte einen Notenspiegel erstellen. Dafür schreibt er sich ein Lazarus-Programm mit einem Edit-Feld <tt>edit1</tt> (zum Eingeben einer Zensur zwischen 1 und 6) und einem Knopf <tt>button2</tt>, um die Zahl in die Statistik aufzunehmen.
Wir betrachten ein einfaches Beispiel aus der Schulwelt: Lehrer Lempel hat gerade seine Klassenarbeit korrigiert und möchte einen Notenspiegel erstellen. Dafür schreibt er sich ein Lazarus-Programm mit einem Edit-Feld <tt>edit1</tt> (zum Eingeben einer Zensur zwischen 1 und 6) und einem Knopf <tt>button2</tt>, um die Zahl in die Statistik aufzunehmen.
Der Notenspiegel wird dann immer im Memo-Feld <tt>memo1</tt> ausgegeben. Vor dem Aufnehmen der Statistik jedoch, müssen alle Anzahlen der Noten natürlich auf Null gesetzt werden. Das geschieht mit dem Drücken von <tt>button1</tt>. Erst dann darf man mit der Eingabe beginnen.
Der Notenspiegel wird dann immer im Memo-Feld <tt>memo1</tt> ausgegeben. Vor dem Aufnehmen der Statistik jedoch, müssen alle Anzahlen der Noten natürlich auf Null gesetzt werden. Das geschieht mit dem Drücken von <tt>button1</tt>. Erst dann darf man mit der Eingabe beginnen.
{{kasten_blau|<source  line highlight="27-29,37-54" lang="pascal">
unit lazio_testumgebung;
{$mode objfpc}{$H+}
interface
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ExtCtrls,LazIOStuff;
type
  { TForm1 }
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
var
  Form1: TForm1;
  i  : integer;
  note : integer;
  anzahl : array[1..6] of integer;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
for i:=1 to 6
do anzahl[i]:=0;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  ReadFrom(Edit1,note);
  anzahl[note]:=anzahl[note]+1;
  Clear(Memo1);
  for i:=1 to 6
  do begin
    WriteTo(Memo1,i);
    WriteTo(Memo1,': ');
    WriteLnTo(Memo1,anzahl[i]);
    end;
end;
end.
</source>}}

Version vom 27. Januar 2013, 13:05 Uhr

Bisher haben wir nur Variablen kennen gelernt, die aus einer einzigen Zahl (ganz oder reell) oder einem Wahrheitswert (wahr/falsch) bestanden haben. Für viele Dinge reicht das auch, allerdings gibt es auch Probleme, zu deren Lösung viele Variablen benötigt werden. Statt nun jeder einzelnen davon einen Namen zu geben kann man auch viele Variablen unter einem Namen zusammenfassen und sie durchnummerieren.

Denkt man an unser Beispiel mit dem Schubladenschrank wäre das also eine Schublade mit einem Namensetikett darauf. In der Schublade jedoch gäbe es jetzt viele kleine Unterfächer, die mit Nummern versehen sind. Eine solche Variable wird in der Informatik auch als Feld oder englisch als Array bezeichnet.

Um eine solche Variable zu deklarieren, muss man in der Deklaration sagen, wie viele "Unterfächer" unsere "Schublade" tatsächlich hat, bzw., welche Nummern überhaupt vergeben werden. So besagt die Deklaration

var zahlen : array[1..10] of integer;

dass in der Schublade zahlen zehn einzelne Zahlen gespeichert werden können, die von 1 bis 10 durchnummeriert sind.

Angenommen, man möchte nun die Zahl mit der Nummer 7 auf den Wert 42 setzen, so erreicht man das mit der folgenden Zeile:

zahlen[7]:=42;

Man beachte, dass die Klammern hinter dem Namen des Arrays tatsächlich eckige Klammern sein müssen.

Beispiel

Wir betrachten ein einfaches Beispiel aus der Schulwelt: Lehrer Lempel hat gerade seine Klassenarbeit korrigiert und möchte einen Notenspiegel erstellen. Dafür schreibt er sich ein Lazarus-Programm mit einem Edit-Feld edit1 (zum Eingeben einer Zensur zwischen 1 und 6) und einem Knopf button2, um die Zahl in die Statistik aufzunehmen. Der Notenspiegel wird dann immer im Memo-Feld memo1 ausgegeben. Vor dem Aufnehmen der Statistik jedoch, müssen alle Anzahlen der Noten natürlich auf Null gesetzt werden. Das geschieht mit dem Drücken von button1. Erst dann darf man mit der Eingabe beginnen.

Vorlage:Kasten blau