Datenstrukturen Klaus Becker (2002).

Slides:



Advertisements
Ähnliche Präsentationen
Imperative Programmierung
Advertisements

Anzahl der ausgefüllten und eingesandten Fragebögen: 211
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil3.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Zusammenfassung der Vorwoche
Kritische Betrachtung
Telefonnummer.
10. Grundlagen imperativer Programmiersprachen
Modelle und Methoden der Linearen und Nichtlinearen Optimierung (Ausgewählte Methoden und Fallstudien) U N I V E R S I T Ä T H A M B U R G November 2011.
Modelle und Methoden der Linearen und Nichtlinearen Optimierung (Ausgewählte Methoden und Fallstudien) U N I V E R S I T Ä T H A M B U R G November 2011.
der Universität Oldenburg
1 JIM-Studie 2010 Jugend, Information, (Multi-)Media Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
= = = = 47 = 47 = 48 = =
Java: Objektorientierte Programmierung
Sortierverfahren Richard Göbel.
Java: Dynamische Datentypen
Sortierverfahren Richard Göbel.
Indirekte Adressierung
ARRAY oder FELD oder VEKTOR
Rechneraufbau & Rechnerstrukturen, Folie 2.1 © W. Oberschelp, G. Vossen W. Oberschelp G. Vossen Kapitel 2.
Internet facts 2008-II Graphiken zu dem Berichtsband AGOF e.V. September 2008.
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil2.
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Differentielles Paar UIN rds gm UIN
Prof. Dr. Bernhard Wasmayr
Studienverlauf im Ausländerstudium
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Prof. Dr. Bernhard Wasmayr VWL 2. Semester
AWA 2007 Natur und Umwelt Natürlich Leben
Rechneraufbau & Rechnerstrukturen, Folie 12.1 © W. Oberschelp, G. Vossen W. Oberschelp G. Vossen Kapitel 12.
1. 2 Schreibprojekt Zeitung 3 Überblick 1. Vorstellung ComputerLernWerkstatt 2. Schreibprojekt: Zeitung 2.1 Konzeption des Kurses 2.2 Projektverlauf.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
20:00.
„Küsse deine Freunde“ – FlexKom-App teilen
Zusatzfolien zu B-Bäumen
Delphi II - OOP IFB Fortbildung
In der Schule.
Eine Einführung in die CD-ROM
für Weihnachten oder als Tischdekoration für das ganze Jahr
Wir üben die Malsätzchen
Syntaxanalyse Bottom-Up und LR(0)
Einführung in die Software-Entwicklung mit Delphi Teil 1
PROCAM Score Alter (Jahre)
Grundlagen von Objekt-Pascal Erstellt von J. Rudolf überarbeitet von H.Brehm.
Ertragsteuern, 5. Auflage Christiana Djanani, Gernot Brähler, Christian Lösel, Andreas Krenzin © UVK Verlagsgesellschaft mbH, Konstanz und München 2012.
Geometrische Aufgaben
Symmetrische Blockchiffren DES – der Data Encryption Standard
Permanente Datenspeicherung
Retuschen.ppt Die folgende Schau zeigt die Möglichkeiten, mit PhotoDraw Digitalbilder zu retuschieren. Vergleichen Sie jeweils zwei Bildpaare durch fleissiges.
Zahlentheorie und Zahlenspiele Hartmut Menzer, Ingo Althöfer ISBN: © 2014 Oldenbourg Wissenschaftsverlag GmbH Abbildungsübersicht / List.
MINDREADER Ein magisch - interaktives Erlebnis mit ENZO PAOLO
1 (C)2006, Hermann Knoll, HTW Chur, FHO Quadratische Reste Definitionen: Quadratischer Rest Quadratwurzel Anwendungen.
Agenda für heute, 22. Juni, 2006 Direkte FilezugriffeDirekte Filezugriffe Datentypen: Mengen Individualisierbare Datentypen.
Agenda für heute, 28. April, 2005 Strukturierte VariablenStrukturierte Variablen Arrays.
Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten.
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
1 Tagesüberblick 2 Lösung Hausaufgabe/Fragen Datei- ein- und ausgabe Schleifen Vergleiche Wahrheit.
Folie Beispiel für eine Einzelauswertung der Gemeindedaten (fiktive Daten)
1 Arbeitsgemeinschaft Biologische Psychiatrie Verordnungsgewohnheiten von Psychopharmaka Statuserhebung 2005 W.Günther G.Laux T.Messer N.Müller M.Schmauss.
Programmiervorkurs WS 2014 Referenzdatentypen
Unternehmensbewertung Thomas Hering ISBN: © 2014 Oldenbourg Wissenschaftsverlag GmbH Abbildungsübersicht / List of Figures Tabellenübersicht.
Folie Einzelauswertung der Gemeindedaten
Datum:17. Dezember 2014 Thema:IFRS Update zum Jahresende – die Neuerungen im Überblick Referent:Eberhard Grötzner, EMA ® Anlass:12. Arbeitskreis Internationale.
Sehen, Hören, Schmecken: wenn uns unsere Sinne täuschen
1 Medienpädagogischer Forschungsverbund Südwest KIM-Studie 2014 Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
Der Datentyp Verbund (record)
 Präsentation transkript:

Datenstrukturen Klaus Becker (2002)

Übersicht Teil 1: Die Datenstruktur „Reihung“ Teil 2: Die Datenstruktur „Verbund“ Teil 3: Die Datenstruktur „Datei“ Teil 4: Zusammenfassung und Ausblick

Die Datenstruktur „Reihung“ Teil 1 Die Datenstruktur „Reihung“

Lotto

Problembeschreibung 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)

Benutzungsoberfläche CheckBox3: TCheckBox Bziehung: TButton PZiehung: TPanel PAuswertung: TPanel BNeu: TButton PTipp: TPanel

Ereignisbehandlung 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

Ereignisbehandlung Verbesserungsmöglichkeit 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

Datenmodellierung – Version 1 Lottoziehung: 2; 21; 25; 33; 43; 45 Deklaration: Variablenzustand: type tLottozahl = 1..49; var Zahl1 : tLottozahl; Zahl2 : tLottozahl; Zahl3 : tLottozahl; Zahl4 : tLottozahl; Zahl5 : tLottozahl; Zahl6 : tLottozahl; Zahl1: 2 Zahl2: 21 Zahl3: 25 Zahl4: 33 Zahl5: 43 Zahl6: 45 Schwierigkeit: Das Erstellen von Algorithmen zur Datenverarbeitung erfordert viel Schreibaufwand: gleiche Anweisungen für strukturgleiche Variablen.

Datenmodellierung – Version 2 Lottoziehung: 2; 21; 25; 33; 43; 45 Variablenzustand: Zahl1: 2 Reihung Zahl2: 21 Element Zahl3: 25 Ziehung: 2 21 25 33 43 45 Zahl4: 33 1 2 3 4 5 6 Zahl5: 43 Index Zahl6: 45 Reihung / Array / Feld: Eine Reihung fasst strukturgleiche Daten zu einer Einheit zusammen. Auf die einzelnen Elemente der Reihung wird über einen Index zugegriffen.

Deklaration einer Reihung Lottoziehung: 2; 21; 25; 33; 43; 45 Deklaration: type tLottozahl = 1..49; tZiehung = array[1..6] of tLottozahl; var Ziehung : tZiehung; Variablenzustand: Ziehung: ... ... ... ... ... ... 1 2 3 4 5 6 Syntax: array [ <Indexbereich> ] of <Elementtyp>

Verarbeitung einer Reihung Deklaration: type tLottozahl = 1..49; tZiehung = array [1..6] of tLottozahl; var Ziehung, Tipp: tZiehung; 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 ...

