Datenstrukturen Klaus Becker (2002). KB Datenstrukturen 2 Übersicht Teil 1: Die Datenstruktur...

Preview:

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 pm@t-online.de

Datenstruktur:

KatharinaSchmitt kschmitt@web.de

Müller

Renate meier@t-online.de

Meier

...

Verschiedene Datentypen

Gleich strukturiert

eDaten

kurzer String

kurzer String

langer String

42

KB

Date

nst

ruktu

renVerbundVerbund

Renate meier@t-online.de

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 meier@t-online.de

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 := 'meier@t-online.de';

Zugriff mit der With-Anweisung:

with Datensatz do begin Name := 'Meier'; Vorname := 'Renate'; Email := 'meier@t-online.de'; 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 kschmitt@web.de

SchmittVerzeichnis:

Peter pm@t-online.deMüller

...

Renate meier@t-online.de

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 meier@t-online.de

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!

Recommended