Programmier-Befehle - Woche 10

Ähnliche Dokumente
17. Rekursion 2. Bau eines Taschenrechners, Formale Grammatiken, Ströme, Backus Naur Form (BNF), Parsen

Grundlagen der Informatik 6. Arrays I

Dynamische Datentypen

Lindenmayer-Systeme: Fraktale rekursiv zeichnen

Quiz und Übungen. C++ Übung am 19. Mai 2016

Kurze Einführung in die Programmiersprache C++ und in Root

C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016

class ListElement { int value; ListElement next; ListElement() { next=null; value=0;

Das erste C++ Programm

Ganze Zahlen. Die Typen int, unsigned int; Auswertung arithmetischer Ausdrücke, arithmetische Operatoren

Java Tools JDK. IDEs. Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Ein- und Ausgabe mit Dateien

Elementare Datentypen in C++

Vererbung I. Kfz Eigenschaften und Methoden der Klasse Kfz Lkw. Pkw. Eigenschaften und Methoden der Klasse Kfz

Variablen in C++ Einfache Variablen Strukturen Arrays und Zeichenketten Zeiger und Referenzen Parameter Dynamische Speicherverwaltung

12. Felder (Arrays) II. Caesar-Code, Strings, Lindenmayer-Systeme, Mehrdimensionale Felder, Vektoren von Vektoren, Kürzeste Wege

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Funktionen in Python

DAP2 Praktikum Blatt 1

FEBE Die Frontend-Backend-Lösung für Excel

Klausur Programmieren 1 SS 2017

Felder (Arrays) und Zeiger (Pointers) - Teil I

10. Referenztypen. Referenztypen: Definition und Initialisierung, Call By Value, Call by Reference, Temporäre Objekte

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Algorithmen zur Datenanalyse in C++

Unterlagen. CPP-Uebungen-08/

Übung 3: VHDL Darstellungen (Blockdiagramme)

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Einführung in C. EDV1-04C-Einführung 1

Felder (Arrays) und Zeiger (Pointers) - Teil I

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Die erste C++ Funktion

5. Java Arrays und Strings

Nachname: Vorname: Matr.-Nr.: Punkte: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende Struktogramm zur Berechnung von sin(x) mit Hilfe einer Reihe.

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Verwendung Vereinbarung Wert einer Funktion Aufruf einer Funktion Parameter Rekursion. Programmieren in C

Grundlagen der Informatik 8. Funktionen I

Einführung in die Programmierung

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

2. Programmierung in C

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

Grundlagen der Informatik 2. Typen

6. Fliesskommazahlen II. Fliesskommazahlensysteme; IEEE Standard; Grenzen der Fliesskommaarithmetik; Fliesskomma-Richtlinien; Harmonische Zahlen

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Algorithmen und Datenstrukturen Musterlösung 5

15. C++ vertieft (IV): Ausnahmen (Exceptions)

Annehmende Schleife do while

Computergrundkenntnisse und Programmieren, WS 07/08, Übung 11: Klassen der Standardbibliothek 2

DAS ZUFRIEDENE GEHIRN: FREI VON DEPRESSIONEN, TRAUMATA, ADHS, SUCHT UND ANGST. MIT DER BRAIN-STATE-TECHNOLOGIE DAS LEBEN AUSBALANCIEREN (GE

PONS DIE DREI??? FRAGEZEICHEN, ARCTIC ADVENTURE: ENGLISCH LERNEN MIT JUSTUS, PETER UND BOB

2. Ganze Zahlen int unsigned int

Vorkurs Informatik: Erste Schritte der Programmierung mit C++

Interaktive Programme mit Scanner

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch

Assoziative Container in C++ Christian Poulter

Folien zur AG: Objektorientiertes Programmieren in C++ Einheit 5: Funktionen. Michael Hahsler, Gottfried Rudorfer und Werner J.

Grundlagen der Programmierung in C Funktionen

CABLE TESTER. Manual DN-14003

1.4. Funktionen. Objektorientierte Programmierung mit C++

Beispiel: Temperaturumwandlung. Imperative Programmierung. Schwerpunkte. 3. Grundlegende Sprachkonstruktionen imperativer Programme

Grundlagen der Informatik 5. Kontrollstrukturen II

Mapra: C++ Teil 3. Felix Gruber. 29. April IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 3 29.

Grundlagen der Informatik 11. Zeiger

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Welche Informatik-Kenntnisse bringen Sie mit?

Gestrige Themen. Benutzung des Compilers und Editors. Variablen. Ein- und Ausgabe mit cin, cout (C++) Verzweigungen. Schleifen

OOSE4 Testen mit BlueJ/JUnit 4

Ein kleiner Blick auf die generische Programmierung

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

einlesen n > 0? Ausgabe Negative Zahl

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme

Objektorientierung II & die Java Klassenbibliothek. Kristian Bergmann und Arthur Lochstampfer

Vorkurs C++ Programmierung

Restschmutzanalyse Residual Dirt Analysis

Transkript:

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 Stacks vorstellen (fac ist im Beispiel unten definiert): n = 1 1! = 1 fac(1) 1 n = 2 2 1! = 2 fac(2) 2 n = 3 3 2! = 6 fac(3) 6 n = 4 4 3! = 24 fac(4) 24 std:cout < < fac(4) // POST: return value is n! unsigned int fac (const unsigned int n) { if (n <= 1) return 1; return n * fac(n-1); // n > 1 Seite 1 von 5

Datentypen std::stringstream Datentyp für String-Streams Erfordert: #include <sstream> Man kann Objekte dieses Typs beispielsweise verwenden, um dem Programm eine Eingabe via std::cin vorzutäuschen. Beachte: String-Stream heisst, dass im Objekt ein String enthalten ist. Es heisst aber nicht, dass nur Strings (oder chars) daraus extrahiert werden können. Darin können beispielsweise auch Zahlen als String vorliegen. Diese kann man als String (oder char) oder als Zahl extrahieren. Objekte des Typs std::stringstream können nicht direkt kopiert werden. Deshalb sollte man sie immer via Call-by-Reference an Funktionen übergeben. std::cin >> c; // e.g. value: b std::stringstream s ("b345e"); // stringstream with value "b345e" s >> c; // c gets value b and s is now "345e" s >> c; // c gets value 3 (!as char! since type of c is char) int n; s >> n; // n gets value 45 (!as int! since type of n is int) // (This works since the computer sees that the next // 2 characters in the string "45e", namely 4 and 5, // can be used as the int 45. So after this operation // s is "e".) std::istream Datentyp für Input-Streams Beispielsweise std::cin hat den Typ std::istream. Objekte des Typs std::stringstream können auch als std::istream verwendet werden (siehe calculator.cpp). Objekte des Typs std::istream können nicht direkt kopiert werden. Deshalb sollte man sie immer via Call-by-Reference an Funktionen übergeben. (... ) Seite 2 von 5

(... ) // POST: Two characters are removed from is. If is contains less // characters it is emptied. void remove two (std::istream& is) { char a; is >> a >> a; // remove two chars int main () { // Assume that the user enters "Informatics". remove two(std::cin); char out; while (std::cin >> out) std::cout << out; // Output: formatics return 0; Input/Output std::ws Entfernt Whitespaces am Anfang eines Input-Streams. Unter einem Whitespace versteht man nicht-darstellbare Zeichen wie zum Beispiel Leerschläge, Zeilenumbrüche, etc. Dem Computer werden solche Zeichen als eine Sequenz von anderen Zeichen übergeben, welche er dann interpretiert (z.b. \n interpretiert er als einen Zeilenwechsel). std::stringstream t ("d a\n\nb"); t >> std::noskipws; // Do not ignore whitespaces. // Output t without whitespaces t >> c; std::cout << c; // Output: d t >> std::ws; // Remove: " " t >> c; std::cout << c; // Output: a t >> std::ws; // Remove: "\n\n" t >> c; std::cout << c; // Output: b // Output in total: dab Seite 3 von 5

my stream.eof() Prüfe, ob das Ende des Streams erreicht worden ist. Erfordert: #include <iostream> Ein Stream kann sich in verschiedenen Zuständen befinden. Und es gibt Funktionen, um den aktuellen Zustand abzufragen. eof() ist eine solche Funktion. Mit ihr prüft man, ob sich der Stream im Zustand Ende der Eingabe erreicht befindet. EoF bedeutet End-of-File. std::stringstream b ("33"); int z; b >> z; std::cout << b.eof(); // true (>> read 33 and reached // end of b) my stream.fail() Prüfe, ob im Stream ein ungültiges Zeichen hätte gelesen werden sollen. Erfordert: #include <iostream> Ein Stream kann sich in verschiedenen Zuständen befinden. Und es gibt Funktionen, um den aktuellen Zustand abzufragen. fail() ist eine solche Funktion. Mit ihr prüft man, ob sich der Stream im Zustand gescheiterte Eingabe befindet. std::stringstream b ("33a"); int z; b >> z; std::cout << b.fail(); // false (>> read 33) b >> z; std::cout << b.fail(); // true (>> ought to read a // which is not an int.) Seite 4 von 5

my stream.peek() Im Stream nächstes Zeichen anschauen, ohne es zu entfernen. Der Rückgabewert ist die int-repräsentierung des nächsten Zeichens (als char) im Stream. Der Datentyp des Rückgabewerts ist also int. Diese Funktion ignoriert Whitespaces nie (unabhängig davon, ob der Stream zuerst an std::noskipws übergeben wurde oder nicht). std::stringstream str ("my subst"); str >> std::noskipws; // Do not ignore whitespaces. // output everything before the first s (but leave s in str) while (str.peek()!= s ) // Removes: "my " str >> c; // output remaining string while (str >> c) // Output: "subst" std::cout << c; // miscellaneous std::stringstream num ("3 a"); std::cout << num.peek() << "\n"; // Output: 51 and NOT 3 num >> c; std::cout << c << "\n"; // Output: 3 char next = num.peek(); std::cout << next << "\n"; // Output: num >> c; std::cout << c << "\n"; // Output: a Seite 5 von 5