79
Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

Embed Size (px)

Citation preview

Page 1: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

Programmieren mit Delphi

Eine Einführungin

Grundkonzepte

Gregor Noll2008

Page 2: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 2

Delphi für die Schule ?

Delphi setzt die Tradition von Pascal fort und erweitert sie um moderne Konzepte

ObjektorientierungKlassen - Objekte - Methoden - Ereignisse

visuell unterstützte Programmierung Komponentenbibliothek VCLZusammenspiel mit UML-Werkzeugenkontextsensitives Hilfesystem - Debugger

AlternativenJava (visuell unterstützt durch einen JavaEditor)BlueJ (Objekte von Anfang an)

Page 3: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 3

Versionen

1995 - 2005 Delphi 1 - Delphi 8, Delphi 2005

2006 Turbo Delphi (BDS 2006 - Delphi 10)

hervorragende EntwicklungsumgebungVideos zu Turbo Delphi und OOP unter

http://blogs.codegear.com/nickhodges/articles/26687.aspx

kostenlose "Explorer"-Version für zu HauseSchul-Netzwerk-Lizenz 22 Plätze ca. 240,-€

2007 Delphi 2007 Prof. R2 (für Vista)

Alternative: FreePascal mit passender IDE:

Lazarus (Vers. 0.9.24 Nov.2007)

Page 4: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 4

Unsere Ziele heute ...

... Einführung in das Arbeiten mit der Entwicklungsumgebung

... Kennenlernen von Standardkomponenten... eine erste Begegnungen mit Klassen und Objekten sowie der UML... die Erstellung einfacher Programme

nach dem MVC Entwurfsprinzip... Blicke auf den Unterricht entsprechend dem neuen Grundfach Lehrplan

Page 5: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 5

Entwicklungsumgebung

Komponentenpalette

Objektinspektor

Quelltextfenster

Formular

Die IDE von Delphi 6 Professional

Programmstart

Page 6: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 6

Delphi-Projekt

Delphi erstellt automatisch ein neues ProjektSpeichern Sie es, bevor Sie etwas verändern, sofort mit Datei - Alles speichern in einen neu angelegten Ordner mit einem geeigneten Namen für das Projekt Die automatisch vorgeschlagen Namen unit1.pas und project1.dpr können Sie vorerst übernehmen. Wenn Sie die beiden Namen ändern, dann müssen sie verschieden sein. Üblicherweise stellt man dann dem Unitnamen ein m für „Modul“ voran und gibt dem Projekt einen aussagekräftigen Namen

Neben den beiden Dateien unit1.pas und project1.dpr werden automatisch im Projektordner viele weitere Dateien angelegt und laufend von Delphi verwaltet

Das neue Projekt ist ein lauffähiges Programm Wenn Sie es starten, erzeugt Delphi im Projektordner eine exe-Datei und auf dem Bildschirm ein typisches Windows-Fenster - Probieren Sie es aus!

Page 7: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 7

Projektaufbau

Von Pascal her erwarten wir eine Struktur aus Hauptprogramm und Units. Delphi-Projekte sind genauso aufgebaut:

Page 8: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 8

Ü-01: Ein erstes Programm

Kopieren Sie den Ordner 01 TagUndNacht in Ihr eigenes Verzeichnis

Laden und starten Sie dann das Projekt in Delphi und testen Sie seine FunktionalitätBeenden Sie das Programm und analysieren Sie den Quelltext Führen Sie auf dem Formular einen Doppelklick auf ein Button-Objekt aus. Was passiert?Wie kommen die Bildchen auf das Fenster?

Fügen Sie eine weitere Wolke hinzu

Lassen Sie sich über Projekt und Quelltext anzeigen das Hauptprogramm anzeigen.Was geschieht dort?

Page 9: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 9

Quelltext der Unitunit mTagUndNacht;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;

type TForm1 = class(TForm) BTag: TButton; BNacht: TButton; ImErde: TImage; ImSonne: TImage; ImMond: TImage; ImWolke1: TImage; ImWolke2: TImage; ImWolke3: TImage; procedure BTagClick(Sender: TObject); procedure BNachtClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; //Ende Klassendeklaration

var Form1: TForm1;

implementation

{$R *.DFM}

Klassendeklaration

Attribute, hier alles Objektvariable

Objektdeklaration

Methoden

Einbinden der Datei des Formularobjekts

Einbinden Systemunits eigene

Units

Page 10: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 10

unit mTagUndNacht;

interface

...

var Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.BTagClick(Sender: TObject);begin Form1.Color := clAqua; Form1.ImMond.Visible := False; Form1.ImSonne.Visible := True;end;

procedure TForm1.BNachtClick(Sender: TObject);begin Form1.Color := clBlack; Form1.ImSonne.Visible := False; Form1.ImMond.Visible := True;end;

end.

Methoden der Unit

Ereignisbehandlung

Qualifizierte Bezeichner

Lassen Sie einmal bei den Zuweisungen den 1. Teil des Bezeichners weg. Was passiert?

Zugriff auf Attribute (hier "Properties")

eines Objektes

Page 11: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 11

Quelltext des Hautprogrammsprogram TagUndNacht;

uses

Forms,

mTagUndNacht in 'mTagUndNacht.pas' {Form1};

{$R *.RES}

begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;

end.

Hier finden wir u. a.die Einbindung von Units und Ressourcendie Erzeugung des Fensterobjektesden Start des Programms

Page 12: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 12

Programmablauf

Delphiprogramme reagieren auf EreignisseWir haben keinen festen Programmablauf mehr

Ereignisse lassen sich auslösen u. a. über Maus oder Tastatur

OnClickKlicken auf ein Objekt mit der MausOnChange eine Eingabe wird verändert

Ereignisse sind Botschaften an ObjekteDie Modellierung mit Klassen und Objekten tritt deshalb in den VordergrundAlgorithmische Kenntnisse sind weiterhin wichtig (z. B. Kontrollstrukturen, Sortierverfahren)

Page 13: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 13

Klassen und Objekte

In unserem Programm begegnen wir u. a. folgenden Klassen und Objekten

Form1: TForm1

Color = ´clAqua´

Height = 270

AutoSize= false

...

procedure BTagClick()

Klassename

BTag: TButton

Caption = ´Tag´

Left = 24

Height = 25

...

BNacht: TButton

Caption =´Nacht´

Left = 168

Height = 25

...

Objektname

Klassen sind Baupläne für ObjekteObjekte sind Exemplare einer Klasse

Page 14: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 14

Objektzustand

Attribut

Eine Klasse (bzw. ein Objekt) wird u. a. über seine Attribute (Felder, Eigenschaften) bestimmt.

Die konkreten Attributwerte legen den aktuellen Zustand eines Objektes fest.

Objekt

BNacht: TButton

Caption =´Nacht´

Left = 168

Height = 25

...

Attributwert

Page 15: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 15

UML Notation

Unified Modeling Language

1995 erstmalig vorgestelltHeute die Standardnotation um ein objektorientiertes Softwaresystem zu modellierenUMLed ist ein schultaugliches UML-Werkzeug, das eine direkte Verknüpfung von Modellierung und Program-mierung in Delphi (oder auch in Java) ermöglicht

Page 16: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 16

Ein anderer Blick auf TForm1

Die Klasse TForm1 besitzt andere Klassenhat - Beziehung (Aggregation, Komposition)

Klassendiagramm

Komposition

Aggregation

Komposition

Page 17: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 17

Ü-02: Ein zweites Fenster

Die Klasse TForm1 ist ein Bauplan für Fenster. Wir sollten also problemlos ein weiteres Fenster erzeugen können

Kopieren Sie den Ordner 02 TagUndNachtF in Ihr eigenes Verzeichnis und laden Sie dann das Projekt in DelphiErgänzen Sie den Quelltext so, dass ein zweites Fenster (Formular) mit der Caption „Tag und Nacht 2“ erzeugt wird.Wie reagiert das 2. Fenster auf Ereignisse?Ergänzen Sie den Quelltext so, dass auf der Nachtseite des 2. Fensters ein Stern erscheint

Page 18: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 18

Ein Blick auf den Unterricht

Zum LP des Grundfaches Informatik hat die FDK einen möglichen Unterrichtsgang entwickelt (www.informatik-lehren.de)Hierin finden sich konkrete Vorschläge zur unterrichtlichen Umsetzung des LP

Page 19: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 19

Ü-03: BMI-Rechner

Mit einem Programm soll der BodyMass-Index BMI berechnet werden

2

in kg

( in m)

Gewicht

KörpergrößeBMI

Erstellen Sie zunächst nur die Benutzungs-oberfläche, das GraphicalUserInterface GUI

Page 20: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 20

GUI-Objekte erzeugen

Aktivieren der Komponente

anschließend auf

das Formular klicken und

positionieren GroupBox

Edit

Label

Button

Was geschieht bei der Platzierung von Komponenten ?

Page 21: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 21

Bezeichnungen

Delphi vergibt automatisch Namen an die GUI-Objekte, z. B. Label1, Button1, Button2

Besser ist es, eigene Bezeichnungen zu vergeben

Im Objektinspektor über die Eigenschaft Namez. B. : BInit B für Button

GBEingabe GB für Groupbox

LUeberschrift L für Labelusw.

Die Aufschriften von Objekten lassen sich anschließend über ihre Caption - Eigenschaft im Objektinspektor verändern oder später zur Laufzeit zuweisen

Page 22: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 22

Attribute - Methoden

Delphi trägt die Komponenten automatisch als Objektvariable in die Klasse TForm1 ein

Durch Doppelklick auf ein Objekt wird eine Ereignisbehandlungsroutine erzeugt und als Methode in der Klassendefinition eingetragen

Ereignisbehandlungsroutinen nie per Hand löschen, sondern nur den Prozedurrumpf löschen. Bei der nächsten Compilierung wird die gesamte Prozedur automatisch gelöscht

Verschiedene Objekte können die gleiche Ereignisbehandlungsroutine benutzen. Das wird im Objektinspektor eingetragen

Page 23: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 23

Eingabe und Ausgabe

Edit Komponente (Klasse TEdit)einzeiliges Feld für Eingabe und Ausgabezentrale Eigenschaft

Text ( String) antwort:=Edit1.Text; (property)

nützliche Eigenschaften/MethodenClear Edit1.Clear; (procedure)Enabled Edit1.Enabled:=true; (property)Visible Edit1.Visible:=false; (property)ReadOnly Edit1.ReadOnly:=true;(property)

nützliche EreignisseOnChangeOnEnterOnExit z. B. Prüfung der Eingabe vor dem Verlassen

Page 24: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 24

Daten auf dem GUI

Edit-Komponenten arbeiten mit Daten des Typs string. Deshalb sind Konvertierungen notwendig:

Groesse:=StrToFloat(EGroesse.text); Gewicht:=StrToFloat(EGewicht.text);

Variable GUI-Objekt

EBMI.text:= FloatToStrF(bmi,ffnumber,8,1);

Variable GUI-Objekt

Formatierte Ausgabe:FloatToStrF() mehrere Formatierungsmöglichkeiten,

meist ausreichend ist FloatToStrF(zahl,ffnumber,8,2)

Page 25: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 25

MVC Konzept

Wir wollen von Anfang an eine Trennung von Daten und ihrer Präsentation anstreben. Dies ist das Ziel des MVC-Entwurfsprinzips:

Model : enthält die Daten und die daten-

spezifischen Operationen (Algorithmen)

View : Präsentation der DatenController : verwaltet die Views und die

Benutzeraktionen

Wichtig: das Modell kennt weder die Präsen-tation (View) noch die Steuerung (Controller) und kann auf beide nicht zugreifen

Page 26: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 26

BMI - Modell

Daten und Datenoperationen sind für das BMI-Problem leicht identifizierbar:

Körpergröße : realGewicht : realBMI-Wert : realBMI Berechnungsalgorithmus

Später werden noch hinzukommenBMI-Bewertung : stringBMI Bewertungsalgorithmus

Die Daten werden als private Attribute von TForm1, die Datenoperationen als private Methoden deklariert

Page 27: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 27

BMI - Formularklasse

Datenmodell

Modellprozeduren

Zugriffsschutz++ published+ public – privat

Methodenart! Auftrag (procedure)? Anfrage (function)

Page 28: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 28

BMI - Programmierung

Erstellen Sie das komplette BMI-Programm

Was geschieht bei Fehleingaben?

Ergänzen Sie Ihr Programm mit einer Bewertung des BMI. Die dazu notwendigen Informationen finden Sie über die Google-Suche mit den Stichworten BMI Rechner Düsseldorf

Page 29: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 29

Laufzeitfehler

Fehler zur Ausführungszeit lassen sich mit einem try-except Block abfangen und mit eigenen Routinen bearbeiten

VoraussetzungDas Stoppen bei Delphi-Exceptions ist abgeschaltet. Bei Delphi 6 geschieht dies unter dem Menupunkt Tools-Debugger-Optionen-Sprachexceptions

Syntaxtry

// Anweisungen deren Laufzeitfehler abgefangen werden

except // Hinweise oder Abfangroutinen falls Fehler

(exceptions) // auftreten

end;

Page 30: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 30

Ü-04: Weltbevölkerung

Die Entwicklung der Weltbe-völkerung schreitet rasch voran: Im Jahr 2006 wurde die 6,6 Milliardengrenze überschritten. Zur Zeit wächst die Weltbevölkerung jährlich um ca. 1,2 %.

Mit Hilfe eines kleinen Programms wollen wir die jährliche Entwick-lung verfolgen.

dsw-Datenreport 2006

Ausführliche Infos unter www.dsw-online.de

Page 31: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 31

Datenmodell

Jahr : integer;Population : real;WFaktor : real;

Informationen:

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

Modellierung:

Entprechend der Aufgabe legen wir die Daten und ihren Datentyp fest:

Page 32: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 32

Ereignisse

In unserem Simulationsprogramm wollen wir zwei Ereignisse behandeln:

Benutzeraktion bzw. Ereignis:

Mausklick auf den

Button >

Mausklick auf den

Button <

Programmreaktion:

Aktuelle Werte werden eingelesen und die Population des nächsten Jahres wird berechnet und angezeigt

Aktuelle Werte werden eingelesen und die Population des vorherigen Jahres wird berechnet und angezeigt

Page 33: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 33

Datenoperationen

Für die Berechnung formulieren wir passende Prozeduren

procedure TForm1.naechstePopulation;begin Jahr := Jahr + 1; Population := Population * WFaktor;end;

procedure TForm1.vorherigePopulation;begin Jahr := Jahr -1; Population := Population / WFaktor;end;

Page 34: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 34

Programmierung

Entwerfen Sie eine eigene Benutzungs-oberfläche oder kopieren Sie sich den Ordner 05 Population in ein eigenes Verzeichnis und benutzen das vorgegebene ProgrammgerüstImplementieren Sie die Daten und Daten-operationen sowie die Ereignisbehandlungs-routinen. Beachten Sie dabei das MVC Prinzip!Wann wird nach diesem Modell die 7 Millarden Grenze überschritten? Wann wurde die 6 Millarden Grenze überschritten?

Page 35: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 35

Initialisierungen

Für das Wachstumsprogramm wäre es angenehm, wenn beim Programmstart die Daten von 2006 bereits im Formular eingetragen wären Für solche Initialisierungen wird üblicherweise eine Ereignisbehandlungsroutine benutzt, die automatisch beim Erzeugen des Fensters aufgerufen wird:

procedure TForm1.FormCreate(Sender: TObject);

begin

EJahr.Text:='2006';

EPopulation.Text:='6,6';

EWFaktor.Text:='1,2'

end;

Das Prozedurgerüst von FormCreate wird bei einem Doppelklick auf das Formular angelegt

Page 36: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 36

Hilfe von und über DelphiDelphi unterstützt die Programmentwicklung durch verschiedene Hilfsmechanismen, z. B.

Automatische Erzeugung von ProzedurgerüstenAnzeige von Eigenschaften und Methoden hinter der Eingabe eines Objektbezeichners (Strg-Space)

Aufruf eines umfassenden, verlinkten Hilfssystems über die MenüleisteKontextsensitive Hilfe mit

F1(auch im Fehlerfenster)

Page 37: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 37

Debugging

Neben dem Hilfesystem besitzt Delphi auch einen Laufzeit Debugger

Das Debugging muss unter Projekt - Optionen - Compiler aktiviert sein

Starten Sie ein Programm mit F7Verfolgen Sie den Ablauf im Quelltext und im ProgrammfensterBeachten Sie die Tooltipps unter dem Cursor im Quelltext. Sie können dazu auch Teile des Quelltextes markieren.Setzen Sie Haltepunkte im Quelltext (auf blauen Punkt klicken), starten Sie dann das Programm mit F8

Typisches Vorgehen

Page 38: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 38

Ü-05 Euklidischer Algorithmus

Eine Aufgabe aus einer Kursarbeit:Der euklidische Algorithmus (modern)

ggT(a,b)(1) r sei der Rest bei der Teilung a/b(2) ist r=0 so gib b als ggT(a,b) aus und höre auf(3) speichere b in a und r in b ab und fahre mit

(1) fort

Stelle den Algorithmus mit einem Struktogramm dar

Implementiere den Algorithmus als Funktion

Verwende zur Eingabe der beiden Zahlen je eine SpinEdit Komponente (unter "Beispiele")Das Formular soll keinen Button enthalten

Page 39: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 39

Struktogramm

Euklidischer Algorithmus dargestellt im Struktogramm mit StruktEd

ggT(a,b)(1) r sei der Rest bei

derTeilung a/b

(2) ist r=0 so gib b als ggT(a,b)aus und höre auf

(3) speichere b in a und r in b undfahre mit (1) fort

ggT nach Euklid (moderne Variante)

Eingabe: natürliche Zahlen a und b

repeat until r = 0

r := a mod b

r = 0 ?true false

Ausgabe: ggT ist ba := b

b := r

Page 40: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 40

Eingabe - Fallunterscheidung

SpinEdit (unter dem Reiter "Beispiele")Edit-Feld für ganze Zahlen Start-Wert ValueMinimalwert MinValue und Maximalwert MaxValueSchrittweite Increment

Eigenschaft checked (boolean)

CheckboxAn- und Abwahl einer Option

Gruppe sich ausschließender OptionenEigenschaft checked (boolean) bzw. ItemIndex (Zählung mit 0 beginnend; -1 bei keiner Auswahl)

Radiobutton - RadiogroupAn- und Abwahl einer Option

Page 41: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 41

Ein Blick auf den Unterricht

( Auszug aus "Ein möglicher Gang durch das Grundfach Informatik" )

Page 42: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 42

Ü-06: Euklid - alte Version

Der euklidische Algorithmus (alte Version)ggT(a,b)(1) falls a=b gib a

als ggT(a,b) aus

(2) falls a>b speichere a-b in a sonst speichere

b-a in b(3) fahre bei (1) fort

ggT nach Euklid (alte Version)

Eingabe: natürliche Zahlen a und b

while a <> b do

a > b ?true false

a := a - b b := b - a

Ausgabe: ggT ist a

Implementieren Sie den Algorithmus als alternative Methode im vorherigen Projekt

Die Auswahl soll über eine RadioGroup erfolgen

Page 43: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 43

Laufzeitmessung

Eine hochpräzise Messung der Laufzeit ist in Delphi mit folgender Befehlsfolge möglichprocedure TForm1.BZeitClick(Sender: TObject);

var a, e, f: int64;

begin QueryPerformanceFrequency(f); QueryPerformanceCounter(a); //Befehlsfolge deren Zeitdauer bestimmt werden soll QueryPerformanceCounter(e); BZeit.Caption := FloatToStrF(1000*(e-a)/f,FFNumber,8,3); //Ergebnis hier in ms

end;

(nach Easy Delphi Helper unter www.dsdt.info)

Page 44: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 44

Ü-06 Würfelspiel

Eine Aufgabe aus einer Kursarbeit:

Ein WürfelspielDu wirftst vier Würfel und gewinnst, wenn mindestens 2 Würfel die Augenzahl 5 oder 6 zeigen. Schreibe ein Programm, das die vier Augen-zahlen auf einem Panel ausgibt und feststellt, ob du gewonnen hast.

Erweiterung: Ermitteln Sie mir einer Simulation, wie groß die Chance ist, bei diesem Spiel zu gewinnen?

Page 45: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 45

Zufallszahlen

Pseudozufallszahlen in Pascalzz:=random(n) liefert ganzzahliges zz mit 0 zz < nWürfel: zz:=random(6)+1

Damit der Zufallszahlengenerator stets andere Werte liefert, wird er zu Beginn initialisiertprocedure TForm1.FormCreate(Sender: TObject);

begin

randomize;

end;

Page 46: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 46

Stringverarbeitung - Parameter

Vom System vorgegebene Funktionen und Prozeduren zur Stringverarbeitung eignen sich in besonderer Weise zur Thematisierung von Schnittstellen und ihren Parametern, z.B.

function length(S:string):Integer;function Pos(SubStr:String; S:String):Integerprocedure Delete(var S:String; Index,Count:Integer)procedure Insert(Source:String; var S:String; Index:integer)function AnsiUpperCase(S:String):String (in der Unit SysUtils)

