Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine...

54
Erste Programme mit Lazarus Helmut Paulus Speyer, 19.04.13 Einführung in die Entwicklungsumgebung (IDE) Grundelemente der Programmiersprache Objekt-Pascal Übungen

Transcript of Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine...

Page 1: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Erste Programme mit Lazarus

Helmut Paulus Speyer, 19.04.13

Einführung in die Entwicklungsumgebung (IDE)

Grundelemente der Programmiersprache Objekt-Pascal

Übungen

Page 2: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Teil 1

Einführung in die Lazarus-Entwicklungsumgebung

Grundelemente der Programmiersprache Objekt-Pascal

Page 3: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Was ist Lazarus

Lazarus

ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die

Programmiersprache Objekt Pascal - eine Bezeichnung für mehrere Programmiersprachen-

Varianten, die Pascal um Objektorientierte Programmierung erweitern, am bekanntesten

davon ist die Programmiersprache der Entwicklungsumgebung Embarcadero Delphi, die

Delphi genannt wurde.

baut auf dem Free Pascal Compiler (FPC) auf,

seine Komponentenbibliothek (LCL) ist sehr ähnlich zu der von Delphi (VCL), ist daher höchst

kompatibel zu Delphi.

3

Lazarus-Projekt:

http://www.lazarus.freepascal.org/

Beschreibungen bei Wikipedia:

Lazarus: http://de.wikipedia.org/wiki/Lazarus_(Entwicklungsumgebung)

Objekt Pascal: http://de.wikipedia.org/wiki/Object_Pascal

Page 4: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Entwicklungsumgebung (IDE)

Komponenten-Palette

4

Objektinspektor

Formular (GUI)

Quelltextfenster

Page 5: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Lazarus-Projekt

Lazarus erzeugt eine ganze Reihe von Dateien zur Verwaltung eines Programmierprojektes. Diese Dateien sollte man immer in einem eigenen Ordner speichern. (Quellcodedateien werden als Units bezeichnet.)

Vorbereitende Schritte:

1. Ordner für das neue Projekt anlegen

2. Neues Projekt anlegen: Datei->Neu->Anwendung

3. Projektdateien sofort speichern:

(1) Datei - Alles speichern

(2) die vom System vorgeschlagen Namen unit1.pas und project1.lpr umbenennen (z. B.: ugui.pas und Rechner.lpr)

u – für Unit (Quelltextdatei)

Neben den oben genannten beiden Dateien werden automatisch im Projektordner viele weitere Dateien angelegt und laufend von Lazarus verwaltet und aktualisiert.

Beim Kompilieren wird aus den Projektdateien ein lauffähiges Programm Rechner.exe erzeugt, das anschließend ausgeführt werden kann.

5

Page 6: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Projektaufbau

Ein Projekt besteht einzelnen Units, die einer Projektdatei verwaltet werden.

6

Page 7: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Projekt Rechner

Speichern Sie den Ordner Rechner in ein eigenes Verzeichnis.

Laden und starten Sie dann das Projekt in Lazarus und testen Sie seine Funktionalität.

Analysieren Sie den Quelltext.

Führen Sie auf dem Formular einen Doppelklick auf ein Button-Objekt aus.

Was passiert?

Fügen Sie einen weiteren Button hinzu.

Lassen Sie sich über Projekt und .lpr Datei anzeigen den Quelltext der Projektdatei anzeigen.

Was geschieht dort?

Klicken Sie mit rechten Maustaste ins Formular und öffnen Sie mit Quelltext (.lfm) anzeigen

die Formulardatei. Analysieren Sie den Inhalt.

7

Page 8: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Entwicklung der GUI 8

Label1 : TLabel

PAnzeige : TPanel

EErgebnis: TEdit

Bplus : TButton

form1 : TForm1 (Formular)

GUI-Objekte (Komponenten der Komponentenpalette) werden auf dem Formular platziert und mit Hilfe des Objektinspektors (Register Eigenschaften) editiert.

GUI-Objekte haben einen Namen und gehören ein Klasse an.

Formular im Entwurfsmodus

Page 9: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Komponenten

Das Formular enthält Komponenten (GUI-Objekte) vom Typ:

• TForm, TEdit, TButton, TLabel, TPanel

Name Funktionalität

Bplus B für Button Schaltfläche

EZahl1 E für Edit Text-Eingabefeld einzeilig

PHinweis P für Panel Container für Komponenten

