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, …}