12.10.2013 Aufrufe

EDV Vorlesungs-sowie Übungs-und Tutoriumszusammenfassung ...

EDV Vorlesungs-sowie Übungs-und Tutoriumszusammenfassung ...

EDV Vorlesungs-sowie Übungs-und Tutoriumszusammenfassung ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>EDV</strong> Dies ist kein offizielles Skript.<br />

<strong>EDV</strong><br />

<strong>Vorlesungs</strong>-<strong>sowie</strong> <strong>Übungs</strong>-<strong>und</strong><br />

<strong>Tutoriumszusammenfassung</strong><br />

Katharina Ruppel<br />

Inhalt:<br />

1. Gr<strong>und</strong>lagen<br />

2. Algorithmen-<strong>und</strong> Prozessbeschreibung<br />

3. Datentypen, Datenstrukturen- <strong>und</strong> management<br />

Zusammenfassung von Katharina Ruppel unter wiso.ferit.info - 0 -


<strong>EDV</strong> Dies ist kein offizielles Skript.<br />

1.1. Gr<strong>und</strong>legende Begriffe<br />

Algorithmus: Ein Algorithmus ist eine eindeutige, endliche Folge von<br />

Elementaroperationen zur Lösung einer bestimmten Problemklasse.<br />

Programm: Ein Programm ist ein Algorithmus, der für ein bestimmtes<br />

ausführendes System(i.d.R. Rechner <strong>und</strong> Betriebssystem) implementiert<br />

wurde.<br />

Programmiersprachen: dienen zur Erstellung von Programmen, also der<br />

Erstellung eines gesteuerten Ablaufs von Befehlen an den Computer zur<br />

Lösung eines Problems/von Problemklassen.<br />

1.2. Compiler & Interpreter<br />

Ein Compiler überträgt höhere Programmiersprachen auf die<br />

Maschinenebene, kann die syntaktische Korrektheit einer Anweisung<br />

überprüfen <strong>und</strong> übersetzt zunächst alle Befehle eines Programms.<br />

Ein Interpreter übersetzt jeweils nur einen Befehl <strong>und</strong> führt ihn aus.<br />

1.3. Programmiersprachen<br />

Prozedurale Programmiersprachen:<br />

-höhere, maschinenunabhängige Programmiersprachen<br />

-zur Problemlösung werden Algorithmen formuliert<br />

Funktionale Programmiersprachen:<br />

-weitestgehend an die Formulierung mathematischer Funktionen<br />

angenäherte Programmierung<br />

Logische Programmiersprachen:<br />

-basieren auf Logik( Teilgebiet der Mathematik)<br />

-Behandlung von Fragestellungen wie z.B. Widerspruchsfreiheit<br />

mathematischer Theorien <strong>und</strong> Begriffe<br />

Verteilte <strong>und</strong> parallele Programmiersprachen:<br />

-spezielle für Aufgaben verteilte Rechner/Mehrprozessorsysteme<br />

Objektorientiere Programmiersprachen:<br />

-Klassifikation <strong>und</strong> Kapselung von Datenobjekten<br />

Zusammenfassung von Katharina Ruppel unter wiso.ferit.info - 1 -


<strong>EDV</strong> Dies ist kein offizielles Skript.<br />

1.4. Syntax <strong>und</strong> Semantik<br />

Syntax: Lehre vom Satzbau, Symbole <strong>und</strong> Regeln für den Aufbau von<br />

Befehlen/Anweisungen, ist eine Anweisung syntaktisch korrekt oder<br />

nicht?, aber keine Aussage über deren Bedeutung, keinerlei<br />

Interpretation. Es wird lediglich überprüft, ob ein Befehl prinzipiell<br />

durchführbar wäre<br />

Semantik: Bedeutungslehre, Bestimmung der Bedeutung korrekter<br />

Anweisungen, keine Überprüfung durch den Compiler oder Interpreter<br />

2.1. Prozess oder Algorithmus<br />

Prozess: bezeichnet in der Informatik den Vorgang einer algorithmisch<br />

ablaufenden Informationsverarbeitung.<br />

Algorithmus: ist eine eindeutige, endliche Folge von Elementaroperationen<br />

zur Lösung einer bestimmten Problemklasse.<br />

2.2. Kontrollstrukturen<br />

= Schemata, die die Reihenfolge für die Abarbeitung von Anweisungen<br />

festlegen.<br />

Gr<strong>und</strong>formen:<br />

-Sequenz<br />

-Schleife<br />

-Verzweigung<br />

Sequenz/Folge: ensteht durch Aneinanderreihen einzelner Anweisungen.<br />

Kein Überspringen oder Wiederholen , einfaches „Abarbeiten“ der<br />

Anweisungen eines Programms gemäß Reihenfolge.<br />

Anweisung 1<br />

Anweisung 2<br />

Anweisung 3<br />

...<br />

...<br />

EVA-Prinzip: Eingabe, Verarbeitung, Ausgabe<br />

Schleife/Iteration:<br />

Durch Wiederholung einzelner oder Gruppen von Anweisung entstehen<br />

Programmschleifen.<br />

Zusammenfassung von Katharina Ruppel unter wiso.ferit.info - 2 -


<strong>EDV</strong> Dies ist kein offizielles Skript.<br />

Verzweigung/Auswahl:<br />

Der Ablauf des Programms kann Verzweigungen enthalten. Welcher Zweig<br />

ausgeführt wird, hängt von dem Ergebnis eines anzugebenden Ausdrucks<br />

ab.<br />

2.3. Struktogramme<br />

= genormte Darstellungsmittel für Algorithmen( auch Nassi-Schneider-<br />

Diagramme genannt).<br />

2.4. Schleifentypen<br />

1) Kopfgesteuerte Schleife: Wiederholung von Anweisungen mit<br />

vorausgehender Bedingungsprüfung (auch abweisende Schleife genannt).<br />

Die Schleife wird im „Extremfall“ keinmal durchlaufen.<br />

2) Fußgesteuerte Schleife: Wiederholung von Anweisungen mit<br />

nachfolgender Bedingungsprüfung. Die Schleife wird somit mindestens<br />

einmal durchlaufen.<br />

Bsp. Zu 1): Zahl 1<br />

Wiederhole solange Zahl< 5<br />

Zahl Zahl +1<br />

Eingabe Name<br />

Ausgabe ‚Hallo’ <strong>und</strong> Name<br />

Zu 2): Zahl 1<br />

Zahl Zahl +1<br />

Eingabe Name<br />

Ausgabe ‚Hallo’ <strong>und</strong> Name<br />

Wiederhole bis Zahl> 5<br />

3) Zählschleife, Schleife mit fester Wiederholungshäufigkeit<br />

Für 1 bis 100<br />

Anweisung 1<br />

...<br />

2.5. Verzweigungen ( Struktogramme dazu: siehe Folien vom Lehrstuhl<br />

WI)<br />

1) einfache Verzweigung<br />

bedeutet die Fortsetzung der Programmausführung in Abhängigkeit vom<br />

Zustand einer logischen Bedingung(boolescher Ausdruck).<br />

2) mehrfache Verzweigung<br />

Fortsetzung der Programmausführung in Abhängigkeit vom Ergebnis einer<br />

Bedingungsprüfung.<br />

Zusammenfassung von Katharina Ruppel unter wiso.ferit.info - 3 -


<strong>EDV</strong> Dies ist kein offizielles Skript.<br />

2.6. Allgemein zum Struktogrammentwurf ( Bsp.<br />

Mittelwertberechnung)<br />

-konsistente/korrekte Verwendung der definierten Symbole<br />

-Variablen verwendet = Bezeichnungen im Sinne von „Platzhalter“ für<br />

Werte, nimmt unterschiedliche Werte während des Ablaufs des<br />

Algorithmus an<br />

-„reservierte“ Begriffe, z.B. SOLANGE<br />

-Entwicklungsspezifika, sukzessive Verfeinerung/Verbesserung (Bsp.: die<br />

Notwendigkeit Variablen zu initialisieren)<br />

2.7. Pseudocode als alternatives Darstellungsmittel (zum<br />

Struktogramm) für Algorithmen<br />

Vor-<strong>und</strong> Nachteile:<br />

+ einfacheres Handling<br />

+ leichter modifizierbar<br />

-stringentere Übersicht<br />

-schwierigere „automatische“ Transformation(Generierung)<br />

+- Lesbarkeit<br />

-Kopfgesteuerte Schleife:<br />

WHILE Bedingung<br />

DO Anweisung<br />

OD<br />

-Fußgesteuerte Schleife<br />

Repeat ...<br />

UNTIL Bedingung<br />

-Zählschleife<br />

For i = 1 to N<br />

Do Anweisung(en)<br />

OD<br />

-Einfache Verzweigung<br />

IF Bedingung<br />