Auf Zeichen eines Strings kann man wie auf die Elemente eines array of char zugreifenStringverarbeitung lässt sich gut in ein Programmierprojekt zur Kryptographie einbinden

Page 47: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 47

Ü-07: Eigene Stringverarbeitung

Einfache Programmierübungen ergeben sich aus Erweiterungen der Standardoperationen Schreiben Sie ein Programm, das in einem Satz jedes Vorkommen einer Zeichenfolge durch eine andere Zeichenfolge ersetzt:

papa kennt den tipmama kennt den tim

Verwenden Sie dazu die Standardoperationen pos, delete und insert

Page 48: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 48

Ein Blick auf den Unterricht

Page 49: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 49

Ein Blick auf den Unterricht

Page 50: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 50

Ü-08: Kryptographie

Cäsar-VerschlüsselungText (ohne Umlaute und Sonderzeichen) in ein Memofeld eingeben In Großbuchstaben umwandeln (AnsiUpperCase)Buchstabenverschiebung durchführen

ASCII-Tabelle: Großbuchstaben haben die Ordnungszahl ORD('A')=65 bis ORD('Z')=90Verschiebung um k (Schlüsselzahl 0<k<26) Ergebnis: 65+k ... 90+kfalls Ergebnis>90 dann Ergebnis:=Ergebnis-26neuer Buchstabe CHAR(Ergebnis)beim Entschlüsseln Subtraktion der SchlüsselzahlErgebnis: 65-k ... 90-kfalls Ergebnis<65 dann Ergebnis:=Ergebnis+26

Ergebnis in einem zweiten Memofeld ausgebenWas lässt sich beobachten? Erklärung?

Page 51: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 51

Stringliste: Ein- und Ausgabe

Memo Komponente (Klasse TMemo) mehrzeiliges Feld für Eingabe und Ausgabe

zentrale EigenschaftLines ( Stringliste) Zählung der "Lines" beginnt mit 0

nützliche Eigenschaften/Methoden für Stringlisten

Lines.Clear löscht alle Einträge (procedure)Lines.Add() fügt eine Zeile am Ende hinzuLines.Delete() Lines.Delete(0) löscht 1. ZeileLines.Count Anzahl der Zeilen (property)Lines.SaveToFile() Speichern in einem TextfileLines.LoadFromFile() Laden aus einem Textfile

Page 52: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 52

DateidialogeOpenDialog und SaveDialogKomponenten werden nur auf das Formular gebrachtder Aufruf erfolgt durch die Methode executeexecute liefert true (Ok-Button) oder false (Abbruch-Button) zurücküber die Eigenschaft filename wird auf den gewählten oder eingegebenen Dateinamen zugegriffen

Ü-09: Cäsar mit DateienErgänzung zum Projekt Cäsar

Behandlung von Umlauten, Sonderzeichen und LeerzeichenKlartext aus einer Textdatei in das Memofeld einlesen bzw. in eine Textdatei abspeichernGeheimtext aus dem Memofeld in eine Textdatei abspeichern bzw. aus einer Textdatei einlesen

Page 53: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 53

Ü-10: Wörter sortieren

Schreiben Sie ein Programm zum Sortieren einer Folge von Wörtern

Einfache Sortierverfahren sind z. B. Bubblesort oder direkte Auswahl (Sortieren durch Minimumsuche)

Beschränkung auf 10 Wörter

Eingabe über Memofeld - Ausgabe über Listbox

Sortieren mit BubblesortImport: Feld f und Feldlänge n

Export: Feld f

wiederhole bis sortiert=true

sortiert := true

für pos von 1 bis n - 1 wiederhole

f [pos] > f [pos+1] true false

vertausche f [pos] mit f [pos+1]

sortiert := false

Sortieren mit MinimumsucheImport: Feld f und Feldlänge n

Export: Feld f

für start von 1 bis n - 1 wiederhole

minpos := start

für pos von start+1 bis n wiederhole

f [pos] < f [minpos] true false

minpos := pos

vertausche f [start] mit f [minpos]

Page 54: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 54

Stringliste: Ausgabe

Listbox Komponente (Klasse TListbox)

Ausgabe einer Liste von Strings mit der Möglich-keit zum Auswählen, Löschen, Hinzufügenzentrale Eigenschaften/Methoden

Items ( Stringliste)ListBox1.Items.Add('Speyer');