Lergebnis L für Label Beschriftungsfeld

Standardattribute (Eigenschaften) der GUI-Objekte:

• Caption Beschriftung einer Komponente (Aufschrift eines Buttons, Labels, Panels,…)

• Text Inhalt eines Textfeldes (Edit)

• Name Name, mit dem das Objekt im Programm angesprochen wird

Der Editor gibt den GUI-Objekten automatisch Namen, z. B. TForm1, Label1, Button1, Button2

Die Objekte sollten im Objektinspektor mit sinnvollen Namen (nach Konventionen) belegt werden; z. B.: je nach Typ des Objekts einen Präfix:

9

Sinnvolle Namenskonvention

Page 10: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Objekthierarchie

object Form1: TForm1

Left = 354

Height = 176

Top = 248

Width = 229

Caption = 'Rechner'

ClientHeight = 176

ClientWidth = 229

LCLVersion = '1.0.8.0‚

...

object EZahl1: TEdit

Left = 8

Height = 23

Top = 64

Width = 90

TabOrder = 0

end

object Bplus: TButton

Left = 32

Height = 25

Top = 136

Width = 25

Caption = '+'

OnClick = BplusClick

TabOrder = 2

end

end

Das Formularobjekt Form1 verwaltet alle anderen Objekte als Unterobjekte.

10

Die zur Entwurfszeit definierten Attributwerte werden in der so genannten Formulardatei ugui.lfm gespeichert.

Die Formulardatei wird automatisch erzeugt und

gepflegt und hat immer den gleichen Namen wie

die Quelltextdatei ugui.pas.

Page 11: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Quelltext-Interface 11

unit ugui;

{$mode objfpc}{$H+}

interface

uses

Classes, SysUtils, FileUtil, Forms,

Controls, Graphics, Dialogs, StdCtrls, ExtCtrls;

type

{ TForm1 }

TForm1 = class(TForm)

Bplus: TButton;

EZahl1: TEdit; EErgebnis: TEdit;

Label2: TLabel; Label4: TLabel;

Panel1: TPanel;

procedure BplusClick(Sender: TObject);

private

{ private declarations }

public

{ public declarations }

end;

var Form1: TForm1;

...

end.

Formularklasse TForm1

Basisklasse: Tform (automatisch)

Einbinden von Systemunits (automatisch)

Variablendeklaration (Formularobjekt)

Attribute

Ereignismethoden

Unit-Name - beim Speichern vom System geschrieben

Page 12: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

unit ugui;

...

var Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.BplusClick(Sender: TObject);

var z1: Extended; z2: Extended; sum: Extended;

begin

// Eingabe der Daten aus GUI-Objekten

z1 := StrToFloat(EZahl1.Text);

z2 := StrToFloat(EZahl2.Text);

//Verarbeitung

sum := z1 + z2;

//Ausgabe

EErgebnis.Text := FloatToStr(sum);

end;

end.

Quelltext-Implementation 12

Zugriff auf Attribute der GUI-Objekte

Ereignisbearbeitung

*.lfm Formulardatei einbinden (automatisch)

Page 13: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Projektverwaltung

program Rechner;

{$mode objfpc}{$H+}

uses

{$IFDEF UNIX}{$IFDEF UseCThreads}

cthreads,

{$ENDIF}{$ENDIF}

Interfaces, // this includes the LCL widgetset

Forms, ugui

{ you can add units after this };

{$R *.res}

begin

RequireDerivedFormResource := True;

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;

end.

Hier findet sich u. a.

die Einbindung von Units und Ressourcen

die Erzeugung des Fensterobjektes

den Start des Programms (Hauptprogramm)

13

Ein Lazarus-Projekt besteht im aus mehreren Dateien, die im einfachsten Fall alle im gleichen "Projekt-Ordner" liegen.

Die Verbindung wird durch die Projekt-Datei *.lpr hergestellt.

Diese Datei wird automatisch vom System gepflegt!

Page 14: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Überblick: Dateien des Projekts 14

Datei Inhalt

*.pas Pascal-Quellcode Datei (Unit)

*.lfm Lazarus Formulardatei – wird zu jeder Unit, in der ein Formularobjekt definiert ist, automatisch

angelegt, enthält die Formulareinstellungen einschließlich aller Komponenten

*.lpr (Lazarus Projektdatei) - das Hauptmodul (Verwaltung) des Projektes

*.exe Das lauffähige Programm, zur Benutzung ist nur diese „EXE-Datei“ erforderlich

