x - ssw.jku.at

Werbung
Grundlagen der Programmierung
Prof. Dr. Hanspeter Mössenböck
© H.Mössenböck: Sprechen Sie Java? 4. erweiterte Auflage, dpunkt.verlag, 2011
Worum geht es?
Programmieren
ein Problem so exakt beschreiben, dass es ein Computer lösen kann



kreative Tätigkeit
Ingenieurtätigkeit
Nur wenige Leute können gut programmieren
Programm = Daten + Befehle
2
Daten und Befehle
Daten
Menge adressierbarer Speicherzellen
x
17
y
4
z
21
Name
Wert
Daten sind binär gespeichert (z.B. 17 = 10001)
Binärspeicherung ist universell (Zahlen, Texte, Bilder, Ton, ...)
1 Byte = 8 Bit
1 Wort = 4 Byte (manchmal 2 Byte)
Befehle
Operationen mit den Speicherzellen
Maschinensprache
Hochsprache
// Lade Zelle x
ACC  x
ACC  ACC + y // Addiere Zelle y
// Speichere Ergebnis in Zelle z
z  ACC
z = x + y;
3
Programmerstellung
Problem
Spezifikation
Aufgabenstellung
Algorithmus
Lösungsverfahren
Mensch
Programm
Compiler
Codiertes Lösungsverfahren
Maschinenprogramm
Lader
4
Algorithmus
Schrittweises, präzises Verfahren zur Lösung eines Problems
Name
Parameter
Summiere Zahlen von 1 bis max (max, sum)
1. sum  0
2. zahl  1
3. Wiederhole, solange zahl  max
3.1 sum  sum + zahl
3.2 zahl  zahl + 1
Folge von Schritten
Programm = Beschreibung eines Algorithmus in einer Programmiersprache
5
Variablen
Sind benannte Behälter für Werte
x
y
99
3
Können ihren Wert ändern
x
xx+1
100
Haben einen Datentyp = Menge erlaubter Werte
Variablentyp
Zahl
Zeichen
Werte
17
'a'
54
'x'
...
...
Typ  Form
- in eine Zahlenvariable passen nur Zahlen
- in eine Zeichenvariable passen nur Zeichen
6
Anweisungen
Wertzuweisung
x  x+1
Variable
1. werte Ausdruck aus
2. weise seinen Wert der Variablen zu
Ausdruck
Anweisungsfolge (auch Sequenz)
"Ablaufdiagramm"
x3
y4
zx+y
Assertion
x = 3, y = 4, z = 7
Assertion (Zusicherung)
Aussage über den Zustand des Algorithmus
an einer bestimmten Stelle
7
Anweisungen
Auswahl (auch Verzweigung, Abfrage, Selektion)
x<y
j
min  x
x<y?
n
xy
min  y
min = Minimum von x und y
8
Anweisungen
Wiederholung (auch Schleife, Iteration)
n0
x>1?
j
n0
n
xx/2
nn+1
x>1
xx/2
nn+1
x1
n = log2 x0
x1
n = log2 x0
Alternative Darstellung
9
Beispiel: Vertauschen zweier Variableninhalte
Swap (↨x, ↨y)
hx
xy
yh
Schreibtischtest
x
3
2
y
2
3
h
3
10
Beispiel: Maximum dreier Zahlen bestimmen
Max (a,  b,  c, max)
j
a>b
a>b&a>c
j
max  a
a>c?
n
ca>b
max  c
a>b?
n
ba&b>c
j
max  b
b>c?
ab
n
abc
max  c
11
Beispiel: Euklidscher Algorithmus
Berechnet den größten gemeinsamen Teiler zweier Zahlen x und y
GGT (x,  y, ggt)
rest  Rest von x / y
rest  0
xy
y  rest
rest  Rest von x / y
rest = 0
ggt  y
Schreibtischtest
x
y
rest
28
20
8
20
8
4
8
4
0
Warum funktioniert dieser Algorithmus?
(ggt teilt x) & (ggt teilt y)
 x = i*ggt, y = j*ggt, (x-y) = (i-j)*ggt
 ggt teilt (x - y)
 ggt teilt (x - q*y)
 ggt teilt rest
 GGT(x, y) = GGT(y, rest)
12
Beispiel: Quadratwurzel von x berechnen
1.
2. Näherung:
root  x(a/ +2 root) / 2
a  x / root
0

a
a
root
root
SquareRoot (x, root)
root  x / 2
a  x / root
x
a * root = x
a  root
a * root = x
root  (a + root) / 2
a  x / root
a * root = x
a * root = x & a = root
 root * root = x
Schreibtischtest
x
root
10
5
3.5
3.17857
3.16232
3.16228
a
2
2.85714
3.14607
3.16223
3.16228
Kommazahlen sind meist nicht exakt gleich
daher besser
| a-root | > 0.0000001
13
Beschreibung von Programmiersprachen
Syntax
Regeln, nach denen Sätze gebaut werden dürfen
z.B.: Zuweisung = Variable "" Ausdruck.
Semantik
Bedeutung der Sätze
z.B.: werte Ausdruck aus und weise ihn der Variablen zu
Grammatik
Menge von Syntaxregeln
z.B. Grammatik der ganzen Zahlen
Ziffer = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".
Zahl = Ziffer {Ziffer}.
Ziffer
0
Zahl
1
2
3
4
5
6
7
8
9
Ziffer
14
EBNF (Erweiterte Backus-Naur-Form)
Metazeichen
=
.
|
()
[]
{}
Bedeutung
Beispiel
trennt Regelseiten
schließt Regel ab
trennt Alternativen
klammert Alternativen
wahlweises Vorkommen
0..n-maliges Vorkommen
A=xyz.
x|y
(x | y) z
[x] y
{x} y
beschreibt
x, y
xz, yz
xy, y
y, xy, xxy, xxxy, ...
Beispiele
Grammatik der Gleitkommazahlen
Zahl = Ziffer {Ziffer}.
Gleitkommazahl = Zahl "." Zahl ["E" ["+" | "-"] Zahl].
Grammatik der If-Anweisung
IfAnweisung = "if" "(" Ausdruck ")" Anweisung ["else" Anweisung].
15
Herunterladen