Grundlagen der Informatik I
(Studiengang Medieninformatik)
Thema: 3. Datentypen, Datenstrukturen und imperative
Programme
Prof. Dr. S. Kühn
Fachbereich Informatik/Mathematik
Email: skuehn@informatik.htw-dresden.de
Beispiele für Algorithmen
Algorithmus zur Division von zwei Zahlen. (Ein robuster
Algorithmus muss den Fall der Division durch Null
berücksichtigen).
Verfahren zur Bestimmung des größten gemeinsamen Teilers
(ggT) zweier natürlicher Zahlen.
Verfahren zur Auswertung des geklammerten Ausdrucks
(a+b)*c. Hier kann man einen nicht-deterministischen
Algorithmus konstruieren, der bei gleichen Eingabewerten a, b
und c unterschiedlich abläuft, aber dennoch immer das gleiche
Ergebnis liefert. Hinweis: (a+b)*c=a*c+b*c.
05.10.2015
GDI - 3. imperative Programme
2
Beispiele für Algorithmen (2)
Ein Algorithmus zur Bestimmung der Lösungsmenge der
quadratischen Gleichung ax2 +bx+c=0 muss für alle reellwertigen
Parameter a,b und c korrekt arbeiten, also auch den Fall von
nicht-reellen Lösungen berücksichtigen.
Ein Algorithmus zur Berechnung von π kann nicht dynamisch finit
sein, die produzierte Darstellung von π besitzt ja unendlich viele
Stellen.
05.10.2015
GDI - 3. imperative Programme
3
Vom Problem zur Berechnung einer Lösung
Problemformulierung
Problem
Problemanalyse,-abstraktion
Problemspezifikation
Algorithmenentwurf
Algorithmus
Verifikation, Komplexitätsanalyse
Algorithmus
Programmkonstruktion
Programm (z.B. C)
Eingabe
Compiler (Übersetzer)
Assembler/ Maschinenprogramm
05.10.2015
Ablauf des Maschinenprogramm
GDI - 3. imperative Programme
4
Algorithmus
Ein Algorithmus ist unabhängig von der Umsetzung im
Rechner !
Beispiele
Man formuliere einen Algorithmus zum Durchlaufen des
Studiums
Ein Algorithmus zum Erstellen eines Apfelkuchens heißt
Backrezept
Partitur
Spielanleitung
Umwandlung von Dezimal- in Dualzahlen
05.10.2015
GDI - 3. imperative Programme
5
3.2 Algorithmus – Darstellung (I)
Abstraktion und Algorithmenbeschreibungssprachen
Vom Maschinenprogramm zum Assemblerprogramm (logische
Bezeichner für Operationscode, logische Adressen)
Abstraktion in höheren Programmiersprachen durch Verzicht auf
Sprungbefehle und Sprungziele Einführung von
Kontrollstrukturen wie Iteration, Alternative und Sequenz
Durch Abstraktion gelangt man zu höheren Programmiersprachen
und graphischen Sprachen als Algorithmenbeschreibungssprachen!
Darstellung eines Algorithmus
natürlichsprachlich (detailliert und explizit)
graphisch: Flußdiagramme, Struktogramme, ...
Pseudo-Code
Formale Sprache
05.10.2015
GDI - 3. imperative Programme
6
Algorithmus – Darstellung (II)
Natürlichsprachlich
1
// Berechne den ggT von a und b
2
Weise x den Wert von a zu
3
Weise y den Wert von b zu
4
Ist x ungleich y, weiter bei 5, sonst gehe zu
10
5
Ist x größer oder gleich y, weiter bei 6,
sonst gehe zu 8
6
Weise x den Wert von (x – y) zu
7
Gehe zu 9
8
Weise y den Wert von (y – x) zu
9
Gehe zu 4
10
Weise ggT den Wert von x zu
05.10.2015
GDI - 3. imperative Programme
7
Algorithmus – Darstellung (III)
Flußdiagramm DIN 66001
Vereinfachung
Elemente
Weise a den Wert von b zu
a := b
Aktion
ja
Bedingung
Eingabe
nein
Ausgabe
Anfang
Ende
05.10.2015
GDI - 3. imperative Programme
8
Algorithmus – Darstellung (IV)
Struktogramme / Nassi-Shneider-Diagramme
05.10.2015
GDI - 3. imperative Programme
9
Algorithmus – Darstellung (V)
{
Anweisung_1
Anweisung_2
...
Anweisung_n
Pseudo-Code
Sequenz
}
Iteration
Verzweigung
05.10.2015
while Bedingung {
Anweisung_1
...
Anweisung_n
}
if Bedingung {
Anweisung_1
...
Anweisung_n
}
else {
Anweisung_m
...
Anweisung_k
}
GDI - 3. imperative Programme
10
Algorithmus - Beispiel
Euklidischer Algorithmus für ggT in C
Finde den größten gemeinsamen Teiler der beiden natürlichen
Zahlen a und b
Euklid {
x = a;
y = b;
while x != y {
if x > y {
x = x – y;
}
else {
y = y – x;
}
}
return x;
}
05.10.2015
GDI - 3. imperative Programme
11
Algorithmus
Imperative Algorithmen
Berechnung geschieht durch die Veränderung des Speichers
Variablen (Container/Speicher mit Datentyp) sind Abstraktion des
Speichers
Veränderung von Variablen
Auswertung eines Ausdrucks
Speichern des Ergebnisses
Zuweisung des Wertes des Ausdrucks an eine Variable
Verwendung von Kontrollstrukturen
S.a. Pseudo-Code
Sequenz
Alternative
Iteration
05.10.2015
GDI - 3. imperative Programme
12
3.3 Variablen, Anweisungen und Ausdrücke
05.10.2015
GDI - 3. imperative Programme
13
Variablen
Variablen
-
-
Eine Variable dient zum Speichern von Informationen
Sie wird durch einen einzigartigen Namen gekennzeichnet
Darf nicht mit einer Ziffer beginnen
Darf kein Leerzeichen enthalten
Kann aus Buchstaben, Ziffern und Underscore (_) bestehen
Jede Variable ist von einem bestimmten Typ (Datentyp: Text, ganze
Zahl etc.)
Jede Variable wird am Anfang des Programms (Procedure) deklariert
Beispiele
Modula 2
vs.
C:
int temp;
float x;
05.10.2015
GDI - 3. imperative Programme
14
Ausdruck
Ausdruck
Zusammenfassung von mehreren Operationen, Variablen oder
Elementen eines Datentyps
Def.: Ausdruck
Ist v eine Variable vom Typ D, so ist v auch ein Ausdruck vom Typ D
Ist k eine Konstante vom Typ D, so ist k auch ein Ausdruck vom Typ
D
Sind t1, ..., tn Ausdrücke der Typen D1, ...,Dn und ist f:D1x...xDn D,
so ist auch f(t1,...,tn) ein Ausdruck vom Typ D
Wert eines Ausdrucks
Evaluierung
05.10.2015
GDI - 3. imperative Programme
15
Zuweisungen
Aufbau einer Zuweisung (Assignement)
Basisform in EBNF:
Assignment ::= Ident “=“ Expr
Linke Seite enthält Ziel der Zuweisung - eine Variable (Identifier;
Bezeichner).
Rechte Seite enthält Wert der Zuweisung (Expression; Ausdruck).
Zuweisungssymbol in C ist “=“.
Beispiel:
sum = sum + zähler
Lies nicht „sum ist …“ sondern „sum wird zu …“ oder „sum ergibt sich
aus …“.
Regel: Typen müssen zuweisungskompatibel sein
Linker Typ und rechter Typ sind gleich (z.B. Integer – bzw. int) oder
Linker Typ schließt rechten Typ ein (Typhierarchie), z.B. long int int.
05.10.2015
GDI - 3. imperative Programme
16
Beispiel
Vertauschen der Werte zweier Variablen
05.10.2015
GDI - 3. imperative Programme
17