THEN Anweisung<br />

ELSE ...<br />

FI<br />

-Mehrfachverzweigung<br />

CASE Bedingung OF<br />

E1: Anweisung 1<br />

E2: Anweisung 2<br />

.<br />

.<br />

Zusammenfassung von Katharina Ruppel unter wiso.ferit.info - 4 -


<strong>EDV</strong> Dies ist kein offizielles Skript.<br />

EN: Anweisung N<br />

FO<br />

2.8. Exkurs Tabellenkalkulation (Excel):<br />

Tabellenkalkulationssystem= spread-sheet-system<br />

-Tabellenblatt/Arbeitsblatt hat Raster aus Spalten <strong>und</strong> Zeilen<br />

-Arbeitsmappe<br />

-Diagramme<br />

Zellen:<br />

enthalten Zahlen, Texte, Formeln<br />

Formeln: z.B. =D1+B2+C5<br />

Funktionen:<br />

= summe(Zahl1; Zahl2..)<br />

= min(Zahl 1: Zahl N)<br />

= max(Zahl 1: Zahl M)<br />

= anzahl(Zahl 1: Zahl X)<br />

= anzahl 2(Zelle 1: Zelle 10) für Texte, Zeichen<br />

= rang(zahl; Bezug(Zelle1:Zelle11))<br />

Dollarzeichen für absolute Bezüge !<br />

= zählenwenn(Bereich, Kriterium)<br />

= wenn(Bedingung, dann, sonst)<br />

= summewenn(Bereich, Suchkriterium)<br />

= <strong>und</strong>(Bedingung1; Bedingung2)<br />

= oder(Bedingung 1; Bedingung2)<br />

= Verweis(Suchkriterium; Suchvektor; Ergebnisvektor)<br />

2.9. Eigenschaften <strong>und</strong> Entwurfsprinzipien von Algorithmen<br />

1)EVA-Prinzip: bereits unter 2.2. erwähnt. Beschreibung wie Eingabedaten<br />

schrittweise in Ausgabedaten transformiert werden, f: E A<br />

Math. Formel: Relation zwischen Ausgabe <strong>und</strong> Eingabe.<br />

2) Abstrahierung:<br />

spezielle generelle Problemklasse(Probleminstanz)<br />

3) Determiniertheit:<br />

Bei gleichen Eingaben/ Startbedingungen gleiches Ergebnis, Ausnahme:<br />

Zufallszahlen<br />

4) Finitheit:<br />

Beschreibung des Algorithmus ist endlich.<br />

5) Terminierung:<br />

Zusammenfassung von Katharina Ruppel unter wiso.ferit.info - 5 -


<strong>EDV</strong> Dies ist kein offizielles Skript.<br />

Nach endlich vielen Schritten wird der Algorithmus beendet(-> siehe<br />

Zählschleife)<br />

6) Effizienz:<br />

effizient, wenn ein Problem in möglichst „kurzer Zeit“ oder mit möglichst<br />

„geringem Aufwand“ an Betriebsmitteln( Speicherplatz) gelöst werden<br />

kann.<br />

Anzahl der Rechenschrittesiehe Thema „Sortieren von Listen“, denn<br />

bspw. die Suche in einer sortierten Liste ist natürlich wesentlich<br />

effizienter, schneller als die in einer unsortierten.<br />

7) Nebenläufigkeit:<br />

Teile von Algorithmen, die unabhängig voneinander parallel ablaufen<br />

können<br />

8) Rekursivität:<br />

Ein Algorithmus ruft zur Berechnung „sich selbst“ wieder auf.<br />

Bsp.: Fakultätsberechnung<br />

n!<br />

n*(n-1)!<br />

n*(n-1)(n-2)!, wobei fak(0)=1<br />

9) Schrittweise Verfeinerung<br />

10) Modularisierung:<br />

„divide et impera“-teile <strong>und</strong> herrsche<br />

Zerlegung eines komplexen Problems in Teilprobleme Prozeduren,<br />

Funktionen<br />

11) Strukturierung:<br />

-Darstellung der Prozeßlogik/AblauflogikStruktogramme/Verwendung<br />

von Kontrollstrukturen<br />

-Daten (siehe Folgekapitel)<br />

3.1. Datentypen <strong>und</strong> Datenstrukturen, Einführung<br />

Vordergr<strong>und</strong>: Prozesse/Algorithmen<br />

Daten: -Eingabeinformation über Tastatur<br />

