Pascal Schärli
|
|
|
- Wilhelm Sommer
- vor 6 Jahren
- Abrufe
Transkript
1 Informatik I - Übung 8 Pascal Schärli [email protected]
2 Was gibts heute? Best-Of Vorlesung: Prefix / Infix EBNF Vorbesprechung Problem of the Week 2
3 Vorlesung 3. 1
4 Prefix Notation Infix (normal) Expression1 Operator Expression2 Prefix Operator Expression1 Expression2 Infix Prefix a + b + a b a * b - c - * a b c 3. 2
5 Prefix Notation (a + b) * (c - d / e) Gegen Uhrzeigersinn um den Baum Gehen und wenn man links von einer Node ist aufschreiben. a + b * - c / d e * + a b - c / d e 3. 3
6 Infix vs Prefix Notation Infix Prefix a * b e / f * a b / e f (a * b) / (c * d) / * a b * c d a * b + c * d a + b * c + d (a + b) * (c - d / e) + * a b * c d + + a * b c d * + a b - c / d e 3. 4
7 BNF Die Backus-Naur-Form (BNF) ist ein Rekursiver Weg um Elemente aus einem "Alphabet" mit gegebenen Regeln zusammenzusetzen. Die BNF ist eine Sammlung von Substitutionsregeln, mit welchen alle erlaubten Sätze erstellt werden können. 3. 5
8 BNF - Beispiel Alphabet: {A, a, _ Regeln: "A" kann nur als das Erste Symbol oder direkt nach "_" kommen. "_" kann nicht als das Erste oder Letzte Symbol Kommen "_" kommt nur einzeln Vor seq = term term "_" seq term = "A" "A" lowerterm lowerterm lowerterm = "a" "a" lowerterm Beispiel Aaa_aa Aaaa aaaa 3. 6
9 BNF - Beispiel seq = term term "_" seq term = "A" "A" lowerterm lowerterm lowerterm = "a" "a" lowerterm Kann man "Aaa_A" mit dieser BNF ausdrücken? term "_" seq "A" lowerterm "_" seq "Aa" lowerterm "_" seq "Aaa_" seq "Aaa_" term "Aaa_A" 3. 7
10 EBNF Die Extended-Backus-Naur-Form hat zusätzliche Syntax -> kompaktere Notationen {... -> Inhalt kann beliebig viel (inkl. 0) Mal wiederholt werden. [...] -> Inhalt wird entweder 0 oder 1 Mal wiederholt BNF seq = term term "_" seq term = "A" "A" lowerterm lowerterm lowerterm = "a" "a" lowerterm EBNF 1 2 seq = term [ "_" seq ] term = "A" { "a" "a" { "a" 3. 8
11 EBNF EBNF 1 2 seq = term [ "_" seq ] term = "A" { "a" "a" { "a" A aaaa a _ Aaaa A_A Aa_Aa Aa a 3. 9
12 EBNF in C seq = term [ "_" seq ] term = "A" { "a" "a" { "a" Für Jede Regel machen wir eine Funktion vom Typ bool, welche prüft ob die Regel erfüllt ist oder nicht. // PRE: Valid stream is. // POST: Returns true if stream contains seq and // extracts it, otherwise false. bool seq(std::istream& is); // PRE: Valid stream is. // POST: Returns true if stream contains term and // extracts it, otherwise false. bool term(std::istream &is); 3. 10
13 EBNF in C++ Wir erstellen eine lookahead Funktion, welche schaut, was das nächste Zeichen ist, ohne dies vom String zu entfernen. // PRE: Valid stream is. // POST: Leading whitespace characters are extracted from is, and the // first non-whitespace character is returned (0 if there is none). char lookahead (std::istream& is) { is >> std::ws; // skip whitespaces if (is.eof()) return 0; // end of stream else return is.peek(); // next character in is 3. 11
14 EBNF in C++ Wir erstellen eine consume Funktion, welche einen Charakter vom Stream entfernt. // PRE: Valid stream is. // POST: Reads char from stream and returns true if that char matches // the expected char, otherwise false is returned. bool consume(std::istream& is, char expected) { char actual; is >> actual; return actual == expected; 3. 12
15 EBNF in C++ Die Sequenz Funktion prüft zuerst, ob wir einen Term haben. Danach prüft es ob noch ein optionales '_' kommt, falls ja folgt eine weitere Sequenz. // PRE: Valid stream is. // POST: Returns true if stream contains seq and extracts it, otherwise fals bool seq(std::istream& is){ // seq = term [ "_" seq ] bool valid = term(is); // Every seq has to start with a term if(!valid){ // If it does not start with a term, return false return false; if(lookahead(is) == '_'){ // check if we have another seq consume(is, '_'); // "consume" the "_" from the instream return seq(is); // Check if the rest forms a valid seq else{ // If there is no following seq return true; 3. 13
16 EBNF in C++ Ein Term liest zuerst ein Buchstabe ein, dieser Kann 'A' oder 'a' sein. Danach liest dieser alle darauf folgenden 'a' ein. // PRE: Valid stream is. // POST: Returns true if stream contains term and extracts it, // otherwise false. bool term(std::istream &is){ // term = "A" { "a" "a" { "a" char first = lookahead(is); if(first == 'A' first == 'a'){ consume(is, first); while(lookahead(is) == 'a'){ consume(is, 'a'); return true; else{ return false; 3. 14
17 EBNF in C++ A a a _ A bool seq(std::istream& is){ bool valid = term(is); if(!valid){ return false; if(lookahead(is) == '_'){ consume(is, '_'); return seq(is); else{ return true; bool term(std::istream &is){ char first = lookahead(is); if(first == 'A' first == 'a'){ consume(is, first); while(lookahead(is) == 'a'){ consume(is, 'a'); return true; else{ return false; 3. 15
18 EBNF in C++ Die Main-Funktion liest eine Zeile ein und übergibt diese dann der Prüfenden Funktion. Danach müssen wir mit lookahead noch prüfen, ob wir alles gelesen haben int main() { std::cout << "please enter a sequence:\n"; std::string sequence; std::cin >> sequence; std::stringstream sequence_in(sequence); if (seq(sequence_in) && lookahead(sequence_in) == 0) { std::cout << "valid\n"; else { std::cout << "invalid\n"; return 0; 3. 16
19 Vorbesprechung 4. 1
20 1: Trains train = open compositions open = loco cars loco = "*" "*" loco cars = "-" "-" cars compositions = composition { composition composition = "<" open loco ">" Schreibt ein Programm, welches bestimmen kann ob ein eingelesener Input dieser EBNF entspricht. Tipp: Analog Zu unserem Beispiel 4. 2
21 1: Trains train = open compositions open = loco cars loco = "*" "*" loco cars = "-" "-" cars compositions = composition { composition composition = "<" open loco ">" <*-*><***-----******> <*-*> <***-----******> *- * ***----- ****** * - ***
22 2: Money $$$ Wie Viele Münz/Noten-Kombinationen gibt es für X Rappen? Beispiel 20 Rappen - 4 Lösungen: Schreibt ein Rekursives Programm, welches die Anzahl Möglichen Kombinationen für beliebige X Rappen berechnet. 4.4
23 2: Money $$$ Die Main-Funktion ist bereits geschrieben, alles was Ihr schreiben müsst ist eine Funktion partitions im File partitions.cpp // PRE: 0 <= end <= v.size(), and // 0 < denominations[0] < denominations[1] <.. denominators[end-1] // describes a (potentially empty) // sequence of denominations // POST: return value is the number of ways to partition amount // using denominations from denominations[0],..., denominations[end-1] unsigned int partitions (unsigned int amount, const std::vector<unsigned int> & denominations, unsigned int end) { // Please write your code here.. Anzahl Partitionen: Denominations Geldstücke Es gibt 1 Weg kein Geld zu haben Initiere Anzahl Partitionen mit 0 Wiederhole für alle denominations von 0 bis end: 1. Prüfe ob die denomination überhaupt Platz hat 2. Falls ja, Berechne die Anzahl Partitionen bei welchen alle Geldstücke höchstens so viel Wert sind wie die aktuelle denomination. (rekrursion) 3. Addiere den Wert von 2. zu deiner Anzahl Partitionen. 4. 5
24 3: Prefix To Infix Schreibt ein Programm, welches Prefix zu Infix umwandeln kann. Input: Output: * + a b - c / d e (a + b) * (c - d / e) 4. 6
25 3: Prefix To Infix // PRE: valid stream is with operator (+-*/) as first char // precedence_operator is the precedence of the operator // precedence_left is precedence of left sub-expression // precedence_right is precedence of right sub-expression // POST: Read operator followed by two consecutive prefix expressions e_1 and // e_2 from is. // Print e_1 operator_name e_2 in infix notation with parenthesis around // if precedence_operator < precedence_left void print_operator(std::istream& is, char operator_name, int precedence_operator, int precedence_left, int precedence_right){ // TODO // PRE: valid stream is, // int precedence describes the precedence of the expression to the left // POST: Converts prefix expression e from input stream and prints it in infix // notation with according parenthesis void convert(std::istream& is, int precedence_left){ // TODO int main () { convert(std::cin, 0); return 0; 4. 7
26 3: Prefix To Infix void print_operator(std::istream& is, char operator_name, int precedence_operator, int precedence_left, int precedence_right) void convert(std::istream& is, int precedence_left) Precedences: Operator Right / 1 1 * a + b c a - ( b + c ) precedence_left > precedence_operator convert(is, 0) print_operator(is, "-", 0, 0, 1) convert(is, 0) convert(is, 1) print_operator(is, "+", 0, 1, 0) convert(is, 1) convert(is, 0) 4. 8
27 Program of the Week 5
28 Viel Spass! 6
17. Rekursion 2. Bau eines Taschenrechners, Ströme, Formale Grammatiken, Extended Backus Naur Form (EBNF), Parsen von Ausdrücken
564 17. Rekursion 2 Bau eines Taschenrechners, Ströme, Formale Grammatiken, Extended Backus Naur Form (EBNF), Parsen von Ausdrücken Motivation: Taschenrechner 565 Beispiel Eingabe: 3 + 5 Ausgabe: 8 Binäre
15. Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Aufrufstapel, Bau eines Taschenrechners, BNF, Parsen
453 15. Rekursion Rekursive Funktionen, Korrektheit, Terminierung, Aufrufstapel, Bau eines Taschenrechners, BNF, Parsen Mathematische Rekursion 454 Viele mathematische Funktionen sind sehr natürlich rekursiv
Programmier-Befehle - Woche 10
Funktionen Rekursion Selbstaufruf einer Funktion Jeder rekursive Funktionsaufruf hat seine eigenen, unabhängigen Variablen und Argumente. Dies kann man sich sehr gut anhand des in der Vorlesung gezeigten
17. Rekursion 2. Bau eines Taschenrechners, Formale Grammatiken, Ströme, Backus Naur Form (BNF), Parsen
507 17. Rekursion 2 Bau eines Taschenrechners, Formale Grammatiken, Ströme, Backus Naur Form (BNF), Parsen Taschenrechner 508 Beispiel Eingabe: 3 + 5 Ausgabe: 8 Binäre Operatoren +, -, *, / und Zahlen
15. Rekursion 2. Bau eines Taschenrechners, Ströme, Formale Grammatiken, Extended Backus Naur Form (EBNF), Parsen von Ausdrücken
426 15. Rekursion 2 Bau eines Taschenrechners, Ströme, Formale Grammatiken, Extended Backus Naur Form (EBNF), Parsen von Ausdrücken Motivation: Taschenrechner 427 Beispiel Eingabe: 3 + 5 Ausgabe: 8 Binäre
Informatik für Mathematiker und Physiker Woche 7. David Sommer
Informatik für Mathematiker und Physiker Woche 7 David Sommer David Sommer 30. Oktober 2018 1 Heute: 1. Repetition Floats 2. References 3. Vectors 4. Characters David Sommer 30. Oktober 2018 2 Übungen
Informatik - Übungsstunde
Informatik - Übungsstunde Jonas Lauener ([email protected]) ETH Zürich Woche 08-25.04.2018 Lernziele const: Reference const: Pointer vector: iterator using Jonas Lauener (ETH Zürich) Informatik
Aufgabe 1.1. Wählen Sie jene Variablendeklarationen mit Initialisierungen aus, die in Java hinsichtlich der Typen korrekt sind:
Test 1 in Programmkonstruktion 59 / 100 Punkte 1. Multiple-Choice-Aufgaben 20 / 30 Punkte Bitte wählen Sie alle zutreffenden Antwortmöglichkeiten aus. Es können beliebig viele Antwortmöglichkeiten zutreffen,
Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016
to to May 2016 to What is Programming? All computers are stupid. All computers are deterministic. You have to tell the computer what to do. You can tell the computer in any (programming) language) you
Informatik für Mathematiker und Physiker Woche 2. David Sommer
Informatik für Mathematiker und Physiker Woche 2 David Sommer David Sommer 25. September 2018 1 Heute: 1. Self-Assessment 2. Feedback C++ Tutorial 3. Modulo Operator 4. Exercise: Last Three Digits 5. Binary
Übungsstunde: Informatik 1 D-MAVT
Übungsstunde: Informatik 1 D-MAVT Daniel Bogado Duffner Übungsslides unter: n.ethz.ch/~bodaniel Bei Fragen: [email protected] Daniel Bogado Duffner 21.03.2018 1 Ablauf Quiz und Recap Floating Point
Angewandte Mathematik und Programmierung
Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS 2013/14 Operatoren Operatoren führen Aktionen mit Operanden aus. Der
12. Felder (Arrays) II. Caesar-Code, Strings, Lindenmayer-Systeme, Mehrdimensionale Felder, Vektoren von Vektoren, Kürzeste Wege
373 12. Felder (Arrays) II Caesar-Code, Strings, Lindenmayer-Systeme, Mehrdimensionale Felder, Vektoren von Vektoren, Kürzeste Wege Caesar-Code 374 Ersetze jedes druckbare Zeichen in einem Text durch seinen
Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2018
to to May 2018 to What is Programming? All computers are stupid. All computers are deterministic. You have to tell the computer what to do. You can tell the computer in any (programming) language) you
Lindenmayer-Systeme: Fraktale rekursiv zeichnen
Lindenmayer-Systeme: Fraktale rekursiv zeichnen Lindenmayer-Systeme: Definition o Alphabet Σ ( Beispiel: {F, +, -} ) Lindenmayer-Systeme: Definition o Alphabet Σ ( Beispiel: {F, +, -} ) o Σ * = Menge aller
Übungsstunde 11. Einführung in die Programmierung
Übungsstunde 11 Einführung in die Programmierung Probleme bei Übung 9 [TODO Assistent] Nachbesprechung Übung 10 Aufgabe 1: Mini-Taschenrechner (Bonus!) Feedback nach der Korrektur direkt per Git Lösungsvorschlag
Tutoraufgabe 1 (Implementierung eines ADTs):
Prof. aa Dr. E. Ábrahám Datenstrukturen und Algorithmen SS Tutoriumslösung - Übung (Abgabe.05.0) F. Corzilius, S. Schupp, T. Ströder Tutoraufgabe (Implementierung eines ADTs): Wir spezifizieren den ADT
Automatentheorie und formale Sprachen reguläre Ausdrücke
Automatentheorie und formale Sprachen reguläre Ausdrücke Dozentin: Wiebke Petersen 6.5.2009 Wiebke Petersen Automatentheorie und formale Sprachen - SoSe09 1 Formal language Denition A formal language L
Vorsemesterkurs Informatik Sommersemester Aufgabenblatt Nr. 5A. Lösung zu Aufgabe 1 (Fehler in Haskell-Quelltext: Parsefehler)
Fachbereich Informatik und Mathematik Institut für Informatik Vorsemesterkurs Informatik Sommersemester 2017 Aufgabenblatt Nr. 5A zu Aufgabe 1 (Fehler in Haskell-Quelltext: Parsefehler) Laden Sie von der
17. Klassen. Überladen von Funktionen. Funktionsüberladung. Operator-Überladung (Operator Overloading) operatorop
Überladen von Funktionen 17. Klassen Funktions- und Operatorüberladung, Datenkapselung, Klassen, Memberfunktionen, Konstruktoren Funktionen sind durch Ihren Namen im Gültigkeitsbereich ansprechbar Es ist
Informatik II Übung 3. Pascal Schärli
Informatik II Übung 3 [email protected] Warm up Ist das ein Baum? Left child: Right child: Parent: [A B C _ E _ G H I _] 0 2 3 4 5 6 7 8 9 1 2*i + 1 2*i + 2 (i-1)/2 2 Überblick Serie 3 Aufgabe 1
Algorithmen und Datenstrukturen Musterlösung 5
Algorithmen und Datenstrukturen Musterlösung 5 Martin Avanzini Thomas Bauereiß Herbert Jordan René Thiemann
Grundlegende Datentypen
Funktionale Programmierung Grundlegende Datentypen Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 14.11.2017 15:37 Inhaltsverzeichnis Typen........................................
Funktionale Programmierung Grundlegende Datentypen
Grundlegende Datentypen Prof. Dr. Oliver Braun Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 06.11.2017 16:45 Inhaltsverzeichnis Typen........................................
4.3 Keller und Warteschlangen
.3 Keller und Warteschlangen Wir werden zuerst die weitverbreitete Datenstruktur Keller (auch stack, pushdown) kennenlernen. Auch in Python selbst wird sie z.b. bei der Auswertung arithmetischer Ausdrücke
Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren
Dynamische Datentypen Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren Probleme mit Feldern (variabler Länge) man kann sie nicht direkt kopieren und zuweisen Probleme mit
Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter
Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter Fallstudie: Arithmetische Ausdrücke AG Softech FB Informatik TU Kaiserslautern Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 33 Überblick
Ganze Zahlen. Die Typen int, unsigned int; Auswertung arithmetischer Ausdrücke, arithmetische Operatoren
Ganze Zahlen Die Typen int, unsigned int; Auswertung arithmetischer Ausdrücke, arithmetische Operatoren Celsius to Fahrenheit // Program: fahrenheit.cpp // Convert temperatures from Celsius to Fahrenheit.
18. Vererbung und Polymorphie
590 18. Vererbung und Polymorphie Ausdrucksbäume, Vererbung, Code-Wiederverwendung, virtuelle Funktionen, Polymorphie, Konzepte des objektorientierten Programmierens (Ausdrucks-)Bäume 591 -(3-(4-5))*(3+4*5)/6
Problem: Keine Integers in JavaCard. ToDo: Rechnen mit Bytes und Shorts
Kapitel 6: Arithmetik in JavaCard Problem: Keine Integers in JavaCard ToDo: Rechnen mit Bytes und Shorts Java SmartCards, Kap. 6 (1/20) Hex-Notation 1 Byte = 8 Bit, b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 0101
Repetitive Strukturen
Repetitive Strukturen Andreas Liebig Philipp Muigg ökhan Ibis Repetitive Strukturen, (z.b. sich wiederholende Strings), haben eine große Bedeutung in verschiedenen Anwendungen, wie z.b. Molekularbiologie,
Finite Difference Method (FDM)
Finite Difference Method (FDM) home/lehre/vl-mhs-1-e/folien/vorlesung/2a_fdm/cover_sheet.tex page 1 of 15. p.1/15 Table of contents 1. Problem 2. Governing Equation 3. Finite Difference-Approximation 4.
Java Tools JDK. IDEs. Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation
Java Tools JDK http://www.oracle.com/technetwork/java/javase/ Downloads IDEs Java SE 8 Java SE 8 Documentation Eclipse http://www.eclipse.org IntelliJ http://www.jetbrains.com/idea/ NetBeans https://netbeans.org/
Programmieren in Java
Programmieren in Java Vorlesung 02: Methoden Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2017 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 17 Inhalt Scanner
Magic Figures. We note that in the example magic square the numbers 1 9 are used. All three rows (columns) have equal sum, called the magic number.
Magic Figures Introduction: This lesson builds on ideas from Magic Squares. Students are introduced to a wider collection of Magic Figures and consider constraints on the Magic Number associated with such
Beispiel: Temperaturumwandlung. Imperative Programmierung. Schwerpunkte. 3. Grundlegende Sprachkonstruktionen imperativer Programme
Schwerpunkte 3. Grundlegende Sprachkonstruktionen imperativer Programme Java-Beispiele: Temperature.java Keyboard.java Imperative Programmierung Beispiel für ein Programm aus drei Komponenten Variable,
Grundlagen der Informatik 6. Arrays I
6. Arrays I Motivation Array (konstante Länge) Speicherbereich Eingabe von Arrays Grundlagen der Informatik (Alex Rempel) 1 Motivation Beispiel: Bildschirmpixel zeichnen Auflösung 800x600, d.h. insgesamt
Quiz und Übungen. C++ Übung am 19. Mai 2016
Quiz und Übungen C++ Übung am 19. Mai 2016 Was ist der Unterschied zwischen kompilierenden und interpretierenden Programmiersprachen? Was ist der Unterschied zwischen kompilierenden und interpretierenden
3.1 Reservierte Wörter
3.1 Reservierte Wörter int Bezeichner für Basis-Typen; if, else, while Schlüsselwörter aus Programm-Konstrukten; (,), ",, {,},,,; Sonderzeichen. 62 3.2 Was ist ein erlaubter Name? Schritt 1: Angabe der
Unit 4. The Extension Principle. Fuzzy Logic I 123
Unit 4 The Extension Principle Fuzzy Logic I 123 Images and Preimages of Functions Let f : X Y be a function and A be a subset of X. Then the image of A w.r.t. f is defined as follows: f(a) = {y Y there
TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK
TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 2006/2007 Praktikum Grundlagen der Programmierung Lösungsvorschläge zu Blatt 3 F. Forster, M.
Algorithmen zur Datenanalyse in C++
Algorithmen zur Datenanalyse in C++ Hartmut Stadie 16.04.2012 Algorithmen zur Datenanalyse in C++ Hartmut Stadie 1/ 39 Einführung Datentypen Operatoren Anweisungssyntax Algorithmen zur Datenanalyse in
1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -
1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik
