Vorlesung 9

Werbung
Vorlesung 9
Zu den Aufgaben Serie 8:
add_expr:
add_expr_aux:
number:
digits:
digit
number add_expr_aux
‘+’ number add_expr_aux
‘-‘ number add_expr_aux
epsilon
digit digits
digit digits
epsilon
'0’ | '1’ | … | '9'
Bsp: Additiver Ausdruck 127 + 12
add_expr















number add_expr_aux
digit digits add_expr_aux
1
digits add_expr_aux
1
digit digits add_expr_aux
12
digitis add_expr_aux
12
digit digits add_expr_aux
127
digits add_expr_aux
127
add_expr_aux
127 + number add_expr_aux
127 + digit digits add_expr_aux
127 + 1
digits add_expr_aux
127 + 1
digit digits add_expr_aux
127 + 12
digits add_expr_aux
127 + 12
add_expr_aux
127 + 12
C++ rekursive Funktionsaufrufe
eindeutig
lesen ‘1’ im Eingabe-String
lesen '2’
lesen '7’
lesen '+’
lesen '1’
lesen '2’
Ende vom Eingabe-String
Grammatik für arithmetische Ausdrücke gibt eine eindeutige Ableitungsfolge bei look-ahead
von einem Zeichen.
 In Parser ausgenutzt.
std::string
Typen
std::string::iterator
std::string::const_iterator
Funktionen
std::string s;
s.begin()
s.end()
s.length()
+
[Dereferenziertes kann nicht verändert werden]
Iterator auf Anfang des Strings s
[s.begin(), s.end())
Iterator zeigt hinter das letzte Zeichen in s valid range
Länge von s
konkateniert zwei Strings
Typ z.B int, unsigned int, float, …
std::vektor<Typ>
Typen
std::vector<Typ>::iterator
Std::vector<Typ>::const_iterator
Funktionen
std::vector<Typ> v;
v.begin()
v.end()
v.push_back(t)
Initialisierung v(n, t)
t vom Typ 'Typ'
n unsigned int, t vom Typ 'Typ'
Andwendung:
Aufzählen von Primzahlen im Internal [1, n] Mittels Sieb des Erastosthenes.
0
true
1
true
2
true
3
true
4
true
false
5
true
6
true
false
7
true
8
true
9
true
10
true
false
false
false
Programm 1
Kollektion von ganzen Zahlen, z.B. {0, 9, 2, 7, 4, 5, 6, 3, 8, 1}
Gesucht: kleinste Zahl in der Kollektion
Algorithmische Idee: - aktuelles Minimum ist Zahl am linken Rand der Kollektion
- gehe von links nach rechts durch die Kollektion und passe das
aktuelle Minimum an
- Gebe aktuelles Minimum zurück
Programm 2
minsort.C
Sortieren einer Kollektion ganzer Zahlen
Eingabe:
Ausgabe:
ungeordnete Kollektion
aufsteigend sortierte Kollektion
{0, 3, 2, 7, 4, 5, 6, 3, 8, 1}
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
Eingabe
Ausgabe
Algorithmische Idee: Sortieren durch sukzessive Minimumsuche.
{0, … 1}
min ist 0, vertausche 0 mit 0
{0, 9, 2, …, 1}
min ist 1, vertausche 1 und 9
{0, 1, 2, …, 9}
min ist 2, vertausche 2 mit 2
{0, 1, 2, 7, …}
Herunterladen