Ziehung der Lottozahlen Deklaration: type tLottozahl = 1..49; tZiehung = array [1..6] of tLottozahl; var Ziehung, Tipp: tZiehung; Algorithmus: randomize; for i := 1 to 6 do Ziehung[i] := random(49)+1; Typische Schleifenstruktur Beachte: Der Algorithmus ist nicht korrekt.

Alternatives Datenmodell Lottoziehung: 2; 21; 25; 33; 43; 45 Datenmodell: Ziehung: f t f f f f ... f t f f f f 1 2 3 4 5 6 ... 44 45 46 47 48 49 Deklaration: type tZiehung = array [1..49] of boolean; var Ziehung : tZiehung;

Ü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;

Lösungsvorschlag

Ü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;

Lösungsvorschlag

Aufgabe 1 – Lösungsvorschlag type tZiehung = array [1..49] of boolean; var Ziehung: tZiehung; procedure Lottoziehung; var i: integer; n: integer; h: integer; begin randomize; 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;

Aufgabe 2 – Lösungsvorschlag type tZiehung = array [1..49] of boolean; var Tipp : tZiehung; Ziehung : tZiehung; Richtige : integer; procedure Auswertung; var i: integer; begin Richtige := 0; for i := 1 to 49 do if Tipp[i] and Ziehung[i] then inc(Richtige); end;

Ein Objektmodell für den Tippzettel type TForm1 = class(TForm) GBTippzettel: TGroupBox; PTipp: TPanel; CheckBox1: TCheckBox; CheckBox2: TCheckBox; CheckBox3: TCheckBox; CheckBox4: TCheckBox; ... CheckBox1: TCheckBox Attribute Caption : 1 Enabled : true State : cbUnchecked ... Ereignisse OnClick: CheckBoxClick Methoden Beachte: Allen TCheckBox-Objekten ist dieselbe Ereignisbehandlungs-methode zugewiesen.

Ereignisbehandlung procedure TForm1.CheckBoxClick(Sender: TObject); var CB : TCheckBox; Ausgabe : string; i : integer; Zahl : integer; begin // Aktualisierung des Datenmodells CB := TCheckBox(Sender); Zahl := StrToInt(CB.Caption); KreuzUebernehmen(Zahl); // Aktualisierung der Benutzungsoberfläche Ausgabe := ''; for i := 1 to 49 do if Tipp[i] then Ausgabe := Ausgabe + ' ' + IntToStr(i); PTipp.Caption := Ausgabe; end;

Übungen: Aufgabe 3 (Pflicht) Implementieren Sie die entwickelten Prozeduren und Methoden. Zur Kontrolle: Lotto – Version 1

Exkurs: 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; Reihung mit TCheckBox-Elementen: CheckBox1 CheckBox2 CheckBox49 CheckBox: ... 1 2 49

Dynamische Erzeugung procedure TForm1.FormCreate(Sender: TObject); var i: integer; Name: string; begin // Initialisierung des Datenmodells Initialisierung; // Erzeugung der TCheckBox-Objekte for 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

Ü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

Aufgabe 4 - Lösungsvorschlag CheckBox[i].OnClick [CheckBox[i].Checked=true] / Tipp[Zahl] := true Form1.OnCreate 1 CheckBox[i].OnClick [CheckBox[i].Checked=false] / Tipp[Zahl] := false

Aufgabe 4 - Lösungsvorschlag CheckBox[i].OnClick [CheckBox[i].Checked=true] / Tipp[Zahl] := true alle nicht-checked-Felder werden deaktiviert 5 6 CheckBox[i].OnClick [CheckBox[i].Checked=false] / Tipp[Zahl] := false alle deaktivierten Felder werden freigegeben

Ü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

Ü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.

Ü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

Ü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: Klartextalphabet 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 Geheimtextalphabet Entwickeln Sie ein Programm, mit dem man solche Chiffrierungen erzeugen kann und mit deren Hilfe man Texte ver- und entschlüsseln kann. Chiffrierung2