-interne Zwischenergebnisse<br />

-Hilfsgröße für die Steuerung der Kontrollstrukturen<br />

-Ausgabe über Bildschirm/Drucker<br />

Zusammenfassung von Katharina Ruppel unter wiso.ferit.info - 6 -


<strong>EDV</strong> Dies ist kein offizielles Skript.<br />

3.2. Programmierung in PASCAL<br />

1)Sequenz:<br />

Anweisung 1;<br />

Anweisung 2;<br />

Anweisung 3;<br />

.<br />

.<br />

.<br />

2) Kopfgesteuerte Schleife<br />

While Do Begin<br />

Anweisung 1;<br />

Anweisung 2;<br />

...<br />

end;<br />

3) Fußgesteuerte Schleife<br />

REPEAT<br />

Anweisung 1;<br />

Anweisung 2;<br />

...<br />

UNTIL ;<br />

End;<br />

4) Einfache Verzweigung<br />

IF Then begin<br />

Anweisung 1;<br />

Anweisung 2;<br />

…<br />

end else begin<br />

Anweisung 3;<br />

Anweisung 4;<br />

...<br />

end;<br />

5) Mehrfache Verzweigung<br />

CASE OF<br />

Ergebnis 1: ;<br />

Ergebnis 2: ;<br />

...<br />

Else <br />

Zusammenfassung von Katharina Ruppel unter wiso.ferit.info - 7 -


<strong>EDV</strong> Dies ist kein offizielles Skript.<br />

End;<br />

6) Allgemeiner Aufbau eines Programms in Pascal:<br />

Program ;<br />

Const = ;<br />

...<br />

TYPE<br />

= ;<br />

VAR<br />

: ;<br />

Begin<br />

;<br />

...........<br />

end.<br />

3.3. Deklaration <strong>und</strong> Typung<br />

Variablendeklaration = Vereinbarung, welche Daten in einen<br />

Programmlauf angesprochen werden<br />

-Name der verwendeten Variablen<br />

-Festlegung eines Datentyp<br />

Var: ;<br />

-Gültigkeit der Variablen: -gesamtes Programm<br />

-Teilbereiche( Prozeduren, Funktionen)<br />

Unterscheide: Standarddatentypen selbstdefinierte Datentypen<br />

Datentyp = Wertebereich einer Variablen (Domänen)<br />

Standarddatentypen:<br />

Integer: ganze Zahlen<br />

Real: reelle Zahlen<br />

Boolean: Wahrheitswerte( true, false)<br />

Char: alphanumerische Zeichen (z.B. A)<br />

String: Zeichenfolge aus alphanumerischen Zeichen<br />

usw.<br />

Bsp.: Var Ende :integer;<br />

Summe: real;<br />

Zusammenfassung von Katharina Ruppel unter wiso.ferit.info - 8 -


<strong>EDV</strong> Dies ist kein offizielles Skript.<br />

Deklaration eigener Datentypen:<br />

Type = ;<br />

Bsp.: Type Kleinzahl =[1,...,9];<br />

-zur Einschränkung von Wertebereichen, zur Verbesserung der<br />

Leistungsfähigkeit( weniger Speicherplatz verbraucht) <strong>und</strong> zur<br />

Vermeidung von Fehlern.<br />

-viele selbstdefinierte Datentypen sind komplexer.<br />

3.4. Strukturierte Daten<br />

Zusammenhängende Konstrukte <strong>und</strong> Zusammenfassung<br />

Records = Komponenten unterschiedlicher Art<br />

Array(s) = Komponenten gleicher Art, x-dimensionale homogene<br />

Datenstruktur, die nur aus Elementen gleichen Datentyps besteht, analog<br />

zu Vektoren, Matrizen.<br />

Bsp. zu Records: Var Student = record<br />

Name: string;<br />

Alter: integer;<br />

Geschlecht: mw;<br />

End;<br />

Array: Var : Array[Untergrenze..Obergrenze] of<br />

Datentyp<br />

Mehrdimensionales Array:<br />

Matrix: Array[1..20,1..30] of Boolean<br />

Record mit Array:<br />

Type Mensch = Record<br />

Name: char(36)<br />

Noten: array[1..3] of real<br />

End<br />

Array mit Record:<br />

Var Studentenmenge: Array[1..100] of Student,<br />

Wobei Type Student= record<br />

Name:char;<br />

Matrikelnummer:char(8);<br />

Zusammenfassung von Katharina Ruppel unter wiso.ferit.info - 9 -