*.lpi Lazarus Project Information - alle wichtigen Informationen des Lazarus-Projektes im XML-Format

*.lrs Resourcendatei des Lazarus-Projektes

*.ppu Compilierter Code der einer Unit, wird mit der Uses-Anweisung im Quellprogramm eingebunden

Dateien des Projektordners

(zum Teil automatisch angelegt)

Bedeutung:

Page 15: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Ereignisverarbeitung

Durch Doppelklick auf den Button Bplus wird eine Ereignismethode erzeugt und dem Methodenzeiger OnClick des Buttonobjekts zugewiesen.

Sie ist eine Methode des Formularobjekts und wird vom Buttonobjekt durch Click ausgelöst.

procedure TForm1.BplusClick(Sender: TObject);

begin

...

end;

15

• Der vom System gebildete Name enthält die Namen der auslösenden Komponente und des Methodenzeigers als Bestandteile.

• Der vorangestellte Klassenname TForm1 bindet die Prozedur an das Formularobjekt.

Ereignisse werden in Object Pascal mit Hilfe von Methodenzeigern realisiert, das sind Attribute, die Referenzen auf Methoden anderer Objekte enthalten (Callback).

Ereignismethode des OnClick - Ereignisses

Die Ereignisse des Button-Objekts sind Methodenzeiger, die mit Ereignismethoden verknüpft werden können.

Page 16: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Ereignisverarbeitung

procedure TForm1.BplusClick(Sender: TObject);

Var

z1, z2, z3, sum: double;

begin

// Einlesen der Daten aus GUI-Objekten

z1:= StrToFloat(EZahl1.Text);

z2:= StrToFloat(EZahl2.Text);

//Verarbeitung

sum := z1 + z2;

//Ausgabe

EErgebnis.Text := FloatToStr(sum);

end;

Implementierung

Ein-/ Ausgabesystem mit lokalen Variablen als temporären Zwischenspeichern!

Deklaration der lokalen

Variablen

16

Page 17: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Hilfesystem

Kontextsensitive Hilfe mit F1

LCL - Lazarus Component Library

FCL - Free Component Library

RTL - Runtime Library

Laufzeit Debugger

Haltepunkte im Quelltext setzen, an Stellen, wo das Programm halten soll, in den Rahmen neben der Quelltextzeile klicken

ab dieser Stelle können die Anweisungen schrittweise ausgeführt und mit Hilfe der Maus der Wert der Variablen angezeigt werden

17

Einzelschritt

Page 18: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Klasse Beschreibung Wichtige Eigenschaften/ Methoden

TButton Schaltfläche Caption, Color, Font, Enabled

FLabel Anzeige von Text Caption, Color, Font

Edit Einzeiliges Eingabefeld Text, Color, Font, MaxLength, Clear

TMemo Mehrzeiliges Eingabefeld Text, Lines, Append, Clear

TListBox Auswahlliste mit mehreren Textzeilen ein Items, Append, Clear

TGroupBox Rahmen zur Anordnung von Objekten mit

Gruppenbezeichnung. Caption, Color, Font

TPanel Rahmen zur Anordnung von Objekten Caption, Color, Font

TImage Anzeige von Grafiken Picture, Canvas, loadfromfile

TShape Grafische Form Brush, Pen, Shape

Standardkomponenten 18

Page 19: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Teil 2

Grundelemente Objekt-Pascal

19

Page 20: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

procedure TForm1.BplusClick(Sender: TObject);

var

z1,z2,

z3, sum : double;

begin

// Einlesen der Daten aus GUI-Objekten

z1 := StrToFloat(EZahl1.Text);

z2 := StrToFloat(EZahl2.Text);

//Verarbeitung

sum := z1 / z2;

//Ausgabe

EErgebnis.Text:=FloatToStrF(sum,ffFixed,0,2);

end;

Einstieg

Datentyp

Variablen- deklaration

Wertzuweisung

Typumwandlung double string

Bezeichner

Trennzeichen Anweisungen

Variablendeklaration

var Bezeichner : Datentyp;

Wertzuweisung

a := b ;

Die Variablen müssen zuweisungskompatibel sein!

Kommentar

20

Page 21: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Grundelemente 21

Konventionen für Bezeichner

Es dürfen nur folgende Zeichen verwendet werden

Buchstaben (aber keine Umlaute)

Zahlen, diese aber erst nach mindestens einem Buchstaben

