Upload
sjoerd-schlater
View
109
Download
3
Embed Size (px)
Citation preview
DatenstrukturenDatenstrukturen
Klaus Becker(2002)
2
KB
Date
nst
ruktu
renÜbersichtÜbersicht
Teil 1: Die Datenstruktur „Reihung“
Teil 2: Die Datenstruktur „Verbund“
Teil 3: Die Datenstruktur „Datei“
Teil 4: Zusammenfassung und Ausblick
3
KB
Date
nst
ruktu
ren
Teil 1Teil 1
Die Datenstruktur „Reihung“
4
KB
Date
nst
ruktu
ren
LottoLotto
5
KB
Date
nst
ruktu
ren
ProblembeschreibungProblembeschreibung
Ziel:Mit Hilfe eines Programms soll das Ausfüllen von Lottoscheinen, die Ziehung der Lottozahlen und die Auswertung des Lottoscheins simuliert werden.
Anforderungen an das zu entwickelnde System:- Der Benutzer kann (wie bei einem richtigen Lottoschein) auf einem Tippzettel Zahlen ankreuzen.- Per Mausklick wird eine Ziehung der Lottozahlen simuliert.- Die Anzahl der Richtigen wird bestimmt und dem Benutzer mitgeteilt.
(vgl. auch U. Mayr: informatikag.bildung-rp.de/html/delphi_teil_1.html)
Ziel:Mit Hilfe eines Programms soll das Ausfüllen von Lottoscheinen, die Ziehung der Lottozahlen und die Auswertung des Lottoscheins simuliert werden.
Anforderungen an das zu entwickelnde System:- Der Benutzer kann (wie bei einem richtigen Lottoschein) auf einem Tippzettel Zahlen ankreuzen.- Per Mausklick wird eine Ziehung der Lottozahlen simuliert.- Die Anzahl der Richtigen wird bestimmt und dem Benutzer mitgeteilt.
(vgl. auch U. Mayr: informatikag.bildung-rp.de/html/delphi_teil_1.html)
6
KB
Date
nst
ruktu
ren
BenutzungsoberflächeBenutzungsoberfläche
CheckBox3: TCheckBox
Bziehung: TButton
PZiehung: TPanel
PAuswertung:
TPanelPTipp: TPanel
BNeu: TButton
7
KB
Date
nst
ruktu
ren
EreignisbehandlungEreignisbehandlung
Ereignisse:
Mausklick auf CheckBox-Element
Mausklick auf Ziehung-Button
Mausklick auf Neu-Button
Programmstart
Aktionen:
Die entsprechende Zahl wird im Tipp aufgenommen und angezeigt.
Es wird eine Ziehung der Lottozahlen simuliert. Das Ergebnis der Ziehung wird angezeigt. Der Tipp wird ausgewertet und die Anzahl der Richtigen angezeigt.
Ein neuer Tippzettel wird vorbereitet (keine Zahl angekreuzt). Die alten Ziehungsergebnisse werden gelöscht.
Initialisierung der Zustandsvariablen
Lotto - Benutzungsoberfläche
8
KB
Date
nst
ruktu
ren
EreignisbehandlungEreignisbehandlung
Ereignisse:
Mausklick auf CheckBox-Element
Mausklick auf Ziehung-Button
Mausklick auf Neu-Button
Programmstart
Aktionen:
Die entsprechende Zahl wird im Tipp aufgenommen und angezeigt, sofern der Tipp noch keine 6 Zahlen enthält.
Es wird eine Ziehung der Lottozahlen simuliert. Das Ergebnis der Ziehung wird angezeigt. Der Tipp wird ausgewertet und die Anzahl der Richtigen angezeigt.
Ein neuer Tippzettel wird vorbereitet (keine Zahl angekreuzt). Die alten Ziehungsergebnisse werden gelöscht.
Initialisierung der Zustandsvariablen
Verbesserungsmöglichkeit
9
KB
Date
nst
ruktu
ren
Datenmodellierung – Version 1Datenmodellierung – Version 1
Lottoziehung: 2; 21; 25; 33; 43; 45
Schwierigkeit:
Das Erstellen von Algorithmen zur Datenverarbeitung erfordert viel Schreibaufwand: gleiche Anweisungen für strukturgleiche Variablen.
type tLottozahl = 1..49;
var Zahl1 : tLottozahl; Zahl2 : tLottozahl; Zahl3 : tLottozahl; Zahl4 : tLottozahl; Zahl5 : tLottozahl; Zahl6 : tLottozahl;
21
Zahl2:
2Zahl1:
33
Zahl4:
25
Zahl3:
45
Zahl6:
43
Zahl5:
Deklaration: Variablenzustand:
10
KB
Date
nst
ruktu
ren
Datenmodellierung – Version 2Datenmodellierung – Version 2
Lottoziehung: 2; 21; 25; 33; 43; 45
Reihung / Array / Feld:
Eine Reihung fasst strukturgleiche Daten zu einer Einheit zusammen. Auf die einzelnen Elemente der Reihung wird über einen Index zugegriffen.
21
Zahl2:
2Zahl1:
33
Zahl4:
25
Zahl3:
45
Zahl6:
43
Zahl5:
Variablenzustand:
2Ziehung: 21
25
33
43
451 2 3 4 5 6
Reihung
Element
Index
11
KB
Date
nst
ruktu
ren
Deklaration einer ReihungDeklaration einer Reihung
Lottoziehung: 2; 21; 25; 33; 43; 45
...Ziehung: ... ... ... ... ...
1 2 3 4 5 6
type tLottozahl = 1..49; tZiehung = array[1..6] of tLottozahl;
var Ziehung : tZiehung;
Deklaration:
Variablenzustand:
Syntax:
array [ <Indexbereich> ] of <Elementtyp>
12
KB
Date
nst
ruktu
ren
Verarbeitung einer ReihungVerarbeitung einer Reihung
type tLottozahl = 1..49; tZiehung = array [1..6] of tLottozahl;
var Ziehung, Tipp: tZiehung;
Deklaration:
Zugriff auf die Elemente:
Ziehung[1] := random(49)+1;if Ziehung[1] = Tipp[1] then ...
Kopieren ganzer Reihungen:
Tipp := Ziehung;
Ein Vergleich ganzer Reihungen ist so nicht möglich:
if Tipp = Ziehung then ...
13
KB
Date
nst
ruktu
ren
Ziehung der LottozahlenZiehung der Lottozahlen
type tLottozahl = 1..49; tZiehung = array [1..6] of tLottozahl;
var Ziehung, Tipp: tZiehung;
Deklaration:
Algorithmus:
randomize;
for i := 1 to 6 do
Ziehung[i] := random(49)+1;
Beachte: Der Algorithmus ist nicht korrekt.
Typische Schleifenstrukt
ur
14
KB
Date
nst
ruktu
ren
Alternatives DatenmodellAlternatives Datenmodell
Lottoziehung: 2; 21; 25; 33; 43; 45
fZiehung: t f f f f
1 2 3 4 5 6
type tZiehung = array [1..49] of boolean;
var Ziehung : tZiehung;
Deklaration:
Datenmodell:
... f t f f f f
44
45
46
47
48
49
...
15
KB
Date
nst
ruktu
ren
Übungen: Aufgabe 1Übungen: Aufgabe 1
Erstellen Sie einen (korrekten) Algorithmus zur Simulation der Ziehung der Lottozahlen.
- Überlegen Sie sich zunächst den gewünschten Ablauf.
- Beschreiben Sie ihn anschließend mit geeigneten Kontrollstrukturen und Anweisungen.
Gehen Sie von folgender Modellierung aus:
type tZiehung = array [1..49] of boolean;
var Ziehung: tZiehung;
procedure Lottoziehung;begin...end;
16
KB
Date
nst
ruktu
ren
LösungsvorschlagLösungsvorschlag
17
KB
Date
nst
ruktu
ren
Übungen: Aufgabe 2Übungen: Aufgabe 2
Erstellen Sie einen Algorithmus zur Auswertung eines Tipps bzgl. einer Lottoziehung.
- Überlegen Sie sich zunächst den gewünschten Ablauf.
- Beschreiben Sie ihn anschließend mit geeigneten Kontrollstrukturen und Anweisungen.
Gehen Sie von folgender Modellierung aus:
type tZiehung = array [1..49] of boolean;
var Tipp : tZiehung; Ziehung : tZiehung; Richtige : integer;
procedure Auswertung;begin...end;
18
KB
Date
nst
ruktu
ren
LösungsvorschlagLösungsvorschlag
19
KB
Date
nst
ruktu
ren
Aufgabe 1 – LösungsvorschlagAufgabe 1 – Lösungsvorschlag
type tZiehung = array [1..49] of boolean;
var Ziehung: tZiehung;
procedure Lottoziehung; var i: integer; n: integer; h: integer;beginrandomize;for i := 1 to 49 do Ziehung[i] := false;for n := 1 to 6 do begin repeat h := random(49)+1; until Ziehung[h] = false; Ziehung[h] := true; end;end;
20
KB
Date
nst
ruktu
ren
Aufgabe 2 – LösungsvorschlagAufgabe 2 – Lösungsvorschlag
type tZiehung = array [1..49] of boolean;
var Tipp : tZiehung; Ziehung : tZiehung; Richtige : integer;
procedure Auswertung; var i: integer;beginRichtige := 0;for i := 1 to 49 do if Tipp[i] and Ziehung[i] then inc(Richtige);end;
21
KB
Date
nst
ruktu
ren
Ein Objektmodell für den TippzettelEin Objektmodell für den Tippzettel
type
TForm1 = class(TForm) GBTippzettel: TGroupBox; PTipp: TPanel; CheckBox1: TCheckBox; CheckBox2: TCheckBox; CheckBox3: TCheckBox; CheckBox4: TCheckBox; ...
CheckBox1: TCheckBoxAttribute
Caption : 1
Enabled : true
State : cbUnchecked
...Ereignisse
OnClick: CheckBoxClick
...Methoden
...
Beachte:
Allen TCheckBox-Objekten ist dieselbe Ereignisbehandlungs-methode zugewiesen.
22
KB
Date
nst
ruktu
ren
EreignisbehandlungEreignisbehandlung
procedure TForm1.CheckBoxClick(Sender: TObject); var CB : TCheckBox; Ausgabe : string; i : integer; Zahl : integer;
begin// Aktualisierung des DatenmodellsCB := TCheckBox(Sender); Zahl := StrToInt(CB.Caption); KreuzUebernehmen(Zahl);// Aktualisierung der BenutzungsoberflächeAusgabe := '';for i := 1 to 49 do if Tipp[i] then Ausgabe := Ausgabe + ' ' + IntToStr(i);PTipp.Caption := Ausgabe;end;
23
KB
Date
nst
ruktu
ren
Übungen: Aufgabe 3 (Pflicht) Übungen: Aufgabe 3 (Pflicht)
Implementieren Sie die entwickelten Prozeduren und Methoden.
Zur Kontrolle:
Lotto – Version 1
24
KB
Date
nst
ruktu
ren
Exkurs: Objekt-ReihungExkurs: Objekt-Reihung
type
TForm1 = class(TForm) GBTippzettel: TGroupBox; PTipp: TPanel; ... procedure CheckBoxClick(Sender: TObject); procedure FormCreate(Sender: TObject);
private { Private-Deklarationen }
CheckBox: array[1..49] of TCheckBox;
public { Public-Deklarationen }
end;
CheckBox1
CheckBox:
1
...
CheckBox2
2
CheckBox49
49
Reihung mit TCheckBox-Elementen:
25
KB
Date
nst
ruktu
ren
Dynamische ErzeugungDynamische Erzeugung
procedure TForm1.FormCreate(Sender: TObject); var i: integer; Name: string;
begin// Initialisierung des DatenmodellsInitialisierung;// Erzeugung der TCheckBox-Objektefor i := 1 to 49 do begin CheckBox[i] := TCheckBox.Create(self); // Owner CheckBox[i].Name := 'CheckBox' + IntToStr(i); CheckBox[i].Caption := IntToStr(i); CheckBox[i].Checked := false; CheckBox[i].Parent := GBTippzettel; // übergeordn. Obj. CheckBox[i].Top := 32 +((i-1) div 7) * 40; CheckBox[i].Left := 24 + ((i-1) mod 7) * 40; CheckBox[i].Height := 25; CheckBox[i].Width := 33; CheckBox[i].OnClick := CheckBoxClick; end;end; Lotto – Version 2
26
KB
Date
nst
ruktu
ren
Übungen: Aufgabe 4 (Additum)Übungen: Aufgabe 4 (Additum)
Folgende Verbesserungen sind für die Ziehung der Lottozahlen und die Festlegung der Tippzahlen wünschenswert:
Man kann erst ziehen, wenn der Tippzettel ausgefüllt ist.
Beim „Ankreuzen“ des Tippzettels werden nach dem 6. Kreuz alle TCheckBox-Elemente deaktiviert (d. h.: es ist kein weiteres Ankreuzen möglich).
Man kann „Kreuze“ auch wieder entfernen (d. h. man kann Tippzahlen auch ändern).
Hinweis:Erstellen Sie zur Ablaufmodellierung zunächst einen Automaten.
Lotto – Version 3
27
KB
Date
nst
ruktu
ren
Aufgabe 4 - LösungsvorschlagAufgabe 4 - Lösungsvorschlag
CheckBox[i].OnClick [CheckBox[i].Checked=true]/ Tipp[Zahl] := true
0 1
Form1.OnCreate
CheckBox[i].OnClick [CheckBox[i].Checked=false]/ Tipp[Zahl] := false
28
KB
Date
nst
ruktu
ren
Aufgabe 4 - LösungsvorschlagAufgabe 4 - Lösungsvorschlag
CheckBox[i].OnClick [CheckBox[i].Checked=true]/ Tipp[Zahl] := truealle nicht-checked-Felder werden deaktiviert
5 6
CheckBox[i].OnClick [CheckBox[i].Checked=false]/ Tipp[Zahl] := falsealle deaktivierten Felder werden freigegeben
29
KB
Date
nst
ruktu
ren
Übungen – Aufgabe 5Übungen – Aufgabe 5
Zahlenreihung 1
Das System soll folgende Funktionalitäten zur Verfügung stellen:
Ereignisse:
Mausklick auf Erzeuge-Button
Mausklick auf Min/Max-Button
Mausklick auf Position-Button
Aktionen:
Es wird eine Reihung aus 20 integer-Zahlen mit dem Zufallsgenerator erzeugt.
Die kleinste und die größte Zahl der Reihung werden bestimmt und angezeigt.
Die Positionen der kleinsten und größten Zahl werden bestimmt und angezeigt.MinMax
30
KB
Date
nst
ruktu
ren
Übungen – Aufgabe 6Übungen – Aufgabe 6
Zahlenreihung 2
Es soll ein System entwickelt werden, mit dessen Hilfe man Würfelserien auswerten kann.
Mit Hilfe geeigneter Komponenten werden die einzelnen Würfelergebnisse und / oder die statistische Auswertung (absolute Häufigkeiten) angezeigt.
31
KB
Date
nst
ruktu
ren
Übungen – Aufgabe 7Übungen – Aufgabe 7
Textanalyse
In einem Text (der nur aus Großbuchstaben besteht und keine Umlaute und Sonderzeichen enthält) soll die Häufigkeit der jeweiligen Buchstaben bestimmt werden.
Entwerfen Sie zunächst eine geeignete Datenstruktur.
Entwickeln Sie anschließend einen Zählalgorithmus.
Implementieren Sie abschließend die entwickelten Strukturen.
Chiffrierung5
32
KB
Date
nst
ruktu
ren
Übungen – Aufgabe 8Übungen – Aufgabe 8
Monoalphabetische Chiffrierungen
Die Caesar-Chiffrierung ist sehr leicht zu entschlüsseln. Schwieriger wird es, wenn man eine kompliziertere Kodierung der Buchstaben wählt. Man könnte z. B. die Kodierung mit dem Zufallsgenerator erzeugen. Eine andere gute Möglichkeit funktioniert wie folgt: Man wählt ein (langes) Schlüsselwort, z. B. SCHOKOLADENOSTERHASE. Dann streicht man alle mehrfach vorkommenden Buchstaben: SCHOKLADENTR. Abschließend füllt man ab der letzten Stelle mit den noch zur Verfügung stehenden Buchstaben gemäß dem Alphabet auf. Ergebnis:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
S C H O K L A D E N T R U V W X Y Z B F G I J M P Q
Klartextalphabet
Geheimtextalphabet
Entwickeln Sie ein Programm, mit dem man solche Chiffrierungen erzeugen kann und mit deren Hilfe man Texte ver- und entschlüsseln kann. Chiffrierung2
33
KB
Date
nst
ruktu
ren
Aufgabe 5 - LösungsvorschlagAufgabe 5 - Lösungsvorschlag
Datenmodellierung:
const
anzahl = 20;
grenze = 99;
type
tBereich = 0..grenze;
tZahlen = array [1..anzahl] of tBereich;
var
Zahlen : tZahlen;
min, max : tBereich;
minpos, maxpos : 1..anzahl;
34
KB
Date
nst
ruktu
ren
Aufgabe 5 - LösungsvorschlagAufgabe 5 - Lösungsvorschlag
Operation: Erzeugung der Zahlenreihe
procedure ZahlenErzeugen;
var i: integer;
begin
randomize;
for i := 1 to anzahl do
Zahlen[i] := random(grenze+1);
end;
Operation: Bestimmung des Minimums und seiner Position
procedure MinBerechnung;
var i: integer;
begin
min := Zahlen[1];
minpos := 1;
for i := 2 to anzahl do
if Zahlen[i] < min then
begin
min := Zahlen[i];
minpos := i;
end;
end;
35
KB
Date
nst
ruktu
ren
Aufgabe 6 - LösungsvorschlagAufgabe 6 - Lösungsvorschlag
Datenmodellierung:
const
max = 100;
type
tAugen = 1..6;
tSerie = array [1..max] of tAugen;
tStatistik = array [tAugen] of integer;
var
Serie : tSerie;
Statistik : tStatistik;
36
KB
Date
nst
ruktu
ren
Aufgabe 6 - LösungsvorschlagAufgabe 6 - Lösungsvorschlag
Operation: Erzeugung der Würfelserie
procedure SerieErzeugen;
var i: integer;
begin
randomize;
for i := 1 to max do
Serie[i] := random(6)+1;
end;
Operation: Auswertung der Würfelserie
procedure SerieAuswerten;
var
augen, i: integer;
begin
for augen := 1 to 6 do
Statistik[augen] := 0;
for i := 1 to max do
inc(Statistik[Serie[i]]);
end;
37
KB
Date
nst
ruktu
ren
Teil 2Teil 2
Die Datenstruktur „Verbund“
38
KB
Date
nst
ruktu
ren
E-Mail-AdressbuchE-Mail-Adressbuch
39
KB
Date
nst
ruktu
ren
ProblembeschreibungProblembeschreibung
Ziel:Es soll ein Programm entwickelt werden, mit dessen Hilfe man E-Mail-Adressen verwalten kann.
Anforderungen an das zu entwickelnde System:- Der Benutzer kann ein Verzeichnis mit Namen und zugehörigen E-Mail-Adressen erstellen.- Man kann jederzeit weitere Adressen eingeben, bereits eingegebene Adressen abändern und auch Einträge im Verzeichnis wieder löschen.- Das erstellte Verzeichnis kann abgespeichert und wieder geladen werden.- ...
Ziel:Es soll ein Programm entwickelt werden, mit dessen Hilfe man E-Mail-Adressen verwalten kann.
Anforderungen an das zu entwickelnde System:- Der Benutzer kann ein Verzeichnis mit Namen und zugehörigen E-Mail-Adressen erstellen.- Man kann jederzeit weitere Adressen eingeben, bereits eingegebene Adressen abändern und auch Einträge im Verzeichnis wieder löschen.- Das erstellte Verzeichnis kann abgespeichert und wieder geladen werden.- ...
40
KB
Date
nst
ruktu
ren
Eine einfache BenutzungsoberflächeEine einfache Benutzungsoberfläche
41
KB
Date
nst
ruktu
ren
DatenmodellierungDatenmodellierung
Peter [email protected]
Datenstruktur:
KatharinaSchmitt [email protected]
Müller
Renate [email protected]
Meier
...
Verschiedene Datentypen
Gleich strukturiert
eDaten
kurzer String
kurzer String
langer String
42
KB
Date
nst
ruktu
renVerbundVerbund
Renate [email protected]
Meier
Vorname EmailName
Datensatz:
Verbund
Komponente
Name der Komponen
te
Verbund:
Ein Verbund fasst Daten, die unterschiedlichen Typs sein können, zu einer Einheit zusammen. Auf die Komponenten wird über einen Namen zugegriffen.
43
KB
Date
nst
ruktu
ren
Deklaration eines VerbundesDeklaration eines Verbundes
type tDatensatz = record Name : string[20]; Vorname : string[20]; Email : string[40]; end;var Datensatz : tDatensatz;
Deklaration:
Variablenzustand:
Syntax:
record <Komp1> : <Typ1>; <Komp2> : <Typ2>; ... end
Renate [email protected]
Meier
Vorname EmailName
Datensatz:
44
KB
Date
nst
ruktu
ren
Verarbeitung eines VerbundesVerarbeitung eines VerbundesDeklaration:
Zugriff auf Komponenten:
Datensatz.Name := 'Meier';Datensatz.Vorname := 'Renate';Datensatz.Email := '[email protected]';
Zugriff mit der With-Anweisung:
with Datensatz do begin Name := 'Meier'; Vorname := 'Renate'; Email := '[email protected]'; end;
type tDatensatz = record Name : string[20]; Vorname : string[20]; Email : string[40]; end;var Datensatz : tDatensatz;
45
KB
Date
nst
ruktu
ren
Verarbeitung eines VerbundesVerarbeitung eines VerbundesDeklaration:
Kopieren ganzer Verbunde:
Datensatz2 := Datensatz1;
Ein Vergleich ganzer Felder ist so nicht möglich:
if Datensatz1 = Datensatz2 then ...
type tDatensatz = record Name : string[20]; Vorname : string[20]; Email : string[40]; end;var Datensatz1, Datensatz2 : tDatensatz;
46
KB
Date
nst
ruktu
ren
DatenmodellDatenmodell
const max = 100;
type tDatensatz = record ... end; tVerzeichnis = array [1..max] of tDatensatz;
var Verzeichnis : tVerzeichnis; Stand : 0..max;
Deklaration:
Variablenzustand:
Katharina [email protected]
SchmittVerzeichnis:
Peter [email protected]üller
...
Renate [email protected]
Meier
1
2
...
max
6
Stand: 6
47
KB
Date
nst
ruktu
ren
Übungen: Aufgabe 9Übungen: Aufgabe 9
Gehen Sie beim Entwickeln und Erstellen des Programms schrittweise wie folgt vor. Testen Sie nach jedem Schritt, ob das Programm das tut, was es tun soll. Schritt 0 können Sie (wenn Sie wollen) auslassen und stattdessen die vorbereitete Benutzungsoberfläche benutzen.
Schritt 0: BenutzungsoberflächeEntwerfen und implementieren Sie eine geeignete Benutzungsoberfläche.
Schritt 1: DatenmodellImplementieren Sie zunächst das Datenmodell.
Schritt 2: ProgrammstartBeim Programmstart muss das Datenmodell initialisiert werden.
Schritt 3: Vor-/Zurück-NavigationEntwerfen und implementieren Sie passende Ereignisbehandlungsmethoden.
Schritt 4: Eingabe eines DatensatzesBenutzen Sie zur Übernahme der Daten am besten ein OnChange-Ereignis.
Schritt 5: Löschen eines DatensatzesEntwerfen Sie zunächst einen geeigneten Algorithmus. Implementieren und testen Sie ihn anschließend.
EMail – Benutzungsoberfläche
EMail – Version1
48
KB
Date
nst
ruktu
ren
49
KB
Date
nst
ruktu
ren
Teil 3Teil 3
Die Datenstruktur „Datei“
50
KB
Date
nst
ruktu
ren
DateiDatei
DS
Band
Schreib/Lese-Kopf
(Sequentielle typisierte) Datei:
- Die Datensätze können nur sequentiell (der Reihe nach) durchlaufen werden.
- Alle Datensätze haben dieselbe Größe.
DS DS DS DS
Datensatz
DS
DS DS DS DS <EOF>
Aktuelles Dateiende
51
KB
Date
nst
ruktu
ren
Deklaration einer DateiDeklaration einer Datei
DS DS DS DS DS <EOF>
type tDatensatz = record ... end; tDatei = file of tDatensatz
var Datei : tDatei; // Datensatz : tDatensatz;
Deklaration:
Datenzustand:
Datei:
Syntax:
file of <Datensatztyp>
52
KB
Date
nst
ruktu
ren
DateioperationenDateioperationen
AssignFile(Datei,'Adressen.dat')
Verknüpfung mit einer externen Datei:
Datenzustand:
Datei:
'Adressen.dat'
Eine Dateivariable muss zunächst immer mit einer externen Datei verknüpft werden.
Bemerkungen:
53
KB
Date
nst
ruktu
ren
DateioperationenDateioperationen
Rewrite(Datei)
Erstellen einer leeren Datei:
Datenzustand:
Datei:
'Adressen.dat'
Die Datei enthält noch keine Datensätze. Eine bereits bestehende Datei kann so „gelöscht“ werden.
Bemerkungen:
<EOF>
54
KB
Date
nst
ruktu
ren
DateioperationenDateioperationen
write(Datei,Datensatz)
Datensatz in der Datei aufnehmen:
Datenzustand vorher:
Datei:
'Adressen.dat'
Der Datensatz wird am Ende der Datei angefügt.
Bemerkungen:
<EOF> Datensatz: DS
Datei:
'Adressen.dat'
<EOF>
Datenzustand vorher:
Datensatz: DSDS
55
KB
Date
nst
ruktu
ren
DateioperationenDateioperationen
Reset(Datei)
Öffnen einer bestehenden Datei:
Datenzustand:
Datei:
'Adressen.dat'
Der Schreib/Lese-Kopf wird auf den ersten Datensatz gesetzt (sofern es einen solchen gibt).
Bemerkungen:
<EOF>DS DS DS
56
KB
Date
nst
ruktu
ren
DateioperationenDateioperationen
read(Datei,Datensatz)
Datensatz lesen:
Datenzustand vorher:
Datei:
'Adressen.dat'
Der Schreib/Lese-Kopf wandert eine Einheit weiter.
Bemerkungen:
Datensatz: ...
Datei:
'Adressen.dat'
Datenzustand vorher:
<EOF>DS DS DS
Datensatz: DS<EOF>DS DS DS
57
KB
Date
nst
ruktu
ren
DateioperationenDateioperationen
CloseFile(Datei)
Datei schließen:
Eine Datei muss nach der Bearbeitung geschlossen werden.
Bemerkungen:
Datei:
'Adressen.dat'
Datenzustand:
58
KB
Date
nst
ruktu
ren
DateioperationenDateioperationen
EOF(Datei) false
Dateiende erfragen:
Datenzustand:
Datei:
'Adressen.dat'
<EOF>DS DS DS
EOF(Datei) true
Dateiende erfragen:
Datenzustand:
Datei:
'Adressen.dat'
<EOF>DS DS DS
59
KB
Date
nst
ruktu
ren
Algorithmus „Laden“Algorithmus „Laden“
beginAssignFile(Datei,'Adressen.dat');Reset(Datei);while not EOF(Datei) do begin read(Datei,Datensatz); // verarbeite Datensatz: aktualisiere das Datenmodell
end;CloseFile(Datei);end;
60
KB
Date
nst
ruktu
ren
Algorithmus „Speichern“Algorithmus „Speichern“
beginAssignFile(Datei,'Adressen.dat');Rewrite(Datei);for i := 1 to ... do begin Datensatz := ...; write(Datei,Datensatz); end;CloseFile(Datei);end;
61
KB
Date
nst
ruktu
ren
Übungen: Aufgabe 10Übungen: Aufgabe 10
Ergänzen Sie das Email-Verwaltungsprogramm um die Möglichkeit, die Daten speichern und wieder laden zu können.
EMail – Version2
62
KB
Date
nst
ruktu
ren
63
KB
Date
nst
ruktu
ren
Teil 4Teil 4
Zusammenfassung und Ausblick
64
KB
Date
nst
ruktu
renDatentypDatentyp
Ein Datentyp legt einen Wertebereich und die Grundoperationen, die auf die Elemente des Wertebereichs angewandt werden können, fest.
Ein Datentyp legt einen Wertebereich und die Grundoperationen, die auf die Elemente des Wertebereichs angewandt werden können, fest.
Beispiele (für elementare Datentypen):
> boolean (Wahrheitswert)
> char (Zeichen)
> integer (ganze Zahl)
> real (Dezimalzahl)
65
KB
Date
nst
ruktu
ren
DatenstrukturDatenstruktur
Eine Datenstruktur legt den Aufbau von komplexen Wertebereichen aus einfacheren Wertebereichen fest.Eine Datenstruktur legt den Aufbau von komplexen Wertebereichen aus einfacheren Wertebereichen fest.
Beispiele (für Datenstrukturen):
> Reihung / Feld
> Verbund
> Datei
> ... Liste, Schlange, Stapel, Baum, Graph, ...
66
KB
Date
nst
ruktu
renReihungReihung
Eine Reihung fasst eine fest vorgegebene Anzahl von Elementen gleichen Typs zu einer Einheit zusammen.Eine Reihung fasst eine fest vorgegebene Anzahl von Elementen gleichen Typs zu einer Einheit zusammen.
2Ziehung: 21
25
33
43
451 2 3 4 5 6
Reihung
Element
Index
67
KB
Date
nst
ruktu
renVerbundVerbund
Eine Verbund fasst Elemente unterschiedlichen Typs zu einer Einheit zusammen.Eine Verbund fasst Elemente unterschiedlichen Typs zu einer Einheit zusammen.
Renate [email protected]
Meier
Vorname EmailName
Datensatz:
Verbund
Komponente
Name der Komponen
te
68
KB
Date
nst
ruktu
ren
DateiDatei
Eine Datei besteht aus beliebig vielen Datensätzen gleicher Struktur, die auf einem externen Medium gespeichert werden können.
Eine Datei besteht aus beliebig vielen Datensätzen gleicher Struktur, die auf einem externen Medium gespeichert werden können.
DS
Band
Schreib/Lese-Kopf
DS DS DS DS
Datensatz
DS
DS DS DS DS <EOF>
69
KB
Date
nst
ruktu
ren
Liste / Baum / GraphListe / Baum / Graph
Es gibt noch viele weitere Datenstrukturen, mit denen wir uns beschäftigen müssen!Es gibt noch viele weitere Datenstrukturen, mit denen wir uns beschäftigen müssen!