Aufgabe 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;

Aufgabe 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 min := Zahlen[i]; minpos := i; end;

Aufgabe 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;

Aufgabe 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;

Die Datenstruktur „Verbund“ Teil 2 Die Datenstruktur „Verbund“

E-Mail-Adressbuch

Problembeschreibung 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. - ...

Eine einfache Benutzungsoberfläche

Datenmodellierung Datenstruktur: Gleich strukturierteDaten ... Schmitt Katharina kschmitt@web.de Müller Peter pm@t-online.de Gleich strukturierteDaten ... Meier Renate meier@t-online.de kurzer String kurzer String langer String Verschiedene Datentypen

Verbund Verbund Komponente Datensatz: Meier Renate meier@t-online.de Name Vorname Email Name der Komponente Verbund: Ein Verbund fasst Daten, die unterschiedlichen Typs sein können, zu einer Einheit zusammen. Auf die Komponenten wird über einen Namen zugegriffen.

Deklaration eines Verbundes Variablenzustand: Datensatz: Meier Renate meier@t-online.de Name Vorname Email Deklaration: type tDatensatz = record Name : string[20]; Vorname : string[20]; Email : string[40]; end; var Datensatz : tDatensatz; Syntax: record <Komp1> : <Typ1>; <Komp2> : <Typ2>; ... end

Verarbeitung eines Verbundes Deklaration: type tDatensatz = record Name : string[20]; Vorname : string[20]; Email : string[40]; end; var Datensatz : tDatensatz; 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;

Verarbeitung eines Verbundes Deklaration: type tDatensatz = record Name : string[20]; Vorname : string[20]; Email : string[40]; end; var Datensatz1, Datensatz2 : tDatensatz; Kopieren ganzer Verbunde: Datensatz2 := Datensatz1; Ein Vergleich ganzer Felder ist so nicht möglich: if Datensatz1 = Datensatz2 then ...

Datenmodell Variablenzustand: Deklaration: const max = 100; Verzeichnis: Schmitt Katharina kschmitt@web.de 1 Müller Peter pm@t-online.de 2 ... ... Meier Renate meier@t-online.de 6 Stand: 6 max Deklaration: const max = 100; type tDatensatz = record ... end; tVerzeichnis = array [1..max] of tDatensatz; var Verzeichnis : tVerzeichnis; Stand : 0..max;

Ü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äche Entwerfen und implementieren Sie eine geeignete Benutzungsoberfläche. Schritt 1: Datenmodell Implementieren Sie zunächst das Datenmodell. Schritt 2: Programmstart Beim Programmstart muss das Datenmodell initialisiert werden. Schritt 3: Vor-/Zurück-Navigation Entwerfen und implementieren Sie passende Ereignisbehandlungsmethoden. Schritt 4: Eingabe eines Datensatzes Benutzen Sie zur Übernahme der Daten am besten ein OnChange-Ereignis. Schritt 5: Löschen eines Datensatzes Entwerfen Sie zunächst einen geeigneten Algorithmus. Implementieren und testen Sie ihn anschließend. EMail – Benutzungsoberfläche EMail – Version1

Die Datenstruktur „Datei“ Teil 3 Die Datenstruktur „Datei“

Datei (Sequentielle typisierte) Datei: Band DS DS DS DS DS Schreib/Lese-Kopf Datensatz Aktuelles Dateiende DS DS DS DS DS <EOF> (Sequentielle typisierte) Datei: - Die Datensätze können nur sequentiell (der Reihe nach) durchlaufen werden. - Alle Datensätze haben dieselbe Größe.

Deklaration einer Datei Datenzustand: Datei: DS DS DS DS DS <EOF> Deklaration: type tDatensatz = record ... end; tDatei = file of tDatensatz var Datei : tDatei; // Datensatz : tDatensatz; Syntax: file of <Datensatztyp>