Unterstrich (auch am Anfang)

ansonsten keine Sonderzeichen wie „,“, „;“ …

Objekt-Pascal ist nicht kontextsensitiv!

Wertzuweisungen :=

Beispiel: x := x + 1;

Vergleich: =

Anweisungsblöcke begin … end;

Kommentare //…. Bis Zeilenende

{ … } mehrzeilig

Blöcke und Kommentare Gleichheitszeichen

Page 22: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Variablen und Konstanten 22

Programmabschnitt: var

Syntax: var Bezeichner : Datentyp;

Beispiel: var

anzahl : integer;

z1, z1 : double;

Variablendeklaration Konstanten

Syntax: const Bezeichner= wert;

Beispiel: const pi = 3.14;

Konstanten haben einen unveränderlichen Wert.

Delphi-Variablen sind Platzhalter (Container) für Daten. Diese werden im Computer durch einen Speicherbereich repräsentiert und mit Hilfe eines Namens angesprochen.

Variablen haben einen Namen, einen Datentyp, einen Gültigkeitsbereich und eine Lebensdauer.

Bevor eine Variable benutzt werden kann, muss sie deklariert werden. Dabei werden der Name und der Datentyp festgelegt. Gleichzeitig wird ein Speicherbereich für den speziellen Datentyp reserviert.

Bei Wertzuweisungen muss die Zuweisungs-Kompatibiliät gewährleistet sein.

Page 23: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Elementare Datentypen

Einfache Datentypen

integer : Ganze Zahlen {17, -12}

double : Fließkommazahlen {2.675. 1.5e-10}

boolean : Wahrheitswerte {true, false}

string : Zeichenkette {‘Hallo‘}

