Powerpoint-Präsentation

Werbung
Programmieren mit Delphi
Eine Einführung
in
Grundkonzepte
Gregor Noll
2008
Delphi für die Schule ?
Delphi setzt die Tradition von Pascal fort und
erweitert sie um moderne Konzepte
Objektorientierung
Klassen - Objekte - Methoden - Ereignisse
visuell unterstützte Programmierung
Komponentenbibliothek VCL
Zusammenspiel mit UML-Werkzeugen
kontextsensitives Hilfesystem - Debugger
Alternativen
Java (visuell unterstützt durch einen JavaEditor)
BlueJ (Objekte von Anfang an)
G.Noll 2008
2
Versionen
1995 - 2005 Delphi 1 - Delphi 8, Delphi 2005
2006 Turbo Delphi (BDS 2006 - Delphi 10)
hervorragende Entwicklungsumgebung
Videos zu Turbo Delphi und OOP unter
http://blogs.codegear.com/nickhodges/articles/26687.aspx
kostenlose "Explorer"-Version für zu Hause
Schul-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)
G.Noll 2008
3
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
G.Noll 2008
4
Entwicklungsumgebung
Die IDE von Delphi 6 Professional
Komponentenpalette
Programmstart
Quelltextfenster
Objektinspektor
Formular
G.Noll 2008
5
Delphi-Projekt
Delphi erstellt automatisch ein neues Projekt
Speichern 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!
G.Noll 2008
6
Projektaufbau
Von Pascal her erwarten wir eine Struktur
aus Hauptprogramm und Units. DelphiProjekte sind genauso aufgebaut:
G.Noll 2008
7
Ü-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ät
Beenden 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?
G.Noll 2008
8
Quelltext der Unit
unit mTagUndNacht;
interface
Einbinden Systemunits
eigene Units
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
Klassendeklaration
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
Attribute, hier alles
Objektvariable
var
Form1: TForm1;
implementation
{$R *.DFM}
G.Noll 2008
Methoden
Objektdeklaration
Einbinden der Datei des
Formularobjekts
9
Methoden der Unit
unit mTagUndNacht;
interface
...
var
Form1: TForm1;
Ereignisbehandlung
implementation
{$R *.DFM}
procedure TForm1.BTagClick(Sender: TObject);
begin
Form1.Color := clAqua;
Form1.ImMond.Visible := False;
Form1.ImSonne.Visible := True;
end;
Zugriff auf Attribute
(hier "Properties") eines
Objektes
procedure TForm1.BNachtClick(Sender: TObject);
begin
Form1.Color := clBlack;
Form1.ImSonne.Visible := False;
Form1.ImMond.Visible := True;
end;
Qualifizierte Bezeichner
end.
G.Noll 2008
Lassen Sie einmal bei den Zuweisungen den 1.
Teil des Bezeichners weg. Was passiert?
10
Quelltext des Hautprogramms
program 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 Ressourcen
die Erzeugung des Fensterobjektes
den Start des Programms
G.Noll 2008
11
Programmablauf
Delphiprogramme reagieren auf Ereignisse
Wir haben keinen festen Programmablauf mehr
Ereignisse lassen sich auslösen u. a. über
Maus oder Tastatur
OnClick
Klicken auf ein Objekt mit der Maus
OnChange eine Eingabe wird verändert
Ereignisse sind Botschaften an Objekte
Die Modellierung mit Klassen und Objekten tritt
deshalb in den Vordergrund
Algorithmische Kenntnisse sind weiterhin wichtig
(z. B. Kontrollstrukturen, Sortierverfahren)
G.Noll 2008
12
Klassen und Objekte
In unserem Programm begegnen wir u. a.
folgenden Klassen und Objekten
Klassename
Objektname
Form1: TForm1
BTag: TButton
BNacht: TButton
Color
= ´clAqua´
Caption
= ´Tag´
Caption
=´Nacht´
Height
= 270
Left
= 24
Left
= 168
AutoSize = false
Height
= 25
Height
= 25
...
...
...
procedure BTagClick()
Klassen sind Baupläne für Objekte
Objekte sind Exemplare einer Klasse
G.Noll 2008
13
Objektzustand
Objekt
BNacht: TButton
Attribut
Caption
=´Nacht´
Left
= 168
Height
= 25
Attributwert
...
Eine Klasse (bzw. ein Objekt) wird u. a. über
seine Attribute (Felder, Eigenschaften)
bestimmt.
Die konkreten Attributwerte legen den
aktuellen Zustand eines Objektes fest.
G.Noll 2008
14
UML Notation
Unified Modeling Language
1995 erstmalig vorgestellt
Heute die Standardnotation
um ein objektorientiertes
Softwaresystem zu
modellieren
UMLed ist ein schultaugliches
UML-Werkzeug, das eine
direkte Verknüpfung von
Modellierung und Programmierung in Delphi (oder auch
in Java) ermöglicht
G.Noll 2008
15
Ein anderer Blick auf TForm1
Die Klasse TForm1 besitzt andere Klassen
hat - Beziehung (Aggregation, Komposition)
Klassendiagramm
Komposition
Aggregation
G.Noll 2008
16
Ü-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 Delphi
Ergä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
G.Noll 2008
17
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
G.Noll 2008
18
Ü-03: BMI-Rechner
Mit einem Programm soll der BodyMassIndex BMI berechnet werden
BMI 
Gewicht in kg
(Körpergröße in m)2
Erstellen Sie zunächst nur die Benutzungsoberfläche, das GraphicalUserInterface GUI
G.Noll 2008
19
GUI-Objekte erzeugen
Aktivieren der
Komponente
Label
anschließend
auf
das Formular
klicken und
positionieren
Edit
GroupBox
Button
Was geschieht bei der Platzierung von Komponenten ?
G.Noll 2008
20
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 Name
z. B. :
BInit
GBEingabe
LUeberschrift
usw.
B für Button
GB für Groupbox
L für Label
Die Aufschriften von Objekten lassen sich
anschließend über ihre Caption - Eigenschaft im
Objektinspektor verändern oder später zur
Laufzeit zuweisen
G.Noll 2008
21
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
G.Noll 2008
22
Eingabe und Ausgabe
Edit Komponente
(Klasse TEdit)
einzeiliges Feld für Eingabe und Ausgabe
zentrale Eigenschaft
Text ( String)
antwort:=Edit1.Text; (property)
nützliche Eigenschaften/Methoden
Clear
Enabled
Visible
ReadOnly
Edit1.Clear;
Edit1.Enabled:=true;
Edit1.Visible:=false;
Edit1.ReadOnly:=true;
(procedure)
(property)
(property)
(property)
nützliche Ereignisse
OnChange
OnEnter
OnExit z. B. Prüfung der Eingabe vor dem Verlassen
G.Noll 2008
23
Daten auf dem GUI
Edit-Komponenten arbeiten mit Daten des
Typs string. Deshalb sind Konvertierungen
notwendig:
Variable
GUI-Objekt
Groesse:=StrToFloat(EGroesse.text);
Gewicht:=StrToFloat(EGewicht.text);
Variable
GUI-Objekt
EBMI.text:= FloatToStrF(bmi,ffnumber,8,1);
Formatierte Ausgabe:
FloatToStrF()
G.Noll 2008
mehrere Formatierungsmöglichkeiten,
meist ausreichend ist
FloatToStrF(zahl,ffnumber,8,2)
24
MVC Konzept
Wir wollen von Anfang an eine Trennung von
Daten und ihrer Präsentation anstreben. Dies
ist das Ziel des MVC-Entwurfsprinzips:
Model
View
Controller
: enthält die Daten und die datenspezifischen Operationen
(Algorithmen)
: Präsentation der Daten
: verwaltet die Views und die
Benutzeraktionen
Wichtig: das Modell kennt weder die Präsentation (View) noch die Steuerung (Controller)
und kann auf beide nicht zugreifen
G.Noll 2008
25
BMI - Modell
Daten und Datenoperationen sind für das
BMI-Problem leicht identifizierbar:
Körpergröße : real
Gewicht : real
BMI-Wert : real
BMI Berechnungsalgorithmus
Später werden noch hinzukommen
BMI-Bewertung : string
BMI Bewertungsalgorithmus
Die Daten werden als private Attribute von
TForm1, die Datenoperationen als private
Methoden deklariert
G.Noll 2008
26
BMI - Formularklasse
Zugriffsschutz
++ published
+ public
–
privat
Methodenart
!
?
Auftrag (procedure)
Anfrage (function)
Datenmodell
Modellprozeduren
G.Noll 2008
27
BMI - Programmierung
Erstellen Sie das komplette BMI-Programm
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
Was geschieht bei Fehleingaben?
G.Noll 2008
28
Laufzeitfehler
Fehler zur Ausführungszeit lassen sich mit
einem try-except Block abfangen und mit
eigenen Routinen bearbeiten
Syntax
try
// Anweisungen deren Laufzeitfehler abgefangen werden
except
// Hinweise oder Abfangroutinen falls Fehler (exceptions)
// auftreten
end;
Voraussetzung
Das Stoppen bei Delphi-Exceptions ist abgeschaltet. Bei Delphi
6 geschieht dies unter dem Menupunkt Tools-DebuggerOptionen-Sprachexceptions
G.Noll 2008
29
Ü-04: Weltbevölkerung
Die Entwicklung der Weltbevö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 Entwicklung verfolgen.
G.Noll 2008
dsw-Datenreport 2006
Ausführliche Infos unter
www.dsw-online.de
30
Datenmodell
Entprechend der Aufgabe legen wir die Daten
und ihren Datentyp fest:
Informationen:
Im Jahr 2006 wurde die
6,6 Milliardengrenze
überschritten. Zur Zeit
wächst die Weltbevölkerung
jährlich um ca. 1,2 %.
G.Noll 2008
Modellierung:
Jahr
Population
WFaktor
: integer;
: real;
: real;
31
Ereignisse
In unserem Simulationsprogramm wollen wir
zwei Ereignisse behandeln:
G.Noll 2008
Benutzeraktion
bzw. Ereignis:
Programmreaktion:
Mausklick auf den
Button >
Aktuelle Werte werden eingelesen
und die Population des nächsten
Jahres wird berechnet und angezeigt
Mausklick auf den
Button <
Aktuelle Werte werden eingelesen
und die Population des vorherigen
Jahres wird berechnet und angezeigt
32
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;
G.Noll 2008
33
Programmierung
Entwerfen Sie eine eigene Benutzungsoberfläche oder kopieren Sie sich den
Ordner 05 Population in ein eigenes
Verzeichnis und benutzen das vorgegebene
Programmgerüst
Implementieren Sie die Daten und Datenoperationen sowie die Ereignisbehandlungsroutinen.
Beachten Sie dabei das MVC Prinzip!
Wann wird nach diesem Modell die 7
Millarden Grenze überschritten? Wann wurde
die 6 Millarden Grenze überschritten?
G.Noll 2008
34
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
G.Noll 2008
35
Hilfe von und über Delphi
Delphi unterstützt die Programmentwicklung
durch verschiedene Hilfsmechanismen, z. B.
Automatische Erzeugung von Prozedurgerüsten
Anzeige von Eigenschaften und Methoden hinter
der Eingabe eines Objektbezeichners (Strg-Space)
Aufruf eines umfassenden,
verlinkten Hilfssystems über
die Menüleiste
Kontextsensitive Hilfe mit F1
(auch im Fehlerfenster)
G.Noll 2008
36
Debugging
Neben dem Hilfesystem besitzt Delphi auch
einen Laufzeit Debugger
Das Debugging muss unter Projekt Optionen - Compiler aktiviert sein
Typisches Vorgehen
Starten Sie ein Programm mit F7
Verfolgen Sie den Ablauf im Quelltext
und im Programmfenster
Beachten 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
G.Noll 2008
37
Ü-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
G.Noll 2008
38
Struktogramm
Euklidischer Algorithmus dargestellt im
Struktogramm mit StruktEd
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 und
fahre mit (1) fort
G.Noll 2008
ggT nach Euklid (moderne Variante)
Eingabe: natürliche Zahlen a und b
r := a mod b
r=0?
true
false
a := b
Ausgabe: ggT ist b
b := r
repeat until r = 0
39
Eingabe - Fallunterscheidung
SpinEdit
(unter dem Reiter "Beispiele")
Edit-Feld für ganze Zahlen
Start-Wert Value
Minimalwert MinValue und Maximalwert MaxValue
Schrittweite Increment
Radiobutton - Radiogroup
An- und Abwahl einer Option
Gruppe sich ausschließender Optionen
Eigenschaft checked (boolean) bzw. ItemIndex
(Zählung mit 0 beginnend; -1 bei keiner Auswahl)
Checkbox
An- und Abwahl einer Option
Eigenschaft checked (boolean)
G.Noll 2008
40
Ein Blick auf den Unterricht
( Auszug aus "Ein möglicher Gang durch das Grundfach Informatik" )
G.Noll 2008
41
Ü-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
a := a - b
false
b := b - a
Ausgabe: ggT ist a
Implementieren Sie den Algorithmus als
alternative Methode im vorherigen Projekt
Die Auswahl soll über eine RadioGroup erfolgen
G.Noll 2008
42
Laufzeitmessung
Eine hochpräzise Messung der Laufzeit ist in
Delphi mit folgender Befehlsfolge möglich
procedure 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)
G.Noll 2008
43
Ü-06 Würfelspiel
Eine Aufgabe aus einer Kursarbeit:
Ein Würfelspiel
Du wirftst vier Würfel und gewinnst, wenn
mindestens 2 Würfel die Augenzahl 5 oder 6
zeigen.
Schreibe ein Programm, das die vier Augenzahlen 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?
G.Noll 2008
44
Zufallszahlen
Pseudozufallszahlen in Pascal
zz:=random(n)
liefert ganzzahliges zz mit 0  zz < n
Würfel: zz:=random(6)+1
Damit der Zufallszahlengenerator stets
andere Werte liefert, wird er zu Beginn
initialisiert
procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
end;
G.Noll 2008
45
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):Integer
procedure 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 zugreifen
Stringverarbeitung lässt sich gut in ein
Programmierprojekt zur Kryptographie
einbinden
G.Noll 2008
46
Ü-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 tip
mama kennt den tim
Verwenden Sie dazu die Standardoperationen pos,
delete und insert
G.Noll 2008
47
Ein Blick auf den Unterricht
G.Noll 2008
48
Ein Blick auf den Unterricht
G.Noll 2008
49
Ü-08: Kryptographie
Cäsar-Verschlüsselung
Text (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')=90
Verschiebung um k (Schlüsselzahl 0<k<26)
Ergebnis: 65+k ... 90+k
falls Ergebnis>90 dann Ergebnis:=Ergebnis-26
neuer Buchstabe CHAR(Ergebnis)
beim Entschlüsseln Subtraktion der Schlüsselzahl
Ergebnis: 65-k ... 90-k
falls Ergebnis<65 dann Ergebnis:=Ergebnis+26
Ergebnis in einem zweiten Memofeld ausgeben
Was lässt sich beobachten? Erklärung?
G.Noll 2008
50
Stringliste: Ein- und Ausgabe
Memo Komponente
(Klasse TMemo)
mehrzeiliges Feld für Eingabe und Ausgabe
zentrale Eigenschaft
Lines ( Stringliste) Zählung der "Lines" beginnt mit 0
nützliche Eigenschaften/Methoden für Stringlisten
Lines.Clear
Lines.Add()
Lines.Delete()
Lines.Count
Lines.SaveToFile()
Lines.LoadFromFile()
G.Noll 2008
löscht alle Einträge (procedure)
fügt eine Zeile am Ende hinzu
Lines.Delete(0) löscht 1. Zeile
Anzahl der Zeilen (property)
Speichern in einem Textfile
Laden aus einem Textfile
51
Ü-09: Cäsar mit Dateien
Ergänzung zum Projekt Cäsar
Behandlung von Umlauten, Sonderzeichen und Leerzeichen
Klartext aus einer Textdatei in das Memofeld einlesen bzw.
in eine Textdatei abspeichern
Geheimtext aus dem Memofeld in eine Textdatei
abspeichern bzw. aus einer Textdatei einlesen
Dateidialoge
OpenDialog
und SaveDialog
Komponenten werden nur auf das Formular gebracht
der Aufruf erfolgt durch die Methode execute
execute liefert true (Ok-Button) oder false (Abbruch-Button)
zurück
über die Eigenschaft filename wird auf den gewählten oder
eingegebenen Dateinamen zugegriffen
G.Noll 2008
52
Ü-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 Bubblesort
Sortieren mit Minimumsuche
Import: Feld f und Feldlänge n
Export: Feld f
Import: Feld f und Feldlänge n
Export: Feld f
sortiert := true
für start von 1 bis n - 1 wiederhole
für pos von 1 bis n - 1 wiederhole
minpos := start
f [pos] > f [pos+1]
true
für pos von start+1 bis n wiederhole
false
f [pos] < f [minpos]
vertausche f [pos] mit f [pos+1]
sortiert := false
wiederhole bis sortiert=true
G.Noll 2008
true
false
minpos := pos
vertausche f [start] mit f [minpos]
53
Stringliste: Ausgabe
Listbox Komponente
(Klasse TListbox)
Ausgabe einer Liste von Strings mit der Möglichkeit zum Auswählen, Löschen, Hinzufügen
zentrale Eigenschaften/Methoden
Items ( Stringliste) ListBox1.Items.Add('Speyer');
Es sind alle Eigenschaften und
Methoden der Stringliste möglich
ItemIndex
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)
G.Noll 2008
54
Ü-11: Mit Delphi sortieren
Delphi enthält eine eigene Sortierroutine
Eine Listbox kann über die Eigenschaft Sorted von Delphi
sortiert werden: LBox1.Sorted:=true
Fügen Sie einen Button zur Sortierung mit Delphi ein und
vergleichen Sie das Ergebnis mit dem des eigenen
Verfahrens
Wird jetzt alles richtig sortiert?
G.Noll 2008
55
Literatur
Delphi - Schulbücher
Schumann Delphi für Kids (incl. Delphi 7 Personal Edition)
mitp-Verlag, Bonn 2005
Bähnisch Praktische Informatik mit Delphi (2 Bd.)
Cornelsen, Berlin 2001
Damann-Wemßen
Objektorientierte Programmierung mit Delphi (2 Bd.+LB)
Klett, Stuttgart 2001-2005
Frischalowski Delphi 5.0 (2 Bd.)
Herdt-Verlag, Nackenheim 1999
G.Noll 2008
56
Literatur
Delphi - Allgemein
Binzinger Delphi
Markt+Technik, München 2004
Doberenz-Kowalski Borland Delphi 6
Hanser, München 2002
Ebener Delphi 6 - nachschlagen und verstehen
Addison-Wesley 2002
UML
Oestereich Analyse und Design mit UML 2.1
Oldenbourg, München 2006
Oesterreich Die UML 2.0 Kurzreferenz für die Praxis
Oldenbourg, München 2006
Balzert UML 2 in 5 Tagen
W3L Verlag, Herdecke 2005
G.Noll 2008
57
Literatur
Internet
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)
G.Noll 2008
58
Viel Spaß und Erfolg
bei der weiteren Arbeit
mit Delphi
G.Noll 2008
59
G.Noll 2008
60
Projektverwaltung
Delphi sichert im Laufe der Projektentwicklung eine Serien von Dateien, u. a. :
*.dpr
*.pas
*.dfm
*.res
*.dcu
*.dof
*.~??
*.exe
G.Noll 2008
Projektverwaltung (Hauptprogramm)
Pascalquelltext (Unit)
Formulareinstellungen
Ressourcen wie Icons, Sound etc.
compilierte Unit
Compiler Einstellungen
Backup Dateien *.~pa *.~dp etc.
ausführbares Windows-Programm
61
Cäsar - Dateidialoge
TForm1 = 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;
G.Noll 2008
62
Delphi-Forum
G.Noll 2008
63
Tag und Nacht
G.Noll 2008
64
Tag und Nacht mit 2 Fenster
G.Noll 2008
65
BMI
G.Noll 2008
66
BMI mit try-except
G.Noll 2008
67
Population
G.Noll 2008
68
Population mit Initialisierung
G.Noll 2008
69
Euklidischer Algorithmus
G.Noll 2008
70
Struktogrammeditor
G.Noll 2008
71
ggT Algorithmus zur Auswahl
G.Noll 2008
72
Laufzeitmessung
G.Noll 2008
73
Würfelspiel
G.Noll 2008
74
Würfelspiel mit Simulation
G.Noll 2008
75
Suchen und Ersetzen
G.Noll 2008
76
Cäsar
G.Noll 2008
77
Cäsar mit Dateien
G.Noll 2008
78
Sortieren
G.Noll 2008
79
Herunterladen