Es sind alle Eigenschaften und Methoden der Stringliste möglichItemIndex Nr. des ausgewählten Strings Zählung beginnt mit 0

Nr. ist -1 falls kein String gewählt wurde (property)Sorted mit der Zuweisung true werden die Strings sortiert (property)Clear löscht alle Einträge (procedure)

Page 55: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 55

Ü-11: Mit Delphi sortieren

Delphi enthält eine eigene Sortierroutine

Eine Listbox kann über die Eigenschaft Sorted von Delphi sortiert werden: LBox1.Sorted:=trueFügen Sie einen Button zur Sortierung mit Delphi ein und vergleichen Sie das Ergebnis mit dem des eigenen VerfahrensWird jetzt alles richtig sortiert?

Page 56: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 56

Schumann Delphi für Kids (incl. Delphi 7 Personal Edition)mitp-Verlag, Bonn 2005Bähnisch Praktische Informatik mit Delphi (2 Bd.)Cornelsen, Berlin 2001 Damann-WemßenObjektorientierte Programmierung mit Delphi (2 Bd.+LB)Klett, Stuttgart 2001-2005Frischalowski Delphi 5.0 (2 Bd.)Herdt-Verlag, Nackenheim 1999

Literatur

Delphi - Schulbücher

Page 57: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 57

Binzinger DelphiMarkt+Technik, München 2004Doberenz-Kowalski Borland Delphi 6Hanser, München 2002Ebener Delphi 6 - nachschlagen und verstehenAddison-Wesley 2002

Literatur

Delphi - Allgemein

Oestereich Analyse und Design mit UML 2.1Oldenbourg, München 2006Oesterreich Die UML 2.0 Kurzreferenz für die PraxisOldenbourg, München 2006Balzert UML 2 in 5 TagenW3L Verlag, Herdecke 2005

UML

Page 58: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 58

LiteraturInternet

Eine Google-Suche mit Delphi Unterricht liefert eine unüberschaubare Vielfalt an Seiten

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

http://www.plauener.de/~lessing/delphi/delphi_v.htm

http://www.dsdt.info/grundlagen/

http://www.delphipraxis.net

(Stand: 27.3.2008)

Page 59: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 59

Viel Spaß und Erfolg

bei der weiteren Arbeit mit Delphi

Page 60: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 60

Page 61: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 61

Projektverwaltung

*.dpr Projektverwaltung (Hauptprogramm)*.pas Pascalquelltext (Unit)*.dfm Formulareinstellungen*.res Ressourcen wie Icons, Sound etc.*.dcu compilierte Unit*.dof Compiler Einstellungen*.~?? Backup Dateien *.~pa *.~dp etc.*.exe ausführbares Windows-Programm

Delphi sichert im Laufe der Projektentwick-lung eine Serien von Dateien, u. a. :

Page 62: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 62

Cäsar - DateidialogeTForm1 = class(TForm) OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog;

.... procedure BLadenGeheimClick(Sender: TObject); procedure BSpeichernGeheimClick(Sender: TObject);

procedure TForm1.BLadenGeheimClick(Sender: TObject);begin if OpenDialog1.Execute then MGeheimtext.Lines.LoadFromFile(OpenDialog1.Filename);end;

procedure TForm1.BSpeichernGeheimClick(Sender: TObject);begin if SaveDialog1.Execute then MGeheimtext.Lines.SaveToFile(SaveDialog1.Filename);end;

Page 63: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 63

Delphi-Forum

Page 64: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 64

Tag und Nacht

Page 65: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 65

Tag und Nacht mit 2 Fenster

Page 66: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 66

BMI

Page 67: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 67

BMI mit try-except

Page 68: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 68

Population

Page 69: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 69

Population mit Initialisierung

Page 70: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 70

Euklidischer Algorithmus

Page 71: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 71

Struktogrammeditor

Page 72: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 72

ggT Algorithmus zur Auswahl

Page 73: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 73

Laufzeitmessung

Page 74: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 74

Würfelspiel

Page 75: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 75

Würfelspiel mit Simulation

Page 76: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 76

Suchen und Ersetzen

Page 77: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 77

Cäsar

Page 78: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 78

Cäsar mit Dateien

Page 79: Programmieren mit Delphi Eine Einführung in Grundkonzepte Gregor Noll 2008

G.Noll 2008 79

Sortieren