<strong>EDV</strong> Dies ist kein offizielles Skript.<br />

Geburtsdatum: record<br />

Tag, monat, Jahr: integer<br />

End<br />

Zugriff: Studentenmenge[15].Matrikelnummer’11044’<br />

3 Abstraktionsstufen:<br />

1)Typung durch type Definition einer „Schablone“<br />

2)Variablendeklaration durch varDefinition von Speicherplatz gemäß<br />

der Typdefinition<br />

3)Variablenwertzuweisung durch bspw.: variablenname100<br />

3.5. Persistenz von Daten<br />

-Verfügbarkeit von Daten über Programmlaufzeit hinaus<br />

-Erleichterung<br />

Dateien bzw. Datenbanken<br />

Datei: Sequenz von Datensätzen eines bestimmten Typs<br />

unlimitiert(beliebig viele Datensätze)<br />

keine Indexierung der Datensätze<br />

1)Deklaration einer (typisierten) Datei:<br />

Var : File of <br />

2)Arbeiten mit Dateien:<br />

-Initialisierung<br />

Assign(, ‚’)Verknüpfung zwischen dem<br />

programminternen Namen <strong>und</strong> dem externen Dateinamen<br />

-Öffnen der Datei<br />

Reset( variablenname)<br />

Oder<br />

Rewrite(variablenname)was sich vorher auf dem Datenträger an Daten<br />

befand, wird mit diesem Befehl gelöscht <strong>und</strong> kann überschrieben werden<br />

-Schließen der Datei:<br />

Close(variablenname)<br />

3)Lesezugriff auf getypte Datei:<br />

Read (variablenname, Elementvariable)<br />

Bei lesendem Zugriff wird der Positionszeiger( am Anfang immer auf dem<br />

1. Datensatz) um eine Position in Richtung EOF (end of file) verschoben.<br />

Zusammenfassung von Katharina Ruppel unter wiso.ferit.info - 10 -


<strong>EDV</strong> Dies ist kein offizielles Skript.<br />

Assign(, ‚’)<br />

Reset(Variablenname) Positionszeiger entsteht<br />

Read(variablenname, Elementvariable) 1. Datensatz ausgelesen<br />

Read(variablenname, Elementvariable)Positionszeiger um eine Position<br />

verschoben, 2. Datensatz wird ausgelesen ...<br />

4)Schreibbefehl:<br />

Write(variablenname, elementvariable)<br />

5)Einlesen von Daten in eine Datei:<br />

Bsp.:<br />

Type tdaten= record<br />

Matnr:integer<br />

Punktzahl: real<br />

Note:real<br />

Begin<br />

Assign(datei,’C:\noten.dat’)<br />

Rewrite(Datei)<br />

Readln(Daten.matnr)<br />

While Daten.Matnr0 do begin<br />

Readln(Daten.Punktzahl)<br />

Readln(Daten.Matnr)<br />

Od<br />

Write(Datei,Daten)<br />

End.<br />

3.6. Mengenverwaltung (Pointer/Zeiger)<br />

Mächtigkeit der Menge soll nicht a priori beschränkt sein Lösung: Listen<br />

Bei Arrays: statische Mengenbegrenzung<br />

Zeiger(pointer):<br />

Variable mit Information über die Adresse eines Elements von einem<br />

bestimmten Typ<br />

1) Deklaration:<br />

Var: ^Datentyp<br />

Bsp.: Klausurteilnehmer: ^student<br />

Type student = record<br />

Matrikelnr: integer;<br />

Punktzahl :integer;<br />

Note: integer;<br />

Next: ^student<br />

Zusammenfassung von Katharina Ruppel unter wiso.ferit.info - 11 -


<strong>EDV</strong> Dies ist kein offizielles Skript.<br />

2) Zuweisungen:<br />

End;<br />

Klausurteilnehmer:= Nil (not in list)<br />

Klausurteilnehmer^.Matrikelnr:=12345<br />

Klausurteilnehmer^.Punktzahl:=55<br />

3) Anforderung: Generieren zur Laufzeit<br />

New(variablenname)<br />

New(Klausurteilnehmer)<br />

4) Spezielles Element für den Zugriff auf die Liste:<br />

z.B. Wurzel: ^student<br />

5) Einfügen eines neuen Elements(ohne Sonderbedingungen) stets am<br />

Anfangs einer Liste:<br />

Bei leerer Liste:<br />

Wurzel:=Nil<br />

