Informatik

Werbung
1
2
Was ist Informatik ?
Die Wissenschaft der Informatik umfaßt alle Modelle
(Methoden, Verfahren, Konzepte, etc.),
die dazu dienen eine gegebene Eingabe
in eine beliebige Ausgabe zu verwandeln
Kapitel 1:
Einführung
Input
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
3
Informatik
Output
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
4
Modelle der Informatik
Kochrezept
Amerikanischer Wildreis
Computerprogramm
Modelle
der
1 Tasse ergibt 3 Portionen
Reis gründlich waschen
1 Tasse Reis in 3 Tassen kochendes Wasser geben
kurz aufkochen lassen
bei schwacher Hitze 25 min bedeckt dünsten
Reis abdecken, salzen, mit Gabel auflockern
restliche Flüssigkeit verdampfen
Spielregeln
Input
Bedienungsanleitung
Informatik
Kochrezept
Output
...
Informatik
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
5
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
6
1.1 Algorithmus
Definition
Algorithmus - Eigenschaften (1)
Eingangswerte/Ausgabewerte
Unter Algorithmus versteht man die schrittweise Vorschrift
zur Berechnung gesuchter aus gegebenen Größen, in
dem jeder Schritt aus einer Anzahl eindeutig ausführbarer
Operationen und einer Angabe über den nächsten Schritt
besteht.
EW sind vor, AW nach der Ausführung bekannt
Eindeutigkeit
Jeder Schritt der Ausführung muß eindeutig sein, keine
Mehrdeutigkeiten möglich
Endlichkeit
statische
Ursprung
mit endlich vielen Zeichen formulierbar
Algorithmus ≈ Berechnungsvorschrift
Ben Musa Al-Chwarizmi (usbekischer Mathematiker um
825), erstes Buch über Algebra
arithmos ... griechisches Wort für Zahl
VO Grundlegende Algorithmen und Datenstrukturen
dynamische
in endlich vielen Schritten beendbar
E. Schikuta
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
1
7
8
Algorithmus - Eigenschaften (2)
Vollständigkeit
1.2 Algorithmus - Darstellung
Graphische Darstellung
sollte vollständig sein, sollte alle möglichen Fälle behandeln
Ablaufdiagramme
Struktogramme
Korrektheit
Pseudocode
sollte das gewünschte Ergebnis liefern
künstliche Programmiersprachenderivate
Stilisierte Prosa
Granularität der Operationen
Spezifikationsgenauigkeit der einzelnen
Beschreibungselemente
Programmiersprachen
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
9
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
10
Graphische Darstellung
Ablaufdiagramm
gerichtete Kante
Aktion
Graphische Darstellung
Struktogramm
Blöcke
Aktionen
summe ← 0
n > 0
summe ← 0
nein
while n > 0
ja
summe ← summe + n
n ← n - 1
summe ← summe + n
n ← n - 1
drucke summe
drucke summe
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
11
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
12
Vor- und Nachteile der Graphischen Darstellung
Pro:
Programmiersprachenderivate
leicht erfassbar, Standardnotation, auch dem Anwender
verständlich (Diskussionsbasis)
Anlehnung an die Programmiersprachen Pascal oder
MODULA-2, Ziel eine der natürlichen Sprache möglichst
nahe Kunstsprache zu schaffen
Con:
große Programme unüberschaubar, schwierig direkt in
Programmiersprache umsetzbar, schwer editierbar,
automatische Codegenerierung eher beschränkt (meist
nur Prozedurköpfe)
VO Grundlegende Algorithmen und Datenstrukturen
Pseudocode
E. Schikuta
summe = 0;
while n > 0 do begin
summe = summe + n;
n = n - 1;
end;
print(summe);
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
2
13
14
Pseudocode
Stilisierte Prosa
Vor- und Nachteile des Pseudocodes
Pro:
Beschreibung der schrittweisen Ausführung
Programmiersprache sehr ähnlich, direkte Umsetzung
einfach
Con:
Schritt 1:
Schritt 2:
Schritt 3:
ähnliche Komplexität wie Programmiersprache, für den
Anwender oft schwer verständlich
Initialisiere.
Setze summe auf 0.
Abarbeitung der Schleife.
Solange n größer als 0,
addiere n zu summe,
ziehe 1 von n ab.
Ausgabe.
Drucke summe.
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
15
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
16
Programmiersprache
Programmiersprachengruppen
Kenneth E. Iverson, 1979
Generation
Generation Typ
Typder
der
Programmiersprache
Programmiersprache
erste
Maschinensprachen
erste
Maschinensprachen
“Notation as a Tool of Thought”
int summe = 0;
while(n > 0) {
summe += n;
n--;
}
printf(“%d\n”, summe);
dritte
dritte
Maschinenorientierte
Maschinenorientierte
Sprachen
Sprachen(Assembler)
(Assembler)
Problemorientierte
ProblemorientierteSprachen
Sprachen
vierte
vierte
Datenbanksprachen
Datenbanksprachen
BinärBinär-und
undHexadezimal
Hexadezimal
Programmierung
Programmierung
OS/370
Assembler,
OS/370 Assembler,2650
2650
Assembler,
Assembler,8080
8080Assembler
Assembler
FORTRAN,
FORTRAN,COBOL,
COBOL,Pascal,
Pascal,
MODULA-2,
MODULA-2,CC
SQL,
SQL,Natural-2
Natural-2
fünfte
fünfte
Sprachen
Sprachender
derKI
KI
Lisp,
Lisp,PROLOG
PROLOG
??
OO
OOSprachen
Sprachen
Smalltalk
Smalltalk
??
hybride
hybrideSprachen
Sprachen
C++
C++
zweite
zweite
Pro:
direkt ausführbar
Con:
Vertreter
Vertreter
komplex, für Entwurf nur sehr beschränkt einsetzbar
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
17
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
18
1.3 Programmstrukturen
Sequenz, Zuweisung
Elemente einer prozeduralen Programmiersprache
Zuweisung
Sequenz
Aktion 1
j ← 1
Aktion 2
j ← j + 1
Funktion/Prozedur
Verzweigung
Schleife
repeat Form
while Form
for Form
j = 1;
j = j + 1;
Aktion 1
oder
Satz (Böhm / Jacopini 1966):
Aktion 2
Jede berechenbare Funktion kann durch eine Kombination
dieser 4 Elemente berechnet werden
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
VO Grundlegende Algorithmen und Datenstrukturen
j = 1;
j = j++;
E. Schikuta
3
19
20
Verzweigung
ja
ja
?
j > n
Aktionsblock wird solange
wiederholt, wie die
Bedingung (Eintrittsbedingung) gilt
nein
nein
j ← 0
while - Schleife
nein
while j < n
ja
nein
j ← i
while (Bedingung true)
j ← j + 1
ja
Aktion
JA
Bedingung
erfüllt ?
Teil 1
if (j > n)
j = 0;
else
j = i;
NEIN
Teil 2
Eintrittsbedingung
while (j < n)
j = j + 1;
Anweisung(en),
Schleifenblock
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
21
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
22
while-Schleife (2)
Spezialfall: Bedingung am Ende des
Aktionsblocks, “repeat-Form”
Aktionsblock wird mindestens einmal
ausgeführt. Danach wird er solange
wiederholt, wie die Schleifenbedingung (Wieder-Eintrittsbedingung) gilt
for-Schleife
Aktionsblock wird n-mal
durchgeführt
j ← j + 1
while j < n
AnfW
EndW
SW
nein
... Anfangswert
... Endwert
... Schrittweite
for i=1 to 5
a[i] ← i
ja
Aktion
nein
for (AnfW, EndW, SW)
while (Bedingung true)
ja
Anweisung(en),
Schleifenblock
Aktion
do {
j = j + 1;
} while (j < n);
for(i=1; i<=5; i++)
a[i] = i;
Eintrittsbedingung
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
23
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
24
Funktion / Prozedur (1)
Abgeschlossene algorithmische Einheiten
bestehen aus Sequenzen, Verzweigungen, Schleifen
und Funktions-/Prozeduraufrufen
Funktion
Eingangswerte, genau ein Ausgangswert
Prozedur
nur Eingangswerte
beide können über Parameterliste Werte zurückliefern
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
Funktion/Prozedur (2)
Funktion
int sum(int n) {
int summe = 0;
while(n > 0) {
summe += n;
n--;
}
return summe;
}
VO Grundlegende Algorithmen und Datenstrukturen
Prozedur
void sum(int n) {
int summe = 0;
while(n > 0) {
summe += n;
n--;
}
printf(“%d\n”, summe);
}
E. Schikuta
4
25
26
1.4 Rekursion
Rekursive Programmteile
Ein Objekt heißt rekursiv, wenn es durch sich selbst
definiert ist, oder sich selbst (teilweise) enthält.
Eine Prozedur/Funktion heißt rekursiv, wenn sie sich
in der Folge ihrer Abarbeitung selbst referenziert.
Beispiele:
Eine Prozedur/Funktion P heißt direkt rekursiv, wenn
sie sich explizit selbst aufruft. Hingegen ist P indirekt
rekursiv, wenn sie den Aufruf einer anderen
Prozedur/Funktion enthält, die ihrerseits wieder P
(direkt oder indirekt) aufruft.
Fernseher
Mathematik
(Definition der Fakultät)
n = 0
n! = 
n > 0
→
1
→
n ⋅ ( n − 1) !
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
27
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
28
Direkte Rekursion
Berechnung der Fakultät
Direkte Rekursion, Beispiel
int fkt(int n) {
if(n == 0)
return(1);
else
return(n*fkt(n-1));
}
Berechnung von 3!
Aufruf: fkt(3) ⇒ 6
// Berechnung von n! für n>=0
int fakultaet(int n) {
if(n == 0)
rekursiver
return(1);
Aufruf
else
return(n * fakultaet(n-1));
}
fkt(2)
fkt(1)
fkt(0)
3*fkt(2)
2*fkt(1)
1*fkt(0)
return
(3*2)
return
(2*1)
return
(1*1)
n==0
Berechnung der Fibonacci Zahlen
// Berechnung der Fibonacci Zahlen
int fibonacci(int n) {
if(n <= 1) return 1;
return fibonacci(n-1) + fibonacci(n-2);
}
VO Grundlegende Algorithmen und Datenstrukturen
fkt(3)
3*2*1*1
E. Schikuta
29
return(1)
2*1*1
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
30
Indirekte Rekursion
Definition eines Ausdrucks (expression) in MODULA-2
indirekte Rekursion, Beispiel
Ableitung des Ausdrucks: 3 * ( 4 + 5 )
(Ausschnitt)
Expr
SimpleExpr
Term
Expr ::= SimpleExpr [RelOp SimpleExpr]
Factor
SimpleExpr ::= [SignOp] Term [AddOp Term]
Value
Term ::= Factor {MulOp Factor}
MulOp
Term
…
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
Expr
)
SimpleExpr
3
Factor ::= ‘(‘ Expr ‘)’ | NOT Factor | Value
Factor
(
*
Expr ::= SimpleExpr [RelOp SimpleExpr]
SimpleExpr ::= [SignOp] Term [AddOp Term]
Term ::= Factor {MulOp Factor}
Factor ::= ‘(‘ Expr ‘)’ | NOT Factor | Value
+
Term
Value
Value
4
5
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
5
31
32
Charakteristik rek. Lösungsansätze
Eigenschaften
Rekursiver Ansatz
Drei Kriterien
Ziel ist die schrittweise Entwicklung der Lösung ausgehend
von einem bzw. zurückführend auf einen Fixpunkt (eine
Ausgangslösung)
Vorteile
Verringern des Problemgrades
Ein Problem der Größe n wird in eine endliche Anzahl von
Problemen zerlegt, deren Größe kleiner n ist.
Abbruchkriterium
Spezifikation einer zu erreichenden Programmsituation, bei der das
Programm die rekursiven Aufrufe beendet.
knapper und prägnanter Lösungsweg
oft Ansatz direkt aus der Problemdefinition ableitbar
Programm einfacher lesbar
Konstruktion des Endergebnisses
Das Endergebnis sukkzessiv (meist beim rekursiven Aufstieg) aus
den Teilergebnissen zusammensetzen.
Nachteile
Programme können fehlerhafter sein
logische Fehler schwerer zu finden
mögliche Verlangsamung der Programme
Programm schwerer lesbar (vergl. Vorteile!)
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
33
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
34
Kriterien
Algorithmus
Darstellung
Programmstrukturen
Rekursion
Abbruchkriterium
if(n == 0) return(1);
else
return(n*fakultaet(n-1));
Konstruktion
des
Endergebnisses
VO Grundlegende Algorithmen und Datenstrukturen
Was nehmen wir mit?
Zerlegung der
Problemgröße
E. Schikuta
VO Grundlegende Algorithmen und Datenstrukturen
E. Schikuta
6
Herunterladen