Char : ASCII-Zeichen {‘A‘, #65, chr(65)}

23

var

Bezeichner : array[StartInd..EndInd] of Datentyp;

Arrays / Reihungen (statisch)

So definierte Array ist statisch, die Anzahl der Elemente kann nicht mehr verändert werden.

Start- und Endindex vom Typ Integer oder Aufzählungstyp

Datentyp muss ein einfacher Typ sein!

Aufzählungstypen (ordinale Typen)

Statt Zahlen konstante Bezeichner verwenden:

var

farben : (blau, gelb, gruen, rot);

Die Typen Integer und Char gehören ebenfalls zu den ordinalen Typen.

Page 24: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Typumwandlungen 24

Bei der Ein- und Ausgabe von Daten mit Hilfe von GUI-Objekten müssen häufig Datentypen konvertiert werden.

Objekt-Pascal Funktionen:

Funktion : Ergebnistyp Beispiel

StrToInt(Para) : integer

IntToStr(Para) : string

StrToFloat(Para) : real

FloatToStr(Para) : string

Formatierte Ausgabe:

FloatToStrF() : string

Char – ASCII-Zeichen

Chr(0..255) : Char

Ord(ch) : integer

groesse := StrToInt(EGroesse.Text);

PAusgabe.Caption := FloatToStr(BMI);

Siehe Kontexthilfe

PAusgabe.Caption := FloatToStrF(BMI, ffnumber, 8, 2);

Ch := Chr(65);

code := Ord(‘A‘);

Page 25: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Operatoren

Arbeiten mit Zeichenketten

Zeichenkettentexte werden in einfachen Anführungszeichen geschrieben.

Beispiel:

var Ausgabe : string;

Ausgabe := ‘Du hast ‘;

Zeichenketten kann man mit ‚+‘ aneinander hängen.

Ausgabe := Ausgabe + ‘leider verloren‘;

Die Länge einer Zeichenkette bestimmt man mit der System-Funktion „length()“.

Zugriff auf die einzelnen Zeichen einer Zeichenkette über den Index

Ausgabe[2] ‘u‘

integer / real

+, -, *, / Division ( liefert einen Realtyp bei Anwendung auf Integer z. B. 12/4)

integer

div Ganzzahldivision Beispiel: 7 div 5 1

mod Modulo Beispiel: 4 mod 3 1

Arithmetische Operatoren

25

Page 26: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Operatoren

= gleich

<> ungleich

< Kleiner

<= kleiner gleich

> Größer

>= größer gleich

Vergleichsoperatoren Logische Operatoren

AND true : wenn beide Operanden wahr

OR true : wenn einer oder beide Operanden wahr

NOT Negation des Operanden ( NOT a)

Beispiel:

var x : integer;

teilbar : boolean;

teilbar := (x mod 3 = 0) AND (x mod 5 = 0);

26

Ord() gibt die Position des Bezeichners zurück

Pred() gibt den Vorgänger zurück

Succ() gibt den Nachfolger zurück

Low() gibt den niedrigsten Wert zurück

High() gibt den höchsten Wert zurück

Funktionen zum Arbeiten mit Aufzählungstypen

Page 27: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Laufzeitfehler 27

Laufzeitfehler abfangen mit einem try-except Block

Syntax

try

Anweisungen

Except

Fehlerbehandlung

end;

except

on EZeroDivide do ...;

on EMathError do ...;

on EConvertError do ...;

else

...;

end;

Im except - Abschnitt kann die Art des Fehlers (der Exception) geprüft und individuell bearbeitet werden.

Beispiel:

try

z := StrToInt(Ezahl.Text);

Except

ShowMessage(‘Falsche Eingabe!‘);

end;

Page 28: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Fallunterscheidungen 28

Einseitig

If Ausdruck then

begin

Anweisung;

end;

zweiseitig

If Bedingung then

begin

Anweisung;

end

else

begin

Anweisung;

end;

If … then … else

kein Semikolon vor else

Mehrfachverzweigung

case OrdWert of

1 : ... ;

2 : ... ;

3 : ... ;

else ... ;

end;

Case … of

Page 29: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Schleifen

while Schleife

while Bedingung do

begin

Anweisung;

end;

Anfangsbedingung

Repeat – Schleife

repeat

Anweisung;

until Bedingung;

For –Schleife

for i := 1 to n do

begin

Anweisung;

end;

Endbedingung

var

augen : array[1..6] of integer;

for i := 1 to 6 do

augen[i] := i;

29

Schleifen über Arrays:

Zählschleife

Page 30: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Prozeduren und Funktionen

procedure Bezeichner(Parameter);

var lokale Variablen;

begin

Anweisungen;

end;

Deklarationsteil

Anweisungsteil

Die Parameterliste kann auch fehlen

30

Prozeduren

function Bezeichner(Parameter): Datentyp;

var lokale Variablen;

begin

Anweisung;

result := Ergebnis;

end;

Rückgabentyp

Funktionen

Das Ergebnis muss einen einfachen Datentyp besitzen.

Das Funktionsergebnis wird der Funkionsvariablen result zugewiesen.

Rückgabewert

Page 31: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

TForm1 = class(TForm)

private

{ Private-Deklarationen}

function Max(z1, z2 : integer): integer;

public

{ Public-Deklarationen}

end;

Methoden 31

Prozeduren und Funktionen als Methoden

function TForm1.Max(z1,z2: integer): integer;

begin

if (z1 < z2) then

result := z2

else

result := z1;

end;

Bei Methoden steht vor dem Methodennamen der Name der Bezugsklasse setzt.

Deklaration der Funktion

als private Methode von TForm1

Beispiel: Die Funktion Max als Funktion des Formular-Objekts vom Typ TForm1

Implementierung der Funktion

Als Methode von TForm1

Page 32: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Struktur einer Unit 32

unit name;

{$mode objfpc}{$H+}

interface

uses ...

Type ...

var ...

implementation

uses ...

type ...

var ...

procedure …

end.

Interface (Schnittstelle)

• Auf Alles, was hier deklariert ist, kann von außen (anderen Units) zugriffen werden.

• Typ – Vereinbarungen

• gobale Variablen und Konstanten

Implementation

• Lokale Deklarationen (nur innerhalb der Unit)

• Implementierung von Prozeduren, Funktionen (Methoden)

Kopf Schlüsselwort unit

Das System schriebt den Namen beim Speichern!

Page 33: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Projekt BMI

Mit einem Programm soll der BodyMass-Index BMI berechnet werden.

Eingaben: Gewicht in Kg, Körpergröße in m

Ausgabe: BMI-Index

Ablauf: Ereignisgesteuert

33

Schreiben Sie ein Programm, das den Body-Mass-Index einer Person ausgibt.

Page 34: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Projekt BMI

Ergänzen Sie das Programm mit einer Bewertung des BMI nach Alter. Benutzen Sie dazu die folgenden Grundlagen und die Kontexthilfe.

Alter BMI

19-24 Jahre 19-24

25-34 Jahre 20-25

35-44 Jahre 21-26

45-54 Jahre 22-27

55-64 Jahre 23-28

>64 Jahre 24-29

Die Tabelle zeigt die „wünschenswerte“ BMI-Werte für verschiedene Altersgruppen:

Weitere Informationen unter: https://www.uni-hohenheim.de/wwwin140/info/interaktives/bmi.htm

34

Page 35: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Lösung 35

procedure TGUI.BtberechnenClick(Sender: TObject);

var

gewicht,

groesse,

BMI : real;

begin

//Eingabe

gewicht := StrToFloat(EdGewicht.Text);

groesse := StrToFloat(EdGroesse.Text);

//Verarbeitung

BMI := gewicht/groesse/groesse;

//Ausgabe

PAusgabe.Caption := FloatToStr(BMI);

end;

Page 36: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Projekt Zahlenraten

Aufgabe:

Es ist ein Programm zu entwickeln, das ein Zahlenratespiel simuliert.

Anforderungen:

1. Der Computer bestimmt eine Zufallszahl (1..100), die der Spieler zu erraten hat.

2. Der Spieler hat er beliebig viele Versuche.

3. Nach jeder Zahleneingabe wird angegeben, ob die Zahl zu groß oder zu klein ist.

4. Hat der Spieler die Zahl erraten, so wird die Anzahl der Versuche und eine Bewertung ausgegeben.

5. Alle Ausgaben werden gelöscht, wenn ein neues Spiel begonnen wird.

6. Sicherheitsprüfung bei der Eingabe der Ratezahll.

7. Feldgröße über ein Edit-Feld eingelesen

Datenmodell

Anzahl der Versuche: Versuche : integer

Zu erratende Zahl: Ratezahl : integer

36

Funktion: random

z := random(N); ganzzahlige Zufallszahl z mit 0 z < N

r := random; Gleitkommazahl 0 r < 1

Zufallszahlen

Page 37: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

GUI und Datenmodell

Lösung (vorläufig)

• Realisierung eines "internen Datenmodell“ mit globalen Variablen als private Atribute des Formulars.

• Diese Variablen sind innerhalb des Formularobjekts global.

Problem

• Speicherung der Daten in den GUI-Objekten ist ineffektiv!!!

• Besser ist eine Trennung von GUI und Datenmodell

TGUI = class(TForm)

{Steuerelemente}

procedure FormCreate(Sender: TObject);

procedure BtEingabeClick(...);

private

{ Private-Deklarationen}

RateZahl : integer;

Versuche : integer;

public

{ Public-Deklarationen}

end;

Spieldaten als private Attribute des Formulars

37

procedure TGUI.BpruefenClick(...);

var

Zahl : integer;

kommentar : string;

begin

//Eingabe

Zahl := StrToInt(ETippZahl.text);

// Verarbeitung

Versuche := Versuche + 1;

if Zahl = Ratezahl then

...

end;

Lokale Variablen (temporäre Daten) Internes Datenmodell

Page 38: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Initialisierung bei Programmstart

procedure TGUI.FormCreate(Sender: TObject);

begin

randomize;

end;

38

Ereignis OnCreate des Formulars

Die zugehörige Ereignisprozedur FormCreate wird automatisch beim Start des Programms aufgerufen.

Anwendungsbeispiel:

Initialisierung des Zufallszahlengenerators des Systems durch randomize.

Dadurch wird bei jedem Programmstart eine andere Zufallszahlenfolge

erzeugt.

Page 39: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Teil 3

Übungen

Helmut Paulus Speyer, 19.04.13

Page 40: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Aufgabe 1 40

Das Schaltjahr-Problem

Die Schaltjahresregelung unseres Kalenders (Gregorianischer Kalender) lautet:

Ein Schaltjahr ist ein Jahr, dessen Jahreszahl durch 4 ohne Rest teilbar ist. Ausgenommen davon sind die Jahrhundertwechsel, es sei denn, deren Jahreszahl ist durch 400 ohne Rest teilbar.

Es kommt also alle 400 Jahre vor, dass ein Jahrhundertwechsel ein Schaltjahr erzeugt. Das Jahr 2000 ist ein solches Jahr.

Zu entwickeln ist ein Programm, das nach Eingabe einer gültigen Jahreszahl prüft, ob dieses Jahr ein Schaltjahr ist.

Page 41: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Aufgabe 2

Die Entwicklung der Weltbevölkerung schreitet rasch voran:

Im Jahr 2012 wurde die 7 Milliardengrenze überschritten. Zur Zeit wächst die Weltbevölkerung jährlich um ca. 1,2 %.

Mit Hilfe eines kleinen Programms soll die jährliche Entwicklung verfolgt werden.

Jahr : integer;

Population : double;

WFaktor : double;

Datenmodell: Interaktionen:

Aktuelle Werte eingeben und die Population des nächsten Jahres berechnen und anzeigen Aktuelle Werte eingeben und die Population des vorherigen Jahres berechnen und angezeigen

Population in 10-Jahresschritten voraus- oder zurückberechnen

41

Prototyp:

Page 42: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Aufgabe 3

Projekt 17 und 4:

Es ist ein Programm zu entwickeln, das das bekannte Kartenspiel simuliert.

Anforderungen

1. Spielkarten werden durch einen Würfel ersetzt (Wertbereich [1;...;6]).

2. Es werden Zahlen gewürfelt und aufsummiert. Der Spieler kann nach jedem Spielzug entscheiden, ob er aufhört oder weiter spielen will.

3. Ist die Summe größer als 21, so hat der Spieler verloren. Hört der Spieler bei einer Summe kleiner oder gleich 21 auf, wird noch eine Zahl gewürfelt. Ist die neue Summe immer noch kleiner oder gleich 21, so hat der Spieler verloren, andernfalls gewonnen.

4. Alle Ausgaben werden gelöscht, wenn ein neues Spiel begonnen wird.

42

Page 43: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Teil 4

• Objektorientierte Programmierung mit Objekt-Pascal

• Übungen

Page 44: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Projekt Farbenmischer 44

RGB-Farben bestehen aus einer Mischung von jeweils 3 Farben (rot - grün - blau).

Jeder Farbkanal hat 256 Abstufungen: 0 …255.

Ziel:

Zu entwickeln ist ein Programm, das beliebige RGB-Farben, sowie deren Komplementärfarbe nebeneinander angezeigt .

Beispiele:

Page 45: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Modellklasse TFarbe 45

TFarbe

- rot : integer

- gruen :integer

- blau : integer;

+ constructor create

+ getFarbe : integer;

+ setFarbe(r, g, b : integer)

+ getrot : integer

+ getgruen: integer

+ getblau : integer

private Attribute

Konstruktor

create

Objekte werden mit Hilfe von Konstruktoren erzeugt.

Dabei …

• wird der Speicherbereich eines Objekts anlegt,

• werden die Attribute mit Standardwerten belegt,

• wird eine Referenz auf das Objekt zurückgeben.

Farbmodell

öffentliche Methoden

Festlegung von:

• Zugriffsrechten (- private; + public)

• Datentypen

• Signaturen (Parameter der Methoden)

Konvention

- vorangestelltes T bei Datentypen

Konstruktoren

- constructor (Schlüsselwort)

Page 46: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

46

TFarbe

- Frot : integer

- Fgruen :integer

- Fblau : integer;

+ constructor create

+ getFarbe : integer;

+ setFarbe(r, g, b : integer)

+ getrot : integer

+ getgruen: integer

+ getblau : integer

Implementierung

unit uFarbe;

Interface

uses ...

type

TFarbe = Class

private

rot, blau, gruen : integer;

public

constructor create;

procedure setFarbe(r,g,b : integer);

function getFarbe : integer;

function getrot : integer;

function getgruen: integer;

function getblau : integer;

end; Implementation ...

1. Deklaration der Klasse im Interface

Eigene Unit für die Modellklasse: uFarbe.pas

Page 47: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Implementierung 47

...

implementation

constructor TFarbe.create;

begin

rot := 255;

gruen := 255;

blau := 255;

end;

function TFarbe.getFarbe : Integer;

begin

result := blau*256*256+Gruen*256+rot;

end;

procedure TFarbe.setFarbe(r,g,b : integer);

begin

rot := r mod 256;

gruen := g mod 256;

blau := b mod 256;

end;

...

2. Implementierung der Methoden im Implementation - Bereich der Unit

Page 48: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

GUI 48

GUI-Objekte:

TLabel

TEdit

TButton

TShape

TButton

Formular-Unit:

Page 49: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Modellobjekt verwalten 49

uses

Windows, Messages, SysUtils, Classes, uFarbe;

type

Tgui = class(TForm)

Farbmischer: TGroupBox;

Label1: TLabel;

. . .

private

{ Private-Deklarationen }

Farbe : TFarbe;

procedure aktualisiere; //Anzeigen

public

{ Public-Deklarationen }

. . .

Unit einbinden

Referenzvariable

für das Farbobjekt deklarieren

(Hat- Beziehung)

Das Formular verwaltet die GUI-Objekte und das Modellobjekt.

Page 50: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Objekte erzeugen und freigeben 50

procedure TGUI.FormCreate(...);

begin

Farbe := TFarbe.create;

...

end;

Z. B.: Erzeugung mit dem OnCreate-Ereignis

Zeiger auf ein Farbobjekt

hat-Beziehung

Zerstörung mit dem OnDestroy-Ereignis

Procedure TGUI.FormDestroy(...);

begin

Farbe.Free;

end;

Speicherbereich freigeben

geerbter Destruktor

Die GUI-Objekte, die zur Entwurfszeit ins Formular eingefügt wurden, werden automatisch erzeugt und zerstört.

Das Farbobjekt wird zur Laufzeit erzeugt und zerstört werden.

Schema:

obj := Klasse.create;

Page 51: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Aktualisierung von Model und View 51

//Datenfluss: Modell View

procedure TGUI.aktualisiere;

//Modelldaten abfragen

begin

FarbBox.brush.color := Farbe.getFarbe;

KFarbBox.brush.color := clwhite - Farbe.getFarbe;

end;

//Datenfluss: Controller Modell

procedure TGUI.okBtnClick(Sender: TObject);

//Modelldaten schreiben var r, g, b : integer; begin

r := StrToInt(Erot.text);

g := strtoint(Egruen.text);

b := strtoint(Eblau.text);

Farbe.setFarbe(r,g,b); //Werte im Modellobjekt speichern

aktualisiere; //Aktualisierung der Anzeige durch Abfragen

end;

Ereignismethode

Page 52: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

MVC-Muster 52

Ziel: Trennung von Datenhaltung und -verarbeitung, Darstellung und Steuerung.

Modell Interne Repräsentation der Daten mit Methoden zum Ändern und Abfragen

View Ansicht, Darstellung: Ein Modell kann durch mehrere Views angezeigt

werden, welche unterschiedliche Sichtweisen des Models darstellen.

Controller Steuerung: Verarbeitung der Benutzereingaben

View und Controller bilden zusammen die Benutzeroberfläche (GUI).

GUI

Fachkonzept

Model

Controller

Steuerung

View Ansicht

liest

schreibt

informiert

Page 53: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Aufgabe 1 53

1. Testen Sie das Programm ‚Farben0’ und verfolgen Sie den Ablauf mit Hilfe des Einzelschritt-

Modus.

2. Erweitern Sie das Farbemodell um folgende Methoden

a) TFarbe.getKomplement (Komplementärfarbe)