New(Neu)<br />

Neu^.next: = Wurzel<br />

Wurzel:= Neu<br />

6) Bei vorhandener Liste am Anfang einfügen<br />

New(Element)<br />

Eingabe(Element^.Inhalt)<br />

If Wurzel:= Nil then<br />

Element^next:=nil<br />

Wurzel :=Element<br />

Else<br />

Element^.next:=wurzel<br />

Wurzel :=Element<br />

Fi<br />

7) Am Ende einer Liste einfügen:<br />

New(Element)<br />

Eingabe(Element^.Inhalt)<br />

New (Laufzeiger)<br />

Laufzeiger^.next:= Nil<br />

If Wurzel:= Nil then<br />

Element^next:=nil<br />

Zusammenfassung von Katharina Ruppel unter wiso.ferit.info - 12 -


<strong>EDV</strong> Dies ist kein offizielles Skript.<br />

Wurzel :=Element<br />

Else<br />

Laufzeiger^.next:=Element<br />

Element^.next:=nil<br />

Fi<br />

Laufzeiger:=Element<br />

8) Bei sortierten Listen:<br />

-Suchen der Stelle, an der eingefügt werden soll<br />

-Einfügen<br />

9) allgemein: Suchen <strong>und</strong> Finden<br />

Bsp.: Lauf:^student<br />

Lauf:= wurzel<br />

If Lauf^.matrikelnr = gesuchte Matrikelnummer<br />

Then „gef<strong>und</strong>en“<br />

Else<br />

Lauf:=Lauf^ .next (weiterlaufen <strong>und</strong> erneut vergleichen)<br />

10) Löschen von Elementen aus einer Liste<br />

Bsp.:<br />

Begin<br />

Writeln( ‚BestellNr: ’?)<br />

Readln(Nr)<br />

If Wurzel Nil then begin<br />

If wurzel^.Nr = Nr then<br />

Wurzel := wurzel^ .next<br />

Else begin<br />

New (aktuell)<br />

aktuell:= wurzel<br />

while( aktuell^.next Nil )do begin<br />

if aktuell^.next^nr =nr then<br />

aktuell^next := aktuell^.next^next<br />

end;<br />

aktuell:=aktuell^next<br />

end;<br />

end;<br />

end.<br />

11) In eine Liste einfügen, die sortiert ist, z.B. nach Artikelnummern<br />

New(Neu)<br />

Eingabe(Neu^.Artnr)<br />

Eingabe(Neu^Bezeichnung)<br />

Laufzeiger:=wurzel<br />

Zusammenfassung von Katharina Ruppel unter wiso.ferit.info - 13 -


<strong>EDV</strong> Dies ist kein offizielles Skript.<br />

Vorlaufzeiger:=wurzel<br />

Eingefuegt:=boolean<br />

While (LaufzeigerNil) and (Eingefuegt =false) do<br />

If Neu^Art < Laufzeiger^.Artnr<br />

Then Neu^.next := Laufzeiger<br />

If Laufzeiger =Vorlaufzeiger<br />

Then Wurzel := Neu<br />

Else Vorlaufzeiger^.next := Neu<br />

Eingefuegt := true<br />

Fi<br />

Else Vorlaufzeiger := Laufzeiger<br />

Laufzeiger := Laufzeiger^.next<br />

Fi<br />

OD<br />

If Eingefuegt = false then<br />

Neu^.next := Nil<br />

Vorlaufzeiger^.next := neu<br />

Fi<br />

12) Vorhandenen Listen sortieren<br />

Man nehme eine alte, unsortierte Liste <strong>und</strong> überträgt ihre Daten sortiert in<br />

eine neue leere Liste<br />

Ein Bsp.:<br />

Type zeiger =^K<strong>und</strong>e<br />

K<strong>und</strong>e = record<br />

Knr: integer<br />

Next:zeiger<br />

Var wurzel, wurzel2, Aktuell, Laufzeiger, Vorlaufzeiger: zeiger<br />

Eingefuegt: boolean<br />

Wurzel2:= Nil<br />

Laufzeiger :=wurzel<br />

Aktuell:=wurzel2<br />

Vorlaufzeiger:=wurzel2<br />

While Laufzeiger Nil do begin<br />

If (Wurzel 2 = Nil) or (Wurzel2 ^.Knr>Laufzeiger^.Knr)<br />

then begin<br />

New (Neu)<br />

Neu^.Knr =Laufzeiger^.Knr<br />