Dateioperationen Verknüpfung mit einer externen Datei: AssignFile(Datei,'Adressen.dat') Datenzustand: Datei: 'Adressen.dat' Bemerkungen: Eine Dateivariable muss zunächst immer mit einer externen Datei verknüpft werden.

Dateioperationen Erstellen einer leeren Datei: Rewrite(Datei) Datenzustand: Datei: <EOF> 'Adressen.dat' Bemerkungen: Die Datei enthält noch keine Datensätze. Eine bereits bestehende Datei kann so „gelöscht“ werden.

Dateioperationen Datenzustand vorher: <EOF> Datensatz: DS 'Adressen.dat' Datensatz in der Datei aufnehmen: write(Datei,Datensatz) Datenzustand vorher: Datei: DS <EOF> Datensatz: DS 'Adressen.dat' Bemerkungen: Der Datensatz wird am Ende der Datei angefügt.

Dateioperationen Öffnen einer bestehenden Datei: Reset(Datei) Datenzustand: Datei: DS DS DS <EOF> 'Adressen.dat' Bemerkungen: Der Schreib/Lese-Kopf wird auf den ersten Datensatz gesetzt (sofern es einen solchen gibt).

Dateioperationen Datenzustand vorher: Datensatz lesen: DS DS DS <EOF> Datensatz: ... 'Adressen.dat' Datensatz lesen: read(Datei,Datensatz) Datenzustand vorher: Datei: DS DS DS <EOF> Datensatz: DS 'Adressen.dat' Bemerkungen: Der Schreib/Lese-Kopf wandert eine Einheit weiter.

Dateioperationen Datei schließen: CloseFile(Datei) Datenzustand: 'Adressen.dat' Bemerkungen: Eine Datei muss nach der Bearbeitung geschlossen werden.

Dateioperationen Datenzustand: Dateiende erfragen: EOF(Datei)  false DS DS DS <EOF> 'Adressen.dat' Dateiende erfragen: EOF(Datei)  false Datenzustand: Datei: DS DS DS <EOF> 'Adressen.dat' Dateiende erfragen: EOF(Datei)  true

Algorithmus „Laden“ begin AssignFile(Datei,'Adressen.dat'); Reset(Datei); while not EOF(Datei) do begin read(Datei,Datensatz); // verarbeite Datensatz: aktualisiere das Datenmodell end; CloseFile(Datei); end;

Algorithmus „Speichern“ begin AssignFile(Datei,'Adressen.dat'); Rewrite(Datei); for i := 1 to ... do begin Datensatz := ...; write(Datei,Datensatz); end; CloseFile(Datei); end;

Übungen: Aufgabe 10 Ergänzen Sie das Email-Verwaltungsprogramm um die Möglichkeit, die Daten speichern und wieder laden zu können. EMail – Version2

Zusammenfassung und Ausblick Teil 4 Zusammenfassung und Ausblick

Datentyp Beispiele (für elementare Datentypen): 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)

Datenstruktur Beispiele (für Datenstrukturen): > Reihung / Feld 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, ...

Reihung Eine Reihung fasst eine fest vorgegebene Anzahl von Elementen gleichen Typs zu einer Einheit zusammen. Reihung Element Ziehung: 2 21 25 33 43 45 1 2 3 4 5 6 Index

Verbund Eine Verbund fasst Elemente unterschiedlichen Typs zu einer Einheit zusammen. Verbund Komponente Datensatz: Meier Renate meier@t-online.de Name Vorname Email Name der Komponente

Datei Eine Datei besteht aus beliebig vielen Datensätzen gleicher Struktur, die auf einem externen Medium gespeichert werden können. Band DS DS DS DS DS Schreib/Lese-Kopf Datensatz DS DS DS DS DS <EOF>

Liste / Baum / Graph Es gibt noch viele weitere Datenstrukturen, mit denen wir uns beschäftigen müssen!