b) TFarbe.toHTML (HTML- Code)

Bsp.: #AFB055, verwenden Sie die Funktion InttoHex()

c) Binden Sie beide Methoden in die Anwendung ein.

3. Entwickeln Sie eine zweite Benutzungsoberfläche, die die RGB-Farben einzeln anzeigt. (z. B.:

in drei Shape-Komponenten)

Binden Sie das Farbmodell an die entwickelte Benutzeroberfläche an.

Page 54: Erste Programme mit Lazarus - informatik.bildung-rp.de · Was ist Lazarus Lazarus ist eine plattformunabhängige freie, Delphi-ähnliche Entwicklungsumgebung für die Programmiersprache

Links

Lazarus Tools, Tutorials …

• http://wiki.lazarus.freepascal.org/Lazarus_Documentation/de

• http://wiki.lazarus.freepascal.org/Lazarus_IDE_Tools/de#Find_Declaration

• http://wiki.lazarus.freepascal.org/Lazarus_Tutorial/de

Grundlagen ObjektPascal

• http://www.delphi-treff.de/

Unterrichtsmaterialien

Bildungsserver Informatik RP

• http://informatik.bildung-rp.de

K. Merkert: http://www.hsg-kl.de/faecher/inf/delphi/index.php

Siegfried Spolwig / Johann Penon

• http://oszhdl.be.schule.de/gymnasium/faecher/informatik/lazarus/index.html

Martin Jakobs

• http://www.martinjakobs.de/pages/objektorientierte-programmierung.php

Joachim Mohr

• http://www.kilchb.de/lektionen.html

UML-Werkzeug:

• UML-Editor : UMLed.exe http://www.kubitz-online.de

54