EDV Vorlesungs-sowie Übungs-und Tutoriumszusammenfassung ...
EDV Vorlesungs-sowie Übungs-und Tutoriumszusammenfassung ...
EDV Vorlesungs-sowie Übungs-und Tutoriumszusammenfassung ...
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 -