Wirtschaftsinformatik I

Werbung
WIRTSCHAFTSINFORMATIK I
Wintersemester 2006/2007
Autor: Klaus-Dieter Hutter
Stand: 05.12.2006
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 1 von 38
Stand: 05.12.2006
1 Inhaltsverzeichnis
1
Inhaltsverzeichnis................................................................................................................ 2
2
Übung: Beschreibung eines Radwechsels.......................................................................... 4
3
Begrifflichkeiten.................................................................................................................. 4
4
Algorithmus ......................................................................................................................... 5
4.1
5
Eigenschaften von Algorithmen.............................................................................................5
Turing-Maschine................................................................................................................. 9
5.1
Operationales Maschinenmodell .........................................................................................12
5.1.1
Drei-Adress-Befehl .......................................................................................................................... 13
5.1.2
Sprungbefehle .................................................................................................................................. 15
5.1.3
Spracherweiterung............................................................................................................................ 16
5.1.3.1
Indizierte Adressierung........................................................................................................... 16
6
Aufgaben eines Compilers ................................................................................................ 16
6.1
Höhere Programmiersprachen ............................................................................................16
6.2
Sprachmerkmale (Semiotik) ................................................................................................17
6.3
Objektsprache .......................................................................................................................17
6.4
Metasprachen ........................................................................................................................17
6.5
Bachus-Naur-Form (BNF) ...................................................................................................18
6.5.1
Wertebereich des Bezeichners.......................................................................................................... 18
6.5.1.1
Metadefinition für die Variablendeklaration in MODULA2 .................................................. 18
6.6
Erweiterter BNF....................................................................................................................18
6.7
Semantik von Programmiersprachen .................................................................................19
6.7.1
6.7.2
6.7.3
6.7.4
Übersetzer-Semantik ........................................................................................................................ 19
Operationale Semantik ..................................................................................................................... 19
Denotationale (funktionale) Semantik.............................................................................................. 20
axiomatische Semantik..................................................................................................................... 20
7
Möglichkeiten der Darstellung von Programmabläufen in der imperativen
Programmierung ....................................................................................................................... 20
7.1
7.1.1
7.1.2
7.1.3
7.1.4
7.1.5
7.2
7.2.1
7.2.2
7.2.3
7.3
Programmablaufpläne..........................................................................................................20
Aktion (Operation, Anweisung, Ein-/Ausgabe,….) ......................................................................... 20
Ablauf / Zusammenführung ............................................................................................................. 21
Verzweigung .................................................................................................................................... 21
Anfang / Ende .................................................................................................................................. 21
Übergangstellen................................................................................................................................ 21
Struktogramme (Nassi-Schneydermann) ...........................................................................21
Strukturblock (Anweisungen) .......................................................................................................... 21
Schleifen........................................................................................................................................... 22
Verzweigung .................................................................................................................................... 22
Pseudocode.............................................................................................................................22
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 2 von 38
Stand: 05.12.2006
7.4
Aufgabe „Darstellung Programmabläufe“ .........................................................................23
7.4.1
Lösung Struktogramm...................................................................................................................... 23
7.4.2
Lösung Programmablaufplan ........................................................................................................... 24
7.4.3
Lösung Pseudocode.......................................................................................................................... 24
7.4.4
Musterlösungen ................................................................................................................................ 25
7.4.4.1
Programmablaufplan............................................................................................................... 25
7.4.4.2
Struktogramm ......................................................................................................................... 26
7.4.4.3
Pseudocode ............................................................................................................................. 26
7.5
7.5.1
7.5.2
7.5.3
8
Vorteile / Nachteile Darstellung Programmabläufe...........................................................26
Programmablaufplan ........................................................................................................................ 26
Struktogramm................................................................................................................................... 27
Pseudocode....................................................................................................................................... 27
Konzepte imperativer Programmierung ........................................................................... 27
8.1
Aufgaben von Datentypen ....................................................................................................27
8.2
skalare Datentypen ...............................................................................................................27
8.3
strukturierte Datentypen......................................................................................................27
8.3.1
Skalare Datentypen .......................................................................................................................... 27
8.3.1.1
Der Datentyp BOOLEAN....................................................................................................... 27
8.3.1.1.1 Beispiel (MODULA2) ....................................................................................................... 28
8.3.1.2
Der Datentyp CARDINAL und INTEGER ............................................................................ 28
8.3.1.3
Der Datentyp REAL ............................................................................................................... 28
8.3.1.4
Der Datentyp CHAR............................................................................................................... 29
8.3.1.5
Aufzählungstypen ................................................................................................................... 29
8.3.2
Statisch strukturierte Datentypen ..................................................................................................... 30
8.3.2.1
Zugriffsart auf die Komponenten ........................................................................................... 30
8.3.2.2
Der Datentyp ARRAY............................................................................................................ 30
8.3.2.3
Der Datentyp RECORD ......................................................................................................... 31
8.3.2.3.1 Übung ................................................................................................................................ 31
8.3.2.4
Der Datetyp SET..................................................................................................................... 31
8.3.3
Dynamische strukturierte Datentypen .............................................................................................. 32
8.3.3.1
Der Datentyp SEQUENZ........................................................................................................ 32
8.3.3.1.1 Beispiel Datentyp SEQUENZ............................................................................................ 34
8.3.3.2
Der Datentyp POINTER......................................................................................................... 35
8.3.3.2.1 Das Pointer-Konzept.......................................................................................................... 35
8.3.3.2.2 Beispiel POINTER in PASCAL ........................................................................................ 36
8.3.3.2.3 Operatorbaum .................................................................................................................... 38
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 3 von 38
Stand: 05.12.2006
2 Übung: Beschreibung eines Radwechsels
1.
2.
3.
4.
5.
6.
7.
8.
Radmuttern mit Radkreuz leicht lösen
Auto mittels Wagenheber anheben, bis Rad keinen Bodenkontakt mehr hat
Radmuttern vollständig abschrauben
Rad abnehmen
Ersatzrad aufsetzen
Radmuttern so weit wie möglich – überkreuz – anschrauben
Auto mittels Wagenheber komplett ablassen
Radmuttern vollständig anziehen
3 Begrifflichkeiten
System:
Ein System ist eine räumlich abgeschlossene, logisch zusammenhängende und
zeitlich begrenzte Einheit, die voneinander abhängende Komponenten umfasst.
Modell: Bildung von Modellen
• Reduzierung auf relevante Merkmale
• Diskussion des Systems erfolgt also im Merkmalraum eines Modells
Ein Modell ist eine Zusammenfassung von Merkmalen eines realen oder künstlichen Systems
sowie eine Festlegung der Beziehungen zwischen diesen Merkmalen, d.h. eine Abstraktion
eines realen Systems durch Verzicht auf unwesentliche Merkmale.
Realität
Abstraktion
• System
Modell
• Merkmal
Attribut
• Merkmalausprägung
Wert
• Funktionalitäten
Methoden
Zustand: Ein Zustand ist somit die Belegung der Attribute eines Modells mit konkreten
Werten.
Das Wissen über den Zustand eines Systems wird als Information bezeichnet.
Beispiel:
Daten
Information
Wissen
Syntaktik
Semantik
Analogie anwenden
Zeichen
Bedeutung
Schlussfolgerung
rot, grün, gelb
Lampen einer Ampel
fahre ich 50km/h, habe ich
grüne Welle
Nachricht: wertfreie Übermittlung von Daten
Zeichencode dient zur Darstellung von Zeichen (ASCII, Unicode)
Dualzahl-Darstellung:
für N=5 gilt
positive Zahl
z = entsprechende Dualzahl
negative Zahl
–z = 2N – z (Zweierkomplement)
z.B.
-5 = 25 -5 = 27 (mit führender 1 für negative Zahlen)
Bsp:
3
00011
+ (-7)
11001
-4
11100
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 4 von 38
Stand: 05.12.2006
4 Algorithmus
Algorithmen sind sinnvolle Zustandsänderungen von Werten in Modellen
Im Rechner sind eigentlich nur Daten enthalten in Form von Ziffern, Zeichen eines Alphabets.
Der Algorithmus „haucht“ der Maschine pseudointelligentes Verhalten ein.
Bsp.:
15 / 3 => 5
„cat“ => „Katze“
„:-)“ => ☺
Rechnen in einem Computer ist somit das Manipulieren von Daten.
Merksatz:
Einen Algorithmus nennt man abstrakt, wenn er prinzipiell eine nicht beschränkte Klasse von
Problemen löst, z.B. die Multiplikation beliebiger ganzer Zahlen.
4.1 Eigenschaften von Algorithmen
•
•
•
•
•
•
•
•
sie müssen konkret beschrieben sein, einen endlichen Umfang haben
dürfen zur Laufzeit nur eine endliche Menge von Werten benutzen
muss in endlicher Zeit terminieren
endet ein Algorithmus bei gleichem Input stets mit gleichem Ergebnis, dann heißt er
determiniert (funktional)
liefert ein Algorithmus unterschiedliche Ergebnisse, nennt man ihn zufällig oder auch
randomisiert
suboptimale Algorithmen nennt man solche Berechnungen, die vor dem Optimum
stoppen, z.B. weil das Laufzeitverhalten sonst zu lange ist (Bsp.: Berechnung der Zahl
Pi)
ein deterministischer Algorithmus wird im gleichen Zustand stets auf die gleiche Weise
fortgeführt, ist also immer determiniert
liefern zwei verschiedene Algorithmen bei gleichen Eingaben stets die gleichen
Ergebnisse, so nennt man sie äquivalent
Beispiel:
Namensuche im Telefonbuch
- Suche nach Index
- sequentiell
- „divide and conquer“
(Buch in der Mitte aufschlagen, nach rechts
oder links weitersuchen, wieder die Mitte
aufschlagen usw.)
Die Laufzeit vieler Algorithmen hängt vom Umfang des Problems ab, welches zu lösen ist. In
diesem Zusammenhang spricht man von der Komplexität eines Algorithmus
nicht berechenbare Algorithmen: Erreichbarkeitsproblem
Äquivalenzproblem
Es gibt auch eine Klasse von Problemen, die nicht lösbar sind, z.B. Berechnung Zahl Pi
(grundsätzlich sind die Probleme aber berechenbar)
Die Ausführgeschwindigkeit eines Programmes wird auch als Komplexität bezeichnet.
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 5 von 38
Stand: 05.12.2006
Ein endlich deterministischer Automat
• ist ein mathematisches Modell
• Merkmale können verschiedene Ausprägungen/Werte annehmen
• endliche Automaten haben i.d.R. nur ein Merkmal
• die verschiedenen Werte der Attribute, die so ein Modell haben kann, werden als
Zustände bezeichnet
Graphische Notation zur Beschreibung eines Automaten:
• Modell befindet sich in einem bestimmten Zustand
• reagiert auf Ereignisse
• Modell reagiert mit Ausgabe
• es vollziehen sich Änderungen bei den Zuständen des Automaten
Endlicher Automat
E, A
0
1
N, U
4
E, A
E, 0
2
3
D, T
T, T
Abbildung 1 Endlicher Automat
Kreise stellen Zustände dar, Pfeile symbolisieren Übergänge zwischen den Zuständen, das
Zeichenpaar (A,Z): erstes Zeichen = Eingabewert (extern)
zweites Zeichen = Ausgabewert, verbunden mit Zustandswechsel
Anfangszustand
Endzustand
z.B.:Zeichenkette Eingabe: ENTE
Zeichenkette Ausgabe: AUTO
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 6 von 38
Stand: 05.12.2006
Formal lässt sich ein Automat durch ein 6-er Tupel definieren
A = ( Z = { 0, 1, 2, 3, 4 },
Ein = { A, ……., Z },
Aus = { A, …...., Z },
Ü = { ( 0, E, A, 1 ), ( 1, N, U, 2 ), ( 2, E, A, 1 ), ( 2, D, T, 3 ), ( 2, T, T, 3 ), (3, E, O, 4 ) },
Anf = 0,
End = 4)
T, T
E, A
N, U
0
3
2
E, 0
1
E, A
4
E, 0
R, T
5
6
D, 0
Abbildung 2 Aufgabe Deterministischer Automat
Aufgabe:
•
•
Ein: ERDE
Aus: ATOO
Ein: ENERDE
Aus: AUATOO
Definitionen
• Ein Automat heißt endlich, wenn er endlich viele Zustände besitzt und das
Eingabealphabet endlich ist.
•
Ein Automat heißt deterministisch, wenn in keinem Zustand zu einer Eingabe mehr als
ein Folgezustand festgelegt ist
•
Ein Automat heißt unvollständig, wenn zu einem Zustand und möglichen Eingabewert
kein Nachfolgezustand definiert ist
•
Ein Automat heißt indeterministisch, wenn zu einem Zustand und möglichen
Eingabewert mehrere Nachfolgezustände definiert sind
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 7 von 38
Stand: 05.12.2006
T, T
E, A
N, U
0
3
2
E, 0
1
E, A
4
E, 0
R, T
5
6
D, 0
D, T
Abbildung 3 Unvollständiger Automat
T, T
E, A
N, U
0
3
2
E, 0
1
E, A
4
E, A
E, 0
R, T
5
6
D, 0
Abbildung 4 Indeterministischer Automat
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 8 von 38
Stand: 05.12.2006
5 Turing-Maschine
Die Turing-Maschine ist ein
Berechnungsmodell
Automat
Speicherband
Ein Berechnungsschritt besteht aus
Wert aus einem Speicher lesen
in Abhängigkeit vom Automatenzustand einen neuen Wert schreiben
Schreib-/Lesekopf nach links oder rechts bewegen
1
k, &, R
Schreiben von
"&"
0
Lesen von
"k"
v, %, L
2
Schreib-/Lesekopf
L
...
N
M
R
L
K
V
D
1
2
...
Abbildung 5 Turing-Maschine
Bewegungsrichtung
k, &, R
Eingabe
Ausgabe
Abbildung 6 Legende Turing-Maschine
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 9 von 38
Stand: 05.12.2006
0, ., L
., ., L
3
8
Stop
0, 1, L
0, 0, R
1, 1, R
Start
., ., R
0
1, 1, L
0, 0, L
., ., L
1, 1, R
1
2
., ., L
1, 0, L
4
5
., ., L
0, 0, R
., ., R
0, 1, R
7
6
., 1, R
1, 0, L
0, 0, R
1, 1, R
Abbildung 7 Übung Turing-Maschine
.
1
1
2
2
2
4
5
5
5
6
6
7
7
1
2
2
2
4
4
5
5
6
7
1
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
0
0
1
.
.
1
1
1
.
1
1
1
.
0
1
1
.
0
1
0
.
1
1
0
.
1
0
1
.
1
.
Seite 10 von 38
Stand: 05.12.2006
2
2
2
4
5
5
5
6
6
6
7
7
7
1
2
2
2
4
4
4
5
6
7
1
1
2
2
4
5
5
5
6
6
7
7
1
1
2
2
4
4
5
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
1
0
1
.
0
0
1
.
0
0
1
0
0
.
1
0
0
.
1
1
0
.
1
.
0
1
1
.
0
1
0
.
0
1
0
.
0
1
0
.
1
0
Seite 11 von 38
Stand: 05.12.2006
0
5
6
7
1
1
1
2
4
5
5
5
6
6
6
6
6
7
7
7
7
7
1
1
1
1
3
3
3
3
8
.
1
.
0
0
1
.
0
0
0
.
0
0
0
0
1
0
0
0
0
.
0
0
0
.
.
.
.
1
0
0
0
0
.
.
.
.
.
.
Schlussfolgerung:
Zu jedem berechenbaren Problem gibt es eine konstruierbare Turingmaschine, die das Problem
löst.
5.1 Operationales Maschinenmodell
-
Speicher (Band) aus linearen Folgen von Zellen von der Nummer 0 bis 220
- Werte dieser Zellen können sein
+ Anweisungen (instructions / Befehle)
+ Daten
Programm (Algorithmus) besteht aus mehreren Befehlen. Befehle manipulieren Daten,
manipulierte Daten werden im Speicher abgelegt.
Ein Programm wird während seiner Abarbeitung als Prozess bezeichnet, daher stellt ein
Prozess eine Abfolge von Befehlen auf Daten dar.
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 12 von 38
Stand: 05.12.2006
Befehlszähler legt Reihenfolge der Befehle fest (gibt die Nummer der Zellen an, die den als
nächsten ausführbaren Befehl enthält).
Die Nummer einer Zelle bezeichnet man als Adresse, die Zelle heißt auch Speicherplatz.
In der Regel wird der Befehlszähler um eins erhöht, aber es gibt auch Befehle, in der der
nächste Befehl zur Ausführung steht (Sprungbefehle – goto-Befehle).
5.1.1 Drei-Adress-Befehl
enthält
- zwei Operanden (Werte)
- einen Verknüpfungsoperator (Operator)
- eine Adresse für Ergebnisspeicherung (Adresse)
Adresse
:=
Wert
Operator
Wert
}
Zuweisung /
Wertzuweisung /
Assignment
Adresse
Wert der Tabelle
Befehlszähler
0
000
adr104 : = val101 + val102
1
001
adr101 : = val101 + con9
2
002
adr104 : = val101 + val102
3
:
100
2
2
2
2
101
4
4
13
13
102
5
5
5
103
7
7
7
7
104
8
9
9
18
0
1
2
3
}
5
adr… ::=
gibt Adresse an, d.h. die Nummer gibt den Speicherplatz an
val… ::=
bedeutet, dass der Wert (Value), der unter der Adresse mit der Nummer
gespeichert ist, gemeint ist
con… ::=
Konstante Ziffer (Zeichen) repräsentiert den Wert
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 13 von 38
Stand: 05.12.2006
Adresse
Wert der Tabelle
Befehlszähler
0
000
adrSumme : = valBetrag + val Wert
1
001
adrBetrag : = valBetrag + con9
2
002
adrSumme : = valBetrag + valWert
3
:
Zins
Anzahl
2
2
2
2
Betrag
4
4
13
13
Wert
5
5
5
Mittel
7
7
7
7
Summe
8
9
9
18
0
1
2
3
5
Kapitel * Zinssatz * Tage
100 * 360
=
Kapital
Zinssatz
Tage
}
1000
4%
100
Adresse
Wert der Tabelle
Befehlszähler
0
000
adrNenner : = con100 * con360
1
001
adrZaehler : = valKapital * valZinssatz
2
002
adrZaehler : = valZaehler * valTage
3
003
adrZins
4
:= valZaehler / valNenner
:
Zins
0
0
0
0
11,11
Kapital
1000
1000
1000
1000
1000
Zinssatz
4
4
4
4
4
Tage
100
100
100
100
100
Nenner
0
36000
36000
36000
36000
Zaehler
0
400000
400000
3
4
0
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
}
4000
1
2
Seite 14 von 38
Stand: 05.12.2006
5.1.2 Sprungbefehle
Vergleichsoperator
goto
}
}
wenn
then
}
valInhalt > con10
}
if
adrMaske
dann
Sprung
Zielmarke
Beispiel
000
001
002
003
004
005
006
:
Fak
Hilf
N
Fak
Hilf
N
Fak
Hilf
N
adrFak :=
con1
adrHilf:=
con2
if valHilf
>
valN then goto adr006
adrFak :=
valHilf * valFak
adrHilf:=
valHilf + con1
goto adr002
nächster Befehl
:
1
5
5
1
2
5
0
1
2
3
4
5
6
7
8
6
4
5
6
4
5
6
4
5
24
4
5
24
5
5
24
5
5
24
5
5
120
5
5
120
6
5
9
10
11
12
13
14
15
16
17
120
6
5
}
1
2
5
2
2
5
2
3
5
2
3
5
2
3
5
6
3
5
Sprung in adr006
18
Fakultät 5
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 15 von 38
Stand: 05.12.2006
5.1.3 Spracherweiterung
valvalName
000
001
002
:
350
:=
adrKarl
adrPeter
adrSusi
:
Notationserweiterung, es geht um den Wert, der unter der Adresse steht,
die wir an der Stelle “valname” finden.
:=
:=
:=
„indirekte Adressierung“
conMichel
valMichel
valvalMichel
Starte
Starte
Starte
Starte
Karl
0
Michel
Michel
Michel
Peter
0
0
350
350
Susi
0
0
0
Starte
350
350
350
350
0
1
2
3
Michel
Auflösung von rechts nach
links:
valvalMichel ^= val350
^= Starte
5.1.3.1 Indizierte Adressierung
Bei dieser Notationserweiterung wird die Adresse nicht direkt oder indirekt angegeben,
sondern durch eine Operation errechnet;
wobei die Operanden der Operation wiederum Adressen oder Konstanten sein können.
Beispiel:
adr [ valPeter + valSusi ]
val [ valKarl + valMichel ]
val [ con350 + valKarl ]
==>
==>
==>
adr0
Starte
Starte
6 Aufgaben eines Compilers
a.) lexikalische Analyse:
Das Übersetzungsprogramm prüft,, ob die vorliegenden
Zeichenketten Begriffe wiedergeben, die der Compiler kennt,
sogenannte wohlgeformte Wörter und stellt sie in Zeichen dar,
die von der Maschine verarbeitet werden können.
b.) syntaktische Analyse: Hier werden die sogenannten „Rechtschreibregeln“
(Grammatik) der Maschinensprache geprüft. Sind die Begriffe
in einer Reihenfolge aufgeführt, die nach der
Maschinensprache zulässig sind und sind an fest
vorgeschriebenen Stellen definierte Zeichen gesetzt, im
gewissen Sinn die Interpunktion der Maschinensprache.
c.) semantische Analyse: Hier wird geprüft, ob die unter a.) eingeführten Variablen und
deren Werte in der richtigen Weise ( b.) ) eingeführt und
richtig verwendet werden.
6.1 Höhere Programmiersprachen
kompakt, problemorientiert, portabel
Programmiersprache Schnittstelle zwischen Rechner und Mensch
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 16 von 38
Stand: 05.12.2006
6.2 Sprachmerkmale (Semiotik)
gültig für künstliche und natürliche Sprachen
a.) Syntax (Grammatik)
Menge von Vorschriften und Regeln
Aufbau von Wörtern, Sätzen und Programmen
b.) Semantik
Bedeutung eines syntaktisch korrekten Satzes oder Programmes
syntaktische Korrektheit ist notwendig, aber nicht hinreichende Bedingung für
semantisch eindeutige Interpretation
c.) Pragmatik
Zweckmäßigkeit unter Berücksichtigung der Umwelt
6.3 Objektsprache
Programm: Aneinanderkettung oder –reihung einzelner Zeichen, d.h. ein Wort über
einem zugrunde liegenden Alphabet
Schlüsselwörter:
einigen Zeichenketten kommen eine besondere Bedeutung zu und
sie dürfen nur in diesem Sinn verwendet werden, sogenannte
atomare Einheiten.
Terminalsymbole:
Alphabet: geordneter, endlicher, nichtleerer Zeichenvorrat
Schlüsselwörter: endliche Menge von bestimmten Zeichen bzw. Wörtern,
z.B.
BEGIN
;
END
IF
WHILE
diese beiden Mengen sind disjunkt (
Schnittmenge ist leer)
6.4 Metasprachen
Die Metasprache beschreibt nun, wie diese Terminalsymbole zu größeren Einheiten
aneinandergereiht werden dürfen.
Metavariablen:
(Nonterminalsymbole). Sie werden benötigt, um von konkreten
Terminalsymbolen zu abstrahieren und sie in „Klassen“ von
Zeichenketten oder sonst irgendwie zusammengehörig zu
beschreiben, z.B. „if-Anweisung“, „Variablenvereinbarung“
Metaausdrücke:
sind größere Einheiten, die Terminalsymbole und Metavariablen
verbinden. Dargestellt wird die Verknüpfung durchh Metasymbole
Metadefinitionen bestehen aus
Metavariablen und
Metaausdrücke
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 17 von 38
Stand: 05.12.2006
6.5 Bachus-Naur-Form (BNF)
}
}
Metadefinition für die Metavariablen <Bezeichner>, <Buchstabe> und <Ziffer> in
MODULA2.
<Bezeichner> ::= <Buchstabe> | <Bezeichner><Buchstabe> | <Bezeichner><Ziffer>
<Buchstabe> ::= A | B | C | D | E | …….. X | Y | Z
a | b | c | d | e | ………. x | y | z
<Ziffer>
::=
1|2|3|4|5|6|7|8|9|0
Metavariable
Definitionssymbol
Metaausdruck
rekursiver Aufbau der Definitionen
Metasymbole: | = Auswahlsymbol (logisches oder)
::=
Definitionssymbol
<>
}
Beispiel:
Klaus, KL4711 sind gültige Bezeichner
PE&RL, 94KL sind KEINE gültigen Bezeichner
6.5.1 Wertebereich des Bezeichners
Alle endlichen, nichtleeren Zeichenketten über die Vereinigungsmenge { A, B, C, ……., Z } {
1, 2, 3, ….., 9, 0 }, die mit einem Buchstaben beginnen.
6.5.1.1 Metadefinition für die Variablendeklaration in MODULA2
<VarVereinb>
<Vereinbarungen>
<Vereinbarung>
<Typ>
Beispiel:
VAR
::=
::=
::=
::=
VAR<Vereinbarungen>
: | <Vereinbarung><Vereinbarungen>
<Bezeichnerliste>:<Typ>;
INTEGER | CARDINAL | REAL | BOOLEAN | … weitere Typen
Alter : INTEGER;
i, j, k : REAL;
}
Bereich Variablendeklaration,
wird abgeschlossen durch nächstes
Schlüsselwort (hier: BEGIN)
BEGIN
6.6 Erweiterter BNF
[ Metaausdruck ]
Metaausdruck in eckigen Klammern bezeichnet optionale Zeichenketten,
die auch wegfallen können
{ Metaausdruck }
Metaausdruck in geschweiften Klammern bezeichnet eine beliebige
Wiederholung der Zeichenketten (Iteration)
{ Metaausdruck }ab Wiederholung mind. a-mal, höchstens b-mal, b = *
Beispiel:
<Bezeichner>
::=
nach oben offen
<Buchstabe> { <Buchstabe> | <Ziffer> }
Die BNF und EBNF stellen Grammatiken dar, mit deren Hilfe z.B. die Syntax einer
Programmiersprache beschrieben werden kann.
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 18 von 38
Stand: 05.12.2006
Solche Grammatiken können formal wie folgt definiert werden:
Eine Grammatik ist ein TUPEL G = { N, T, P, S }, wobei
N = die Menge der Nichtterminalsymbole
T = Menge der Terminalsymbole
P = Menge der Produktionen / Regeln
S = Startsymbol
ist.
Dies sind sogenannte kontexfreie Grammatiken, mit denen man kontexfreie Sprachen erzeugen
kann.
Sind die rechten Seiten der Produktionsregeln so beschränkt, dass dort nur EIN
Nichtterminalsymbol gefolgt von einem Terminalsymbol stehen darf, so spricht man von
regulären Grammatiken.
6.7 Semantik von Programmiersprachen
6.7.1 Übersetzer-Semantik
Rückführung auf bekannte Programmiersprache.
Verfahren: Die Bedeutung einer Sprache wird Wort für Wort, Ausdruck für
Ausdruck auf die Bedeutung einer bekannten Sprache zurückgeführt.
Abstraktion: Für die tatsächliche Übersetzung eines Programms wird man jedoch
nicht eine ebenso komplexe Programmiersprache (z.B. von C++ nach
Delphi) wählen, sondern auf eine Maschinensprache (Assembler)
zurückgreifen.
Nachteile:
Ein wenig zirkulär ist dieses Verfahren: es setzt die Semantikdefinition
der Übersetzersprache voraus. Als nachteilig kann sich auch
Orientierung an einem konkreten Maschinenmodell erweisen.
Analogie:
Das klassische Übersetzen z.B. vom Englischen ins Deutsche
verdeutlicht diesen Ansatz. Besondere Schwierigkeiten bereiten dabei
Wörter und Strukturen, für die es keine direkte Entsprechung gibt.
Solche Konstrukte müssten umschrieben werden.
In der Abstraktion müssten Sprachausdrücke jedoch in semantische
Primitiva übersetzt werden; diese unterliegen dann einer ganz
bestimmten Modellierung der Welt (Ontologie)
6.7.2 Operationale Semantik
Darstellung der Zustandsänderungen mit Hilfe von semantischen Funktionen
Sie ist eine Technik der Informatik, um die Bedeutung beziehungsweise die Semantik von
Computerprogrammen zu beschreiben. Sie beschreibt die Wirkung von Programmen als
schrittweise Zustandsänderung einer abstrakten Maschine. Operationale Semantik wird
verwendet, um Eigenschaften über einzelne Programme nachzuweisen oder Programme
zueinander in Beziehung zu setzen.
Zentral für die operationale Semantik ist der Begriff des Programmzustands. Ein Zustand
beschreibt dabei (in den meisten Fällen) eine Belegung der Programmvariablen sowie eine
Position im Programm. Des weiteren wird definiert, wann und wie sich Zustände ändern. Dies
geschieht entweder mit Hilfe einer Zustandsübergangsfunktion oder durch sogenannte
Inferenzregeln (also regelbasiert). Zustandsübergangsfunktion bzw. Inferenzregeln definieren
einen Interpreter.
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 19 von 38
Stand: 05.12.2006
Um mit der operationalen Semantik eines Programms zu arbeiten, wird in der Regel ein Stück
weit vom Originalprogramm abstrahiert. Es wird ein abstraktes Programm aufgestellt, das
äquivalent zum Original (dem konkreten Programm) ist und das durch einen abstrakten
Interpreter ausgeführt werden kann. Die Wirkungen, die dieses abstrakte Programm auf die
Zustände der abstrakten Maschine erzeugt, sind dann äquivalent zu den Zuständen, die erhalten
werden, wenn das konkrete Programm ausgeführt wird.
Beispiele für die Verwendung von operationaler Semantik sind die Semantikspezifikationen
von Algol 60, PL/I oder VDL.
6.7.3 Denotationale (funktionale) Semantik
Darstellung der Zustandsänderungen mit Hilfe von Konfigurationen.
Auch Funktionensemantik genannt; sie beschreibt die Wirkungsweise eines Programms als
partielle Abbildung eines Speicherzustandes in einen anderen. Die Regeln des Kalküls legen
(induktiv) fest, wie die Funktion zu einem Programm gebildet wird.
6.7.4 axiomatische Semantik
Darstellung der Auswirkungen von Zustandsänderungen auf die Eigenschaften von Zuständen.
Sie beschreibt die Bedeutung von Programmen durch Schluusregeln, die es erlauben von einer
gewünschten Eigenschaft der Eingabe auf Eigenschaften der Ausgabe zu schließen. Dabei
abstrahiert die axiomatische Semantik weiter als die denotationale Semantik. Es werden keine
konkreten Speicher transformiert, sondern nur logische Aussagen über Speicher, genauer
gesagt über Werte von Programmvariablen in ihnen. Die axiomatische Semantik entspricht der
Sicht des Programmierers. Sie scheint im Gegensatz zur operaationalen Semantik nur für
imperative Sprachen geeignet zu sein. Es existieren zwei Hauptausprägungen, der
Hoare-Kalkül und der
wp-Kalkül.
7 Möglichkeiten der Darstellung von Programmabläufen
in der imperativen Programmierung
befehls-/ablauforientiert
7.1 Programmablaufpläne
7.1.1 Aktion (Operation, Anweisung, Ein-/Ausgabe,….)
Aktion
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 20 von 38
Stand: 05.12.2006
7.1.2 Ablauf / Zusammenführung
7.1.3 Verzweigung
Ja
Bedingung
Nein
7.1.4 Anfang / Ende
Start
Stop
7.1.5 Übergangstellen
A
A
In DIN-Norm werden Symbole festgelegt.
7.2 Struktogramme (Nassi-Schneydermann)
7.2.1 Strukturblock (Anweisungen)
elementarer Strukturblock
Anweisung
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 21 von 38
Stand: 05.12.2006
Sequenz
f1
f2
f3
7.2.2 Schleifen
kopfgesteuerte Schleifen
while b do
f1
fußgesteuerte Schleifen (mind. 1x)
f1
REPEAT UNTIL b
7.2.3 Verzweigung
bedingte Anweisung
Bedingung
T
f1
F
f2
Fall- (case-) Anweisung
r=
1
2
3
4
f1
f2
f3
f4
5
f5
else
f6
7.3 Pseudocode
elementare Anweisungen
f1, f2, f3, f4, ……., fn
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 22 von 38
Stand: 05.12.2006
Sequenz
BEGIN
f1,
f2,
f3,
f4,
fn
END
Schleife
WHILE
DO
f
END
b
REPEAT f
UNTIL b
Verzweigung
IF
b
THEN
ELSE
END
f1
f2
7.4 Aufgabe „Darstellung Programmabläufe“
Suche in einer unsortierten Folge
Problem: - endliche, nicht leere Folge k1, k2, k3, …., kn von Schlüsselwerten
- einen Vergleichsewert k ε M
- Folgeglieder in beliebiger Reihenfolge
- Schlüsselwert kann mehrfach vorkommen
gesucht ist der Schlüsselwert, der am weitesten links in der Folge steht, der mit
k übereinstimmt
7.4.1 Lösung Struktogramm
Lese Element Folge
while k != Element Folge oder EOF
Lese nächstes
Element Folge
if EOF
J
Ausgabe EOF
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
N
Ausgabe Element
Seite 23 von 38
Stand: 05.12.2006
7.4.2 Lösung Programmablaufplan
Start
Lese Element Folge
Element Folge = k
oder EOF
Ausgabe Element
oder EOF
Stop
7.4.3 Lösung Pseudocode
BEGIN
Lese Element Folge
WHILE k != Element Folge oder EOF
DO
Lese nächstes Element Folge
END
Ausgabe Element Folge oder EOF
END
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 24 von 38
Stand: 05.12.2006
7.4.4 Musterlösungen
7.4.4.1 Programmablaufplan
Start
Eingabe k1, ...., kn, k
found ::= false
not found
und nicht alle
Elemente betrachtet
nehme nächstes
Element ki
found ::= ( ki = k )
found ?
Ausgabe: n + 1
Ausgabe: i
Stop
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 25 von 38
Stand: 05.12.2006
7.4.4.2 Struktogramm
Eingabe k1, ..... , kn, k
found ::= false
while (not found) und
"nicht alle Elemente betrachtet"
do
nehme nächstes Element ki
found ::= ( ki = k )
found ?
J
Ausgabe i
N
Ausgabe EOF
7.4.4.3 Pseudocode
BEGIN
Eingabe: k1, k2, ….., kn, k
found ::= FALSE;
WHILE NOT FOUND AND
„nicht alle Elemente betrachtet“
DO
nehme nächstes Element
found ::= (ki = k)
END
IF found
THEN Ausgabe i
ELSE Ausgabe n+1
END
END
7.5 Vorteile / Nachteile Darstellung Programmabläufe
7.5.1 Programmablaufplan
Vorteil:
-
Nachteil: -
durch graphische Visualisierung vor allem für Anfänger leicht verständlich
Darstellung beginnt auf hohem Abstraktionsniveau und kann durch weitere
Diagramme verfeinert werden
alle wesentlichen Ablaufstrukturen sind erkennbar und abbildbar
größere Diagramme können sehr schnell unübersichtlich werden
Verzweigungen und Zusammenführungen können beliebig kombiniert werden,
was zu einem unstrukturierten Diagrammablauf führen kann
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 26 von 38
Stand: 05.12.2006
7.5.2 Struktogramm
Vorteil:
-
Nachteil: -
alle wichtigen Ablaufstrukturen abbildbar
rekursive Definitionen der Strukturblöcke erlaubt
beliebige Sprünge sind nicht mehr möglich
größere Diagramme können sehr schnell unübersichtlich werden
Abhilfe: von hoher Abstraktionsebene immer mehr verfeinern
7.5.3 Pseudocode
evtl. Vor-/Nachteil:
keine graphische Darstellung
Nachteil: Sprungbefehle möglich
8 Konzepte imperativer Programmierung
Datentyp: -
bezeichnet den Wertebereich von Variablen
einzelne Werte heißen Konstanten
8.1 Aufgaben von Datentypen
-
zur Berechnung des benötigten Speicherbereichs durch den Computer
Zulässigkeit der Variablenverarbeitung
Verbesserung der Programmverständlichkeit
Speichern / Ablegenn von Werten
8.2 skalare Datentypen
-
wenn zuordbare Konstanten unteilbare Einheiten darstellen
Wertebereich mit totaler Ordnung (z.B. ein Wert ist größer als ein anderer, Alphabet: A
kommt vor B)
z.B. integer
8.3 strukturierte Datentypen
Zusammenfassung von Werten w1, …., wn aus beliebigen Typen als Wert w eines neues
Typs
w1, …., wn sind Komponenten von w; w nennt man strukturiert, wobei die
Komponenten wiederum aus strukturierten Typen bestehen kann.
Operationen: - ein Datentyp besteht aus dem Wertebereich und darauf definierten Operationen
8.3.1 Skalare Datentypen
8.3.1.1 Der Datentyp BOOLEAN
Wertebereich: { falsch, wahr }
Ordnung:
falsch < wahr
Operation: TRUE
FALSE
NOT
AND
OR
=
} 0-stelliger Operator, Konstante mit dem Namen „TRUE“
}
und „FALSE“
logisches NICHT ¬, unärer Operator
logisch UND ^
logisch ODER v
logisch Äquivalenz <==>
Definition: meistens vordefinierter Typ
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 27 von 38
Stand: 05.12.2006
8.3.1.1.1 Beispiel (MODULA2)
VAR Zaehler, Nenner : CARDINAL;
k, ok :
BOOLEAN;
BEGIN
ok := NOT k;
Nenner := 0;
END
8.3.1.2 Der Datentyp CARDINAL und INTEGER
Wertebereich:
Ordnung:
maschinenabhängige,endliche Teilmenge der mathematischen Wertebereiche
N0 (CARDINAL)
Z (INTEGER)
natürliche Ordnung
Operationen:
-
Addition (+)
Subtraktion (-)
Multiplikation (*)
=, <, >, Test auf Gleichheit / Ungleichheit
Vergleichsoperatoren
DIV
ganzzahlige Division
MOD Rest bei ganzzahliger Division
Definition: vordefinierter Typ
Beispiel
VAR n,m : INTEGER;
BEGIN
n := ( m + 17 ) MOD10;
END
8.3.1.3 Der Datentyp REAL
Wertebereich:
Ordnung:
Operationen:
maschinenabhängige, endliche Teilmenge der reellen Zahlen R
natürliche Ordnung
+
*
/
=, <, >
TRUNC Abschneiden der Stellen nach Dezimalpunkt
ROUND mathematisches Runden
SQRT
Quadratwurzel
Definition: bereits vordefiniert
Beispiel:
VAR x,y : REAL;
BEGIN
………
x = ( x + y ) / z;
………
END
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 28 von 38
Stand: 05.12.2006
8.3.1.4 Der Datentyp CHAR
Wertebereich: Zeichenvorrat des verwendeten Codes (ASCII, EBCDIC, UNICODE)
Ordnung:
abhängig vom verwendeten Code, dabei gilt immer:
„a“ < „b“ < ……… < „z“
„A“ < „B“ < …….. < „Z“
„0“ < „1“ < ………. < „9“
Diese Bereiche durchdringen sich nicht, z.B. keine Mischung von Groß- und Kleinbuchstaben.
Operationen:
ORD(c)
liefert die Ordnungszahl des Zeichens c
ORD: CHAR CARDINAL
CHR(i)
liefert mir das Zeichen mit der Ordnungszahl i
CHR: CARDINAL CHAR
Definition: bereits vordefiniert
Beispiel:
VAR c : CHAR;
BEGIN
…..
c := CHR(99)
…..
END
8.3.1.5 Aufzählungstypen
Wertebereich:
Menge der aufgeschriebenen Werte, z.B. Einschränkung bei Eingaben ( l =
ledig, v = verheiratet, g = geschieden etc.)
Ordnung: gemäß expliziter Reihenfolge der Aufführung, d.h. der Wert i kommt vor dem Wert
i+1
Operatoren:
<, >, !=, „vor“, „nach“, „ungleich“
INC(x) liefert den Wert, der in der Definition nach dem Wert x aufgeschrieben
wurde
DEC(x) liefert den entsprechenden Wert „vor“ x
Definition: mittels Konstruktoren “(“ und “)“
Einschluss in Klammern
Beispiel:
TYPE WoTag=(Mo, Di, Mi, Do, Fr, Sa, So)
VAR
Tag : WoTag;
frei : BOOLEAN;
BEGIN
…….
frei := ( Tag > Fr );
…….
END
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 29 von 38
Stand: 05.12.2006
aktuelle Schreibweise: „a“ ° „b“
Beispiel:
var_1 := „a“ + „b“;
var_2 := 4 + 10;
Zur Laufzeit hat Operator unterschiedliche Bedeutungen
Variablen müssen unterschiedlichen Typs sein
Operator ist überladen, kann unterschiedlich interpretiert werden
möglich: -
anhand des zugrundeliegenden Zeichenvorrats die Werte umrechnen, dann
addieren
Konkardination (Verkettung) beider Zeichenketten
-
8.3.2 Statisch strukturierte Datentypen
jedes Element setzt sich aus Werten anderer Typen zusammen
Struktur ist bereits vor der Übersetzung bekannt (Speicherplatz ist statisch reserviert
und nicht erst zur Programmlaufzeit, d.h. dynamisch)
Unterscheidung erfolgt aufgrund der Datentypen ihrer Komponenten
1.) alle beteiligten Typen der Komponenten sind vom selben Typ
- homogene, strukturierte Datentypen
- Beispiel: ARRAY, SET
2.) alle beteiligten Typen der Komponenten können von unterschiedlichen Typen sein
- inhomogene, strukturierte Datenytpen
- Beispiel: RECORD
8.3.2.1 Zugriffsart auf die Komponenten
a.) sequentieller Zugriff (entlang einer gegebenen Zeichenkette)
b.) direkter Zugriff (über Indexwert oder über Namen)
c.) Zugriff über Test auf Enthaltensein
8.3.2.2 Der Datentyp ARRAY
Komponentenfolge gleichen Typs (homogen)
statisch, wenn Anzahl der Komponenten vorher bekannt
dynamisch, wenn Anzahl der Komponenten zur Laufzeit änderbar
Wertebereich:
T x T x T x T x T x …..x T
homegenes, kartesisches Produkt n mal Typ T
Definition: mittels Konstruktor
„ARRAY[ IndexTyp ] OF T“
Zugriff:
über Indexwert im Array (direkter Zugriff)
Beispiel:
TYPE Vektor10=ARRAY[1..10] OF CARDINAL;
VAR
v : Vektor10;
BEGIN
……..
v[5] := 88;
……..
END
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 30 von 38
Stand: 05.12.2006
8.3.2.3 Der Datentyp RECORD
Komponentenfolge ungleichen Typs (inhomogen)
Wertebereich:
T1 x T2 x T3 x ….. x Tn
Ti unterschiedliche Typen inhomogenes kartesisches Produkt
Definition: mittels Konstruktion
„RECORD komponentDef END“
Zugriff:
Beispiel:
über den Namen (Direktzugriff)
RecordName, KomponentenName
TYPE Buch = RECORD
Autorname,
Autorvorname : ARRAY [1..20] OF CHAR;
Seite : CARDINAL;
Preis : REAL;
END;
VAR Exemplar : Buch;
BEGIN
……..
Exemplar.Preis := 10,50;
……..
END
8.3.2.3.1 Übung
1000 Visitenkarten (Firma, Name, Vorname, Telefon, Email, Straße, PLZ, Ort)
TYPE Visitenkarte = RECORD
Firma : ARRAY [1…30] OF CHAR;
Name : ARRAY [1…20] OF CHAR;
Vorname, Telefon : ARRAY [1...15] OF CHAR;
PLZ : CARDINAL;
Straße : ARRAY [1…30] OF CHAR;
Ort : ARRAY [1…20] OF CHAR;
Email : ARRAY [1…30] OF CHAR;
END;
TYPE ARRAY [1…1000] OF Visitenkarte;
8.3.2.4 Der Datetyp SET
enthält alle Werte einer gegebenen Grundmenge
Wertebereich:
P(T) = { x | x ≤ T }
Potenzmenge eines Grundtyps T (Menge aller Teilmengen einer Menge)
z.B. T = { 1, 2, 3 }
P(T) = { {}, {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}}
^= Anzahl 2³
Definition: Konstruktor „SET OF Grundtyp“
Operationen auf SET-Typen:
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
*
+
IN
Mengendurchchnitt (entspricht ∩ )
Mengenvereinigung (entspricht u )
Differenzmenge (entspricht \ )
Mengen-Einschluss (entspricht E )
Seite 31 von 38
Stand: 05.12.2006
Beispiel:
TYPE
Grundtyp = [ 1…3 ];
Mengentyp = SET OF Grundtyp;
m : Mengentyp;
VAR
BEGIN
m := { 1, 2, 3 } * { 1 };
END;
……
Überladung von Operanden
BEGIN
N := 5 x 10;
END
8.3.3 Dynamische strukturierte Datentypen
Datenstruktur wird während der Programmlaufzeit erzeugt
zwei Grundformen
a.) starre Strukturschablone
b.)
lediglich quantitative Änderungen der Komponenten (Anzahl) sind als
Strukturänderungen erlaubt
Sequenz-Struktur
flexibler, nahezu beliebiger Strukturaufbau während des Programmablaufs
möglich
Pointer
8.3.3.1 Der Datentyp SEQUENZ
geordnete Folge von Komponenten gleichen Typs
Anzahl nicht beschränkt (stets endlich)
Anzahl während Programmablauf veränderbar
Wertebereich:
M+ =
∞
u
Mi (Mi = Folge mit Länge i E N
i=0
Vorstellung: Magnetband unterteilt in einzelne Zellen, dabei enthält jede Zelle genau eine
Komponente.
Es kann nur die Komponente bearbeitet werden, die gerade unter dem Schreib/Lesekopf steht und das sequentiell.
Verwendung: für Ein- und Ausgabedaten von Sekundärspeichern sequentieller Datei/File
Definition: Konstruktor „FILE OF Grundtyp“
Beispiel:
TYPE IntegerFile = FILE OF INTEGER,
VAR f : IntegerFile;
Merke:
Zu jeder Filevariablen f wird automatisch eine Puffervariable f^ angelegt vom gleichen Typ
wie Komponenten von f, sie stellt das Bindeglied zwischen File und der Variablen dar.
Operationen: + Grundoperationen
a.) EOF (End of file) : EOF(f) = { TRUE } (a)
{ FALSE } (b)
(a) Sichtfenster steht hinter der letzten Komponente von f
(b) sonst
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 32 von 38
Stand: 05.12.2006
f^ --> ist hier undefiniert
Beispiel:
S-/L-Kopf
b.)
EOF(f) = TRUE
RESET
Zwei Fälle:
1. Fall: FILE ist nicht leer; RESET(f) bewirkt
Das Sichtfenster steht über der ersten Zelle
f^ hat als Wert den Inhalt der ersten Zelle von f
EOF(f) = FALSE
f^
2
f
2
7
1
3
EOF(f) = FALSE
S-/L-Kopf
2. Fall: FILE ist leer; RESET(f) bewirkt
Das Sichtfenster steht hinter leerem File
EOF(f) = TRUE
f^
?
EOF(f) = TRUE
f
vergleichbar mit Zustand bei Initialisierung
c.)
d.)
GET
Voraussetzung:
f^
2
f
2
EOF(f) = FALSE
wenn ja, verschiebt GET(f) das Sichtfenster um eine Zelle
nach rechts und weist f^ den Inhalt der Zelle zu
vor GET(f)
7
1
3
f^
f
7
2
7
nach GET(f)
1
3
REWRITE
löscht den Inhalt von f; anschließend liegt der gleiche Zustand vor wie bei der
RESET-Operation auf das leere FILE
Sichtfenster steht hinter leerem FILE
Wert von f^ undefiniert
EOF(f) = TRUE
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 33 von 38
Stand: 05.12.2006
e.)
PUT
Voraussetzung:
EOF(f) = TRUE
wenn ja, so fügt PUT(f) eine neue Zelle an das Fileende an
und weist ihr den Wert der Puffervariablen f^ zu. Danach
wird das Sichtfenster um eine Position nach rechts versetzt,
es gilt EOF(f) = TRUE. Der Wert von f^ ist undefiniert.
f^
f
2
7
1
f^ = ?
8
3
7
2
f
1
3
vor PUT(f)
8
nach PUT(f)
8.3.3.1.1 Beispiel Datentyp SEQUENZ
TYPE
VAR
Fx : File OF INTEGER;
f : Fx;
x,y : INTEGER;
Operation
REWRITE(f)
Wirkung
f^
?
EOF(f) = TRUE
f
----------------------------------------------------------------------------f^ := 17;
PUT(f);
f^
f
?
EOF(f) = TRUE
17
----------------------------------------------------------------------------f^ := 5;
PUT(f);
f^
f
17
?
EOF(f) = TRUE
5
----------------------------------------------------------------------------f^
RESET(f);
f
17
17
EOF(f) = FALSE
5
----------------------------------------------------------------------------x := f^;
GET(f);
f^
f
17
5
EOF(f) = FALSE
5
x = 17
-----------------------------------------------------------------------------
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 34 von 38
Stand: 05.12.2006
f^
y = f^;
GET(f)
f
17
?
EOF(f) = TRUE
5
x = 17
y=5
----------------------------------------------------------------------------f^
f^ := 8;
PUT(f);
f
17
5
?
8
EOF(f) = TRUE
Die beiden Anweisungen werden so häufig benötigt, dass sie in Prozeduren zusammengefasst
werden (z.B. in Pascal).
f^ := „Ausdruck“;
}
}
WRITE (f, „Ausdruck“) für
PUT(f);
Variable := f^;
READ (f, „Variable“) für
GET(f);
Das obige Beispiel kann wie folgt abgekürzt werden:
REWRITE(f);
WRITE(f, 17);
WRITE(f, 5);
RESET(f);
READ(f, x);
READ(f, y);
8.3.3.2 Der Datentyp POINTER
im praktischen Leben bei Abzählreimen (“Josephus”-Spiel) angewandt
8.3.3.2.1 Das Pointer-Konzept
Ein Pointer ist eine Variable, die einen Verweis auf eine andere Variable als Wert hat
Variable kann als Speicherplatz verstanden werden
die Variable, auf die verwiesen wird, nennt man referenzierte Variable
der Typ der referenzierten Variablen wird Bezugstyp genannt
die von einem Pointer p referenzierte Variable ist ansprechbar als p^ (alternativ: ↑p)
Als Symbol für einen Pointer p und die referenzierte Variable verwenden wir
Pointer p
referenzierte Variable p^
Pointer und referenzierte Variablen sind unabhängig voneinander.
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 35 von 38
Stand: 05.12.2006
Der Wert einer Pointervariablen ist entweder
undefiniert (z.B. direkt nach der Vereinbarung)
p ?
definiert:
Jetzt verweist p auf
entweder NIL (║; NIL unterscheidet sich von undefiniert, dass der Wert abgefragt
werden kann)
p
NIL
oder auf eine Variable p^ des Bezugtyps. Trifft dies zu, so kann der Wert von p^
o undefiniert (z.B. direkt nach der Erzeugung von p^)
p
?
p^
o definiert
p
Wert
p^
sein.
Das Interesse gilt der referenzierten Variablen p^, Pointer ist lediglich Hilfsmittel für den
Zugriff. Eine Veränderung von p^ ist nur über den Pointer möglich, hat jedoch keine
Auswirkung auf den Pointer selbst. Umgekehrt hat eine Änderung eines Pointers p keine
Auswirkung auf sein p^, allerdings ist p^ nicht mehr durch p ansprechbar.
Erzeugung einer Pointervariablen
per Vereinbarung statisch
TYPE PointerTypName = POINTER TO Bezugstyp;
VAR p : PointerTypName;
Erzeugung einer Variablen des Bezugtyps
NEW(p) erzeugt zur Laufzeit (dynamisch) eine Variable des Bezugtyps und weist
dem entsprechenden Zeigerwert p zu. Der Wert von p^ zu diesem Zeitpunkt
ist undefiniert.
Die Freigabe einer Variablen des Bezugtyps
DISPOSE(p) dann wird zur Laufzeit der Speicherplatz von p^ zur weiteren
Verwendung zurückgegeben; p hat den Wert NIL.
Wertzuweisung an Pointervariablen p durch
NEW(p)
p := q (Typgleichheit)
└→ dann gilt, das p^ = q^ ist.
DISPOSE(p)
p := NIL
8.3.3.2.2 Beispiel POINTER in PASCAL
TYPE string = ARRAY [0..9] OF CHAR;
ptr = POINTER TO Person;
Person = RECORD
Name : string;
next : ptr;
END;
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 36 von 38
Stand: 05.12.2006
Anweisung
VAR p,q : ptr;
Wirkung
p ?
q ?
-------------------------------------------------------------
NEW(p);
p
q ?
?
?
------------------------------------------------------------p^.Name := „Max“;
q ?
p
Max
?
-------------------------------------------------------------
NEW(q);
p
q
?
?
Max
?
------------------------------------------------------------p^.next := q;
q^.next := NIL;
p
q
?
Max
NIL
------------------------------------------------------------p.next.Name := “Lisa”;
p
q
Max
Lisa
NIL
------------------------------------------------------------q^.name := “Anne”;
p
q
Max
Anne
NIL
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
Seite 37 von 38
Stand: 05.12.2006
p^.next := NIL;
DISPOSE(q);
p
q
NIL
Max
NIL
Jede Variable des Bezugtyps enthält wieder einen Pointer
Verkettung von Variablen möglich
Ergebnis sind vielfältige Datenstrukturen
Vorteil:
dynamische Erzeugung von Komponenten nach Bedarf
Komponenten können in der Regel eingeführt und gelöscht werden, ohne die
umgebende Reststruktur verändern zu müssen
8.3.3.2.3 Operatorbaum
1) Wurzel ist die zuletzt ausführbare Operation
2) Der linke Teilbaum: Operatorbaum des linken Operanden
3) Der rechte Teilbaum: Operatorbaum des rechten Operanden
(a+b)*(c–d*e)
*
+
a
-
b
*
c
d
Wirtschaftsinformatik.doc
Erstellt von Klaus-Dieter Hutter
e
Seite 38 von 38
Stand: 05.12.2006
Herunterladen