Neu^.next:=wurzel2(bzw. Nil)<br />

Wurzel2 :=Neu<br />

End;<br />

Eingefuegt=true (bis hierhin wurde am Anfang der Liste eingefügt)<br />

Zusammenfassung von Katharina Ruppel unter wiso.ferit.info - 14 -


<strong>EDV</strong> Dies ist kein offizielles Skript.<br />

( ab hier: die Position für das neue Element muss gesucht werden)<br />

Else Aktuell := Aktuell^next<br />

While aktuellnil and not eingefuegt do begin<br />

If aktuell^.Knr< Laufzeiger^Knr then begin ( Position noch nicht<br />

gef<strong>und</strong>en)<br />

Vorlaufzeiger:=Aktuell(bzw.Vorlaufzeiger^.next)<br />

Aktuell:=Aktuell^next<br />

End<br />

Else begin( die Position wurde gef<strong>und</strong>en, nun kann eingefügt werden)<br />

New(Neu)<br />

Neu^.Knr:=Laufzeiger^.Knr<br />

Neu^.next:=aktuell<br />

Vorlaufzeiger^.next:= neu<br />

Eingefuegt = true<br />

End;<br />

OD<br />

If not eingefuegt then begin( am Ende der Liste einfügen)<br />

Vorlaufzeiger^.next := neu;<br />

Neu^.next:=nil<br />

End;<br />

Laufzeiger:=Laufzeiger^.next<br />

OD<br />

13) Angebote sollen sortiert nach Angebotsnummern in den<br />

Arbeitsspeicher eingelesen werden, treffen aber unsortiert ein(man gehe<br />

von einer doppelt verketteten Liste aus)<br />

Begin<br />

Einlesen(Angebotsnr)<br />

New(Neu)<br />

New(Wurzel)<br />

Neu^.Angebotsnr:=Angebotsnr<br />

If Wurzel=Nil then begin<br />

Wurzel:=neu<br />

Neu^.next:=nil<br />

End else begin<br />

Lz:=wurzel^.next<br />

Vz:=wurzel<br />

While(LzNil) do begin<br />

If Lz^.Angebotsnr >Neu^.Angebotsnr then begin<br />

Neu^.prev:=Vz<br />

Neu^.next:=Lz<br />

Vz^.next:=neu<br />

Lz^.prev:=neu<br />

End else begin<br />

Vz:=Lz<br />

Zusammenfassung von Katharina Ruppel unter wiso.ferit.info - 15 -


<strong>EDV</strong> Dies ist kein offizielles Skript.<br />

Lz:=Lz^.next<br />

End<br />

End<br />

If Lz=Nil then begin<br />

Vz^.next :=Neu<br />

Neu^.next:=nil<br />

end<br />

end.<br />

14) Eine Liste aus dem Arbeitsspeicher auf einen Datenträger übertragen<br />

<strong>und</strong> damit dauerhaft speichern:<br />

Ein Bsp.:<br />

Type<br />

TArtikel = record<br />

Artnr: integer<br />

Artbez: string<br />

Next: ^tartikel<br />

End<br />

Tartikel2= record<br />

Artnr: integer<br />

Artbez: string<br />

End<br />

Var wurzel, Laufzeiger: ^tartikel<br />

Var Speichern: tartikel2<br />

Datei: File of tartikel2<br />

Assign( Datei, ’C:\Daten.dat’)<br />

Rewrite(Datei)<br />

Laufzeiger:= wurzel<br />

While Laufzeiger Nil Do<br />

Speichern.Artnr:=Laufzeiger^.Artnr<br />

Speichern.Bez.:=Laufzeiger^.Bez<br />

Write(Datei, Speichern)<br />

Laufzeiger:= Laufzeiger^.next<br />

OD<br />

Close(Datei)<br />

15) Übertragen von Daten von einem Datenträger in den Arbeitsspeicher<br />

mit anschließender Ausgabe der Liste auf dem Bildschirm:<br />

Bsp.:<br />

Type zeiger: ^Tag<br />

Tag= record<br />

Zusammenfassung von Katharina Ruppel unter wiso.ferit.info - 16 -


<strong>EDV</strong> Dies ist kein offizielles Skript.<br />

Menge:integer<br />

Preis:real<br />

Next:zeiger<br />

End<br />

Absatz =record<br />

Menge:integer<br />

Preis:real<br />

End<br />

Var Datei: File of Absatz<br />

Daten: Absatz<br />

