bertram.hafner@t-online.de Informatik 11 Seite 10 5.2 Variablenkonzept und elementare Datentypen Der aktuelle Zustand des Karol-Systems ist festgelegt durch: - Länge, Breite, Höhe der Welt - Position, Blickrichtung von Karol - Position der Ziegel, Stapelhöhe - Position der Marken Das sind die Eigenschaften des Objekts Karol bzw. seiner Welt. Karol (Zustand1) PositionX = 2 PositionY = 4 Richtung = O maxsprunghöhe = 1 Schritt()... Der aktuelle Zustand eines Objekts ist festgelegt durch seine Attribut-Werte. Ein Algorithmus führt das System von einem Zustand 1 in einen anderen Zustand 2 über: Er vollzieht einen Zustandsübergang. Eine Variable ist ein Attribut, dem nacheinander verschiedene Werte zugewiesen werden können. Auf eine Variable kann sowohl lesend als auch schreibend zugegriffen werden. Eine Konstante (z.b. Karol.maxSprunghöhe) ist ein Attribut, dem nur einmal ein Wert zugewiesen werden kann, der dann während der Programm-Ausführung nicht mehr veränderbar ist. D.h. auf eine Konstante kann nach der Initialisierung nur noch lesend zugegriffen werden. Karol (Zustand2) PositionX = 5 PositionY = 4 Richtung = S maxsprunghöhe = 1 Schritt()... Variablen / Konstanten haben einen Bezeichner (Name), einen Typ (Wertebereich, Domäne) und einen Wert (Inhalt). Sie müssen wie Objekte deklariert und instantiiert werden. Erst danach können sie mit einem Wert belegt (initialisiert) werden. In den meisten Programmiersprachen werden Variablen bei der Deklaration automatisch instantiiert (siehe Beispiel nächste Seite). Verschiedene Typen werden deswegen unterschieden, weil erstens eine Zahl weniger Speicherplatz benötigt als ein Wort und weil es für Zahlen andere Operationen gibt als für Wörter. Im Computer werden auch ganze Zahlen anders gespeichert als Kommazahlen, deswegen unterscheidet man sogar unterschiedliche Zahl-Typen. In allen Programmiersprachen gibt es zumindest die folgenden elementaren Typen und dazu die entsprechenden Operatoren: Typen Logisch (boolean) Ganzzahl (integer) Gleitpunktzahl (real, float, single, double,...) Zeichen (char) Zeichenkette (string) Operatoren / Funktionen (Delphi-Schreibweise) and or not + - * div mod inc dec + - * / round sqrt power sin cos tan ln exp Jedes Zeichen hat eine Code-Nummer. Mit ord( a ) erhält man 97, umgekehrt ergibt chr(65) das Zeichen A. + length pos copy Die Vergleichsoperatoren =, >, < können auf alle Typen angewandt werden. Vergleiche ergeben immer einen booleschen Wert (true, false). Ein Beispiel: Nimm an, dass die Variable a den Wert 3 hat und die Variable Name den Wert Meier. Dann ergibt der Ausdruck (a = 3) and (Name > L ) den Wert true. Einen solchen Ausdruck kann man dann etwa als Bedingung einer Entscheidungsanweisung verwenden: if (a = 3) and (Name > L ) then...
bertram.hafner@t-online.de Informatik 11 Seite 11 Oft ist es nötig, zwischen verschiedenen Datentypen Umwandlungen vorzunehmen. Z.B. enthält die Variable Edit1.Text einen Wert vom Typ string, auch dann, wenn es sich bei der Eingabe um eine Zahl handelt. Will man mit dem Wert rechnen, muss er in einen Zahltyp umgewandelt werden. Wichtige Typ-Umwandlungen sind in Delphi: IntToStr(), StrToInt(), FloatToStr(), StrToFloat(), Str(), Val(). Studiere vor allem für die letzten beiden die Delphi-Hilfe. String-Operationen in Delphi: Wenn s1 := Haus ; s2 := dach dann ergeben: s := s1 + s2 length(s) den Wert 8, copy(s,2,3) s[5] for i := length(s) downto 1 do Ergebnis:=Ergebnis + s[i]; den String Hausdach, den Teilstring aus (ab dem 2. Zeichen 3 Stück) das 5. Zeichen von Hausdach: d Ergebnis = hcadsuah Ein Delphi-Beispiel, in dem du die Benutzung von Konstanten und Variablen in einer Delphi-Methode sehen kannst: Deklaration (und automatische Instantiierung) Initialisierung Diese Konstanten/Variablen sind lokale Konstanten/Variablen, sie sind nur innerhalb der Methode Button1Click() deklariert und gültig. Die Deklaration muss immer zwischen dem Prozedur-Kopf und dem Schlüsselwort begin erfolgen, und zwar zuerst die Konstanten, dann die Variablen. Aufgaben: 1. Schreibe ein Programm, das mit einem ButtonClick einen Text aus einem Edit-Objekt holt und ihn rückwärts in einem zweiten Edit-Objekt ausgibt. 2. Schreibe ein Programm, wo du mit ButtonClick ein Wort in einem Text suchen und markieren kannst. Der Text soll in einem Memo stehen, das Suchwort in einem Edit. Zum Suchen benutze die String-Operation pos (siehe Delphi-Hilfe).
bertram.hafner@t-online.de Informatik 11 Seite 12 5.3 Die Syntax der Anweisungen in Delphi Alle Programmiersprachen kennen die genannten Bausteine von Algorithmen, allerdings ist die Schreibweise in jeder Sprache etwas anders. Anweisung Delphi-Syntax Beispiel Methodenaufruf Methode eines Objekts: Objekt.Methode Edit1.Clear Memo1.Lines.SaveToFile( A:/Brief.txt ) Lokale/globale Methode: Methode StrToInt( 2004 ) sqrt(144) DateToStr(Date); Wertzuweisung Objekt-Eigenschaft: Objekt.Eigenschaft := Wert Label1.Color := clred Edit1.Text := hier Name eingeben Label1.Caption := Heute ist der + DateToStr(Date); Lokale/globale Variablen: Variable := Wert a := 7 ; b := a + 0.4 ; Wiederholungen mit fester Anzahl for Zähler := Anfangswert to Endwert do Anweisung* (downto) *sollen hier mehrere Anweisungen stehen, müssen sie mit begin und end eingeklammert werden SpielBeendet := false Schulname := Gymn. Königsbrunn for i := 1 to 10 do a := a * 1.03 for k := 1 to 100 do begin q := k * k ; Listbox1.AddItem(IntToStr(q)); end mit Anfangsbedingung while Bedingung do Anweisung* while a < 100 do a := a + 7 while Name[i] <> Hafner do i := i + 1 mit Endbedingung Bedingte Anweisungen zweiseitig repeat Anweisungen until Bedingung if Bedingung then Anweisung* else Anweisung* repeat a := a+7 until a >= 100 if a mod 2 = 0 then Caption:= gerade else Caption:= ungerade einseitig if Bedingung then Anweisung* if v > 50 then Kamera.Knips Case-Anweisung (als Abkürzung für verschachtelte if-then-else-anweisungen) case Ausdruck of Case-Liste1: Anweisung1* Case-Liste2: Anweisung2* Case-Liste3: Anweisung3*... end case Klasse of 5..7: Caption:= Unterstufe ; 8..10: Caption:= Mittelstufe ; 11..13: Caption:= Oberstufe ; end;
bertram.hafner@t-online.de Informatik 11 Seite 13 5.3a Ein erstes größeres Delphi-Projekt Ohne Progammierkenntnisse in eine Entwicklungsumgebung wie Delphi einzusteigen ist schwierig. Neben den vielen mündlichen Erläuterungen im Unterricht soll das folgende Delphi-Projekt dich einführen. Dabei werde ich ohne Systematik viele Grund legende Dinge ansprechen. Ziel: Ein Windows-Programm Parabel.exe, das Scheitel und Nullstellen berechnen kann und den Graphen auf den Bildschirm zeichnet. 1. Starte eine neue Delphi-Anwendung, speichere sie in einen neuen Ordner mit Projekt speichern unter.... Speicherst du mehr als ein Projekt in einem Ordner, verlierst du (und auch Delphi) irgendwann den Überblick über die verschiedenen Dateien. Folgendes Bild zeigt den gewünschten Rohzustand der Oberfläche unseres Programms. 2. Gestalte die Oberfläche des Formulars, indem du Objekte aus der Komponenten-Palette einfügst und ihre Eigenschaften mit dem Objektinspektor einstellst. Aus der Komponenten-Palette habe ich geholt: etliche TLabel-Objekte, drei TEdit-Objekte, ein TButton- Objekt, ein TPanel-Objekt und auf dieses ein zunächst unsichtbares TPaintbox-Objekt. Mit Hilfe des Objekt-Inspektors kannst du bei den Labels Schriftgröße und Farbe anpassen. Der Eigenschaft Text der Edits gibst du am besten schon sinnvolle Anfangswerte für eine Parabel. Die Eigenschaft Caption der Labels und des Button beschriftest du wie in dem Bild. Die Eigenschaft Align der Paintbox setzt du am besten auf alclient, dann passt sie ihre Größe der Größe des übergeordneten Panel-Objekts an (auch wenn du diese veränderst). Delphi hat sich alle Einstellungen, die du mit der Maus und dem Objekt-Inspektor vorgenommen hast, in einer eigenen Datei gespeichert. Du kannst das sehen, wenn du mit Alt-F12 umschaltest. Diese Datei wirst du aber nie aktiv benötigen. Schalte also wieder zurück mit Alt-F12 in die Formular-Ansicht. 3. Ergänze in der Unit1 schrittweise den Programm-Code und teste dein Programm. Mit der Taste F12 (jetzt ohne Alt) schaltest du zur Text-Ansicht des Formulars. Das Formular Form1 ist
bertram.hafner@t-online.de Informatik 11 Seite 14 ein Objekt der Klasse TForm1. In der Unit1 ist die Klasse TForm1 deklariert. Und beim Start der Anwendung wird automatisch ein Objekt Form1 dieser Klasse erzeugt. (Selbst, wenn du später eigene Klassen entwirfst, ist doch TForm1 immer die Hauptklasse eines Delphi-Programms.) Wie du sehen kannst, hast du dieser Klasse mit der Maus schon etliche Objekte hinzugefügt. Die Unit enthält einen interface-teil, in dem alle Deklarationen stehen werden, und einen implementation-teil. Dieser nimmt den Code der Methoden auf, die wir schreiben wollen. Der Bereich zwischen TForm1 = class(tform) und private ist dem Delphi-System vorbehalten. Diesen Bereich beschreibt Delphi, wenn du mit der Maus am Formular Änderungen vornimmst. Hier solltest du weder etwas hineinschreiben noch herauslöschen. Zusätzliche Deklarationen werden wir bei private oder public einfügen. Alle Delphi-Klassen sind in Units deklariert und implementiert, die Klasse TButton etwa in der Unit StdCtrls. Deswegen fügt Delphi bei der uses-klausel die Unit StdCtrls hinzu, sobald du mit der Maus einen Button ins Formular holst. Windows-Programme sind Ereignis-gesteuert: Jede Aktion wird durch ein Ereignis ausgelöst. Unser Button1 kann auf alle möglichen Ereignisse reagieren, wir nutzen nur sein Ereignis onclick. Das bedeutet: Wir schreiben für die Klasse TForm1 eine Ereignis-Methode Button1Click(), die aufgerufen wird, sobald mit der Maus auf Button1 geklickt wird. Bei solchen Ereignis-Methoden nimmt uns Delphi einen Teil der Arbeit ab: Wenn du im Objekt-Inspektor für Button1 das Ereignis onclick auswählst, darauf doppel-klickst, dann deklariert dir Delphi in der Unit1 die Methode procedure Button1Click(Sender: TObject); und das sowohl im Interface-Teil als auch im Implementation-Teil. Du musst nur noch zwischen begin und end den Code einfügen, der bei Klick auf Button1 ausgeführt werden soll. Du siehst, dass Delphi die Deklaration dieser Methode auch oberhalb von private eingetragen hat. (Solltest du aus irgendeinem Grund eine solche Methode wieder löschen wollen, darfst du nur den Code zwischen begin und end lö- schen. Beim nächsten Programmstart verschwindet dann der leere Methoden-Kopf.) Was soll geschehen bei onclick von Button1? Vier Dinge: Aus den Edits müssen die Parameter in die Variablen a, b, und c geholt werden. Dann werden Scheitel und Nullstellen berechnet, die Ergebnisse in die Label eingetragen und schließlich der Graph in Paintbox1 gezeichnet. Die zweite und vierte Aufgabe davon sind etwas umfangreicher. Dafür schreiben wir separate Methoden: procedure berechneparabel; procedure zeichneparabel;
bertram.hafner@t-online.de Informatik 11 Seite 15 Wo werden diese Methoden deklariert? Das sind keine Ereignis-Methoden, die Delphi anlegt. Wir müssen sie selber deklarieren und implementieren. Standardmäßig deklariert man Methoden im public-bereich und Variablen im private-bereich. Delphi kennt zwei Arten von Methoden: procedure (Methode ohne Ergebniswert) und function (Methode mit Ergebniswert). Immer nach kurzen Programmierschritten speichere die Unit1, starte das Programm und verbessere die Fehler, die dir Delphi anzeigt. Ich hoffe, deine ersten Gehversuche mit Delphi gelingen. Was du unbedingt zum Einstieg in Delphi studieren musst: Die elementaren Typen und ihre Umwandlungen (S. 10 und 11 in diesem Skript) Die Delphi-Syntax der Anweisungen (S. 12 in diesem Skript) Das Zeichnen auf einem TCanvas-Objekt (S. 8ff im Skript der 10. Klasse)