Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Datenstrukturen Klaus Becker (2002).

Ähnliche Präsentationen


Präsentation zum Thema: "Datenstrukturen Klaus Becker (2002)."—  Präsentation transkript:

1 Datenstrukturen Klaus Becker (2002)

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

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

4 Lotto

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

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

7 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

8 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

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

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

11 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>

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

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

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

15 Ü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 Lösungsvorschlag

17 Ü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 Lösungsvorschlag

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

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

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

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

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

24 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

25 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

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

28 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

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

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

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

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

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

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

38 -Adressbuch

39 Problembeschreibung Ziel: Es soll ein Programm entwickelt werden, mit dessen Hilfe man -Adressen verwalten kann. Anforderungen an das zu entwickelnde System: - Der Benutzer kann ein Verzeichnis mit Namen und zugehörigen -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 Eine einfache Benutzungsoberfläche

41 Datenmodellierung Datenstruktur: Gleich strukturierteDaten ...
Schmitt Katharina Müller Peter Gleich strukturierteDaten ... Meier Renate kurzer String kurzer String langer String Verschiedene Datentypen

42 Verbund Verbund Komponente Datensatz: Meier Renate Name Vorname 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.

43 Deklaration eines Verbundes
Variablenzustand: Datensatz: Meier Renate Name Vorname Deklaration: type tDatensatz = record Name : string[20]; Vorname : string[20]; string[40]; end; var Datensatz : tDatensatz; Syntax: record <Komp1> : <Typ1>; <Komp2> : <Typ2>; end

44 Verarbeitung eines Verbundes
Deklaration: type tDatensatz = record Name : string[20]; Vorname : string[20]; string[40]; end; var Datensatz : tDatensatz; Zugriff auf Komponenten: Datensatz.Name := 'Meier'; Datensatz.Vorname := 'Renate'; Datensatz. = Zugriff mit der With-Anweisung: with Datensatz do begin Name := 'Meier'; Vorname := 'Renate'; = end;

45 Verarbeitung eines Verbundes
Deklaration: type tDatensatz = record Name : string[20]; Vorname : string[20]; 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 ...

46 Datenmodell Variablenzustand: Deklaration: const max = 100;
Verzeichnis: Schmitt Katharina 1 Müller Peter 2 ... ... Meier Renate 6 Stand: 6 max Deklaration: const max = 100; type tDatensatz = record ... end; tVerzeichnis = array [1..max] of tDatensatz; var Verzeichnis : tVerzeichnis; Stand : 0..max;

47 Ü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. – Benutzungsoberfläche – Version1

48

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

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

51 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>

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

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

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

55 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).

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

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

58 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

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

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

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

62

63 Zusammenfassung und Ausblick
Teil 4 Zusammenfassung und Ausblick

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

65 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, ...

66 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

67 Verbund Eine Verbund fasst Elemente unterschiedlichen Typs zu einer Einheit zusammen. Verbund Komponente Datensatz: Meier Renate Name Vorname Name der Komponente

68 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>

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


Herunterladen ppt "Datenstrukturen Klaus Becker (2002)."

Ähnliche Präsentationen


Google-Anzeigen