Wurzel, neu, aktuell: zeiger<br />

Begin<br />

Assign(Datei,’A:\Abdatz.dat’)<br />

Reset(Datei)<br />

New(Wurzel)<br />

Wurzel:=Nil<br />

While not EOF(Datei) do begin<br />

Read(Datei,Daten)<br />

New(Neu)<br />

Neu^.Menge:=Daten.Menge<br />

Nu^.Preis:=Daten.Preis<br />

Neu^.Next:=wurzel<br />

Wurzel:=neu<br />

End<br />

Close(Datei)<br />

New(Aktuell)<br />

Aktuell:=wurzel<br />

While Aktuellnil do<br />

Begin<br />

Writeln(‘Menge:’, Aktuell^.Menge)<br />

Writeln(‚Preis:’, Aktuell^.Preis :0:2)<br />

Aktuell:=Aktuell^.Next<br />

End<br />

Readln<br />

End.<br />

16) Bearbeiten eines Objekts aus einer Objektmenge<br />

-Finden des Objekts<br />

-Durchführung der Bearbeitungsoperation<br />

Bsp.: Type Produkt= record<br />

Produktnr:integer<br />

Zusammenfassung von Katharina Ruppel unter wiso.ferit.info - 17 -


<strong>EDV</strong> Dies ist kein offizielles Skript.<br />

Var wurzel, Laufzeiger<br />

Pnr: integer<br />

Lagerbestand:integer<br />

Next:^produkt<br />

Eingabe(Pnr)<br />

Eingabe(Änderungsmenge(Lagerab-oder zugang))<br />

Finden des Objekts mit<br />

Produktnr=Pnr<br />

Durchführung der Änderung<br />

While (LaufzeigerNil) and (Laufzeiger^.ProduktnrPnr)<br />

Do Laufzeiger:=Laufzeiger^.next<br />

OD<br />

If Laufzeiger=nil<br />

Then Ausgabe(‚Pnr existiert nicht’)<br />

Else<br />

Laufzeiger^.LagerbestandLaufzeiger^.Lagerbestand+Änderungsmenge<br />

Fi<br />

17) Einfügen in eine doppelt verkettete Liste<br />

Begin<br />

New(Wurzel)<br />

New(Neu)<br />

Eingabe(Nr)<br />

Neu^.Nr:=Nr<br />

If Wurzel^.Nr > Neu^.Nr then<br />

Neu^.prev: =nil<br />

Neu^.next: = wurzel<br />

Wurzel:= neu<br />

End else begin<br />

Lz:= wurzel^.next<br />

Vz:=wurzel<br />

While( Lznil) and (eingefuegt=false) do begin<br />

If Neu^.Nr


<strong>EDV</strong> Dies ist kein offizielles Skript.<br />

Vz^.next:=neu<br />

Neu^.prev:=Vz<br />

End<br />

End.<br />

18) Löschen von Elementen aus einer doppelt verketteten Liste:<br />

Begin<br />

Einlesen(Nr)<br />

If Wurzel^.Nr= Nr then begin<br />

Wurzel:=Wurzel^ .next<br />

Wurzel^.next^ .prev:=nil<br />

End<br />

Else begin<br />

Lz:=Wurzel<br />

While(LzNil) do begin<br />

If Lz^.Nr=Nr then begin<br />

Lz^.next^.prev:=Lz^.prev<br />

Lz^.prev^.next:=Lz^.next<br />

End<br />

Lz:=Lz^.next;<br />

End<br />

End<br />

End.<br />

19) Löschen, “Alles in einem” :<br />

If Löschen^.PrevNil then<br />

Löschen^.prev^.next:=Löschen^.next<br />

Fi<br />

If Löschen^.nextNil then<br />

Löschen^.next^.prev:=Löschen^.prev<br />

Fi<br />

If Wurzel= Löschen<br />

Then Wurzel:=Löschen^.next<br />

Fi<br />

Dispose(Löschen)<br />

Dieses Skript wurde erstellt von<br />

Katharina Ruppel<br />

- S K R I P T E N D E -<br />

Dies ist kein offizielles Skript <strong>und</strong> erhebt somit keinen<br />

Anspruch auf Vollständigkeit <strong>und</strong> Richtigkeit.<br />

http://www.wiso.ferit.info<br />

Mit fre<strong>und</strong>lichen Grüßen<br />

Ferit Demir<br />

Zusammenfassung von Katharina Ruppel unter wiso.ferit.info - 19 -

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!