Informatik. Wiederholung Felder (Arrays), string. Vorlesung

Ähnliche Dokumente
Wiederholung, Abbruch von Schleifen, switch-anweisung Datentypen, char, formatierte Ausgabe

Variablen, Konstanten und Datentypen

Grundlagen der Informatik 2. Typen

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Die Klasse string Verfasser: Christian Bartl

9. Vektoren. (auch Felder/array)

Programmieren in C/C++ und MATLAB

Einstieg in die Informatik mit Java

4 Schleifen und Dateien

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Einstieg in die Informatik mit Java

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

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

Grundlagen der Informatik 6. Arrays I

Einstieg in die Informatik mit Java

Elementare Datentypen in C++

Informatik Vorkurs - Vorlesung 2

Der Umgang mit Zahlen. Ein wesentlicher Unterschied: int oder float. Beispiel: int oma, opa, summe; float messwert, mittel; char zeichen, z1, z2, c;

Ein- und Ausgabe (I/O)

Projekt 3 Variablen und Operatoren

Klausur in Programmieren

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

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

Vorkurs Informatik WiSe 16/17

Programmierkurs C++ Variablen und Datentypen

Programmieren in C/C++ und MATLAB

Arrays (Felder/Vektoren)

Zeichenketten sind uns bisher nur als konstante Texte begegnet, welche in "" angegeben waren; z.b. als Formatstring in der printf()-funktion:

Auswahlen (Selektionen)

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

4 ZEICHEN UND ZEICHENKETTEN

Praktikum zur Vorlesung Einführung in die Programmierung WS 14/15 Blatt 3

Einfache Arrays. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Angewandte Mathematik und Programmierung

Programmierkurs C++ Lösungen zum Übungsblatt 3. Nils Eissfeldt und Jürgen Gräfe. 2. November Aufgabe 5

Vorkurs Informatik WiSe 17/18

Verwenden Sie für jede Aufgabe die C++ IDE von Eclipse (pro Aufgabe ein Projekt).

C++ - Einführung in die Programmiersprache Ein- und Ausgabe in die Konsole. Leibniz Universität IT Services Anja Aue

Einführung in die Programmierung Wintersemester 2011/12

5. Elementare Befehle und Struktogramme

Hello World! Eine Einführung in das Programmieren Variablen

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

In C++ kann man fünf Teilsprachen, die bezüglich Syntax und Semantik differieren, unterscheiden. Objektorientierte Erweiterungen von C

Informatik. Strukturen und Aufzählungstypen. Vorlesung

Einführung in die Programmierung

Programmiersprachen Einführung in C

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 23

Physische Datenstrukturen

GI Vektoren

C++ Teil 5. Sven Groß. 12. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

Organisatorisches. Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Definition Datenstruktur. Nächste Woche keine Vorlesung!

Teil 5: Felder, Zeiger, Zeigerarithmetik Gliederung

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Kapitel 2/3: Darstellung von Information / Kontrollstrukturen. Inhalt. Zusammengesetzte Datentypen Wiederholungen (in Programmen)

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

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

2.1 Fundamentale Typen

Funktionales C++ zum Ersten

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Programmieren in C++

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

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

Klausur in Programmieren

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen

Kontrollstrukturen -- Schleifen und Wiederholungen

Probeklausur Name: (c)

Escape-Sequenzen. Dr. Norbert Spangler

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Kap 9. Bitoperationen und -strukturen

Dr. Monika Meiler. Inhalt

Algorithmen zur Datenanalyse in C++

3.8 Objekttypen und Arrays. Wir werden uns in diesem Kapitel näher mit den Objekttypen in Java beschäftigen.

C++ Teil 5. Sven Groß. 16. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

Entwickeln Sie ein C/C++-Programm für die Verwaltung einer Artikeldatei gemäß folgender Vorgaben!

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

4.2 Programmiersprache C

Informatik I (D-ITET)

Hochschule Darmstadt Informatik-Praktikum WS 2017/2018 EIT Bachelor 5. Aufgabenblatt Datenstruktur, Dateieingabe und -ausgabe

6. Bearbeitung von Strings in C Bearbeitung von Strings in C

Grundlagen der Informatik 5. Kontrollstrukturen II

Grundlagen der Programmierung

Motivation und Überblick

5.1 Mehr Basistypen. (Wie viele Werte kann man mit n Bit darstellen?)

Hochschule Darmstadt Informatik-Praktikum SS 2017 EIT Bachelor 5. Aufgabenblatt Datenstruktur, Dateieingabe und -ausgabe

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

Informatik für Elektrotechnik und Informationstechnik

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3

Klausur: Grundlagen der Informatik I, am 27. März 2009 Gruppe: F Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

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

einlesen n > 0? Ausgabe Negative Zahl

Transkript:

Informatik Vorlesung 04 Wiederholung Felder (Arrays), string 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1

Ein C++ Programm: Wiederholung #include <iostream> using namespace std; int main() // Der Variablen a a wird der Wert 33 zugewiesen int a = 3; // Ausgabe (der String Geben "Geben Sie Sie " wird ausgegeben) cout << Geben "Geben Sie bitte eine ganze Zahl ein: ein:" << endl; int b; // Eingabe (Tastatureingabe) cin >> b; system ("pause"); return 0; 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 2

Ein C++ Programm: Wiederholung #include <iostream> using namespace std; int main() // if...else-anweisung (Verzweigung) int a = 5, b = 7; // Der Variablen a wird der Wert 3 zugewiesen if int(a a < = b) 3; // cout Ausgabe << "Variable (der String a ist Geben kleiner Sie b"; wird ausgegeben) cout << Geben Sie bitte eine ganze Zahl ein: << endl; else int b; // Eingabe (Tastatureingabe) cin cout >> b; << "Variable a ist groesser(gleich) b"; system ("pause"); return 0; 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 3

Ein C++ Programm: Wiederholung #include <iostream> using namespace std; int main() // Der Operationen Variablen a wird der Wert 3 zugewiesen int a = 3; 5, b = 7; // a = Ausgabe a + b; (der String // Geben Addition Sie wird ausgegeben) cout b = b << Geben a + 13; Sie bitte // eine Subtraktion ganze Zahl ein: << endl; int a = b; 23 - (a * b) + 9; // Multiplikation // a = Eingabe (a / b) (Tastatureingabe) * 3; // Division cin b = >> a % b; b; // Modulo system ("pause"); return 0; 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 4

Ein C++ Programm: Wiederholung #include <iostream> using namespace std; int main() // Der Schleifen Variablen (while) a wird der Wert 3 zugewiesen int a i = 3; 0; // Wiederhole solange i < 7 // while Ausgabe (i < (der 7) String Geben Sie wird ausgegeben) cout << Geben Sie bitte eine ganze Zahl ein: << endl; intcout b; << i << "-te Runde." << endl; // Eingabe i = i + (Tastatureingabe) 1; // oder i++; cin >> b; system ("pause"); return 0; 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 5

Ein C++ Programm: Wiederholung #include <iostream> using namespace std; int main() // Der Schleifen Variablen (do...while) a wird der Wert 3 zugewiesen int a i = 3; 0; // Die Bedingung wird erst nach der Iteration überprüft // do Ausgabe (der String Geben Sie wird ausgegeben) cout << Geben Sie bitte eine ganze Zahl ein: << endl; intcout b; << i << "-te Runde." << endl; // Eingabe i = i + (Tastatureingabe) 1; // oder i++; cin >> b; while (i < 7); // Wiederhole solange i < 7 system ("pause"); return 0; 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 6

Ein C++ Programm: Wiederholung #include <iostream> using namespace std; int main() // Der Variablen a wird der Wert 3 zugewiesen // Schleifen (for) int a = 3; int i; // Wiederhole solange i < 7 // Ausgabe (der String Geben Sie wird ausgegeben) for (i = 0; i < 7; i++) cout << Geben Sie bitte eine ganze Zahl ein: << endl; int b; cout << i << "-te Runde." << endl; // Eingabe (Tastatureingabe) cin >> b; system ("pause"); return 0; 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 7

Felder (Arrays) Ein Feld (Array) ist eine Sammlung von Werten des selben Datentyps. Die Elemente eines Arrays haben alle den selben Datentyp. Jedes Element hat eine feste Nummer, Index genannt. Mit Hilfe des Indexes kann man auf das Feldelement zugreifen. 0 1 2 3 4 Apfel-Array 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 8

Felder (Arrays) Die Größe oder Länge eines Arrays muss konstant sein. Dies kann über einen ganzzahligen Wert, z. B. 5, oder über den Wert einer Konstante bestimmt werden. Die Länge kann nicht über den Wert einer Variable bestimmt werden. Bespiele: double a[10]; // Größe 10 const int N = 5; // Konstante N int b[n]; // Größe 5 0 1 2 3 4 Apfel-Array 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 9

Eindimensionales Feld Definition: int a[10]; (Die Größe des Arrays muss konstant sein, in diesem Fall 10.) Zugriff: a[3] = 59; cin >> a[3]; cout << a[3]; int var = a[3]; Wert ins Feld schreiben Wert aus Feld lesen Index darf eine Variable, Konstante oder ein Ausdruck sein. Feldelemente (hier int-werte) a: Index: 13 35 27 59 0 1 2 3 4 5 6 7 8 9 Indizierung startet bei 0. 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 10

Felder (Arrays) Das folgende Beispiel zeigt eine Motivation für den Einsatz von Feldern: Nur bei Verwendung eines Felds ist es möglich, eine Schleife zur Bearbeitung aller Feldelemente zu nutzen. Ohne Array: int z0, z1, z2, z3, z4, z5, z6, z7, z8, z9; cout << "10 Zahlen:\n"; cout << "> "; cin >> z0; cout << "> "; cin >> z1; cout << "> "; cin >> z2;... cout << "> "; cin >> z9; Mit Array: int i; int z [10]; cout << "10 Zahlen:\n"; for (i = 0; i < 10; i++) cout << "> "; cin >> z [i]; 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 11

Eindimensionales Feld (Schema) Schema zum Bearbeiten eines kompletten Felds Man nutzt eine Schleife (for-schleife am besten geeignet), um den kompletten Indexbereich zu durchlaufen. const int Size =...; // Hier Größe angeben int feld [Size]; // Index 0... Size-1 for (int i = 0; i < Size; i++) // tue etwas mit Feldelement Nr. i... feld [i]... Die durchgeführte Aktion (tue etwas...) kann z. B. sein: Feld einlesen, ausgeben, berechnen, Feldelemente summieren, Maximum berechnen, etc. 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 12

Zweidimensionales Feld zwei Indexe Definition: int matrix[5][4]; ( [Anzahl Zeilen] [Anzahl Spalten] ) Zugriff: matrix [3][1] = 59; matrix: 0 2.Index (Spalte): 0 1 2 3 1.Index (Zeile): 1 2 3 4 59 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 13

Zweidimensionales Feld (Schema) Sequentieller Zugriff auf alle Elemente eines zweidimensionalen Feldes: int matrix [nzeilen][nspalten];... for (z = 0; z < nzeilen; z++) for (s = 0; s < nspalten; s++) // tue etwas mit matrix [z][s]... matrix [z][s]... Beispiel: Ausgabe des Inhaltes const int nzeilen = 3; const int nspalten = 2; int matrix [nzeilen][nspalten]; for (int z = 0; z < nzeilen; z++) for (int s = 0; s < nspalten; s++) cout << "[" << z << "] [" << s << "]: " << matrix [z][s] << endl; 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 14

Einschub: Datentyp char Eine char-variable ist 1 Byte groß und enthält einen Wert im Bereich 0... 255 (oder -128... 127). Sie kann als Zahl oder als Zeichen interpretiert werden. ASCII-Code 0...31 127 32...47 58...64 91...96 123...126 Zeichen Steuerzeichen (nicht darstellbar) (z. B. neue Zeile) Escape-Sequenzen Sonderzeichen (z. B. +, -,!, #, etc.) 48...57 0, 1,...,9 65...90 A,B,...,Z 97...122 a,b,...,z 128...255 erweiterter Zeichensatz (z. B. Umlaute, graphische Zeichen, etc.) 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 15

Einschub: Datentyp char Steuerzeichen und einige andere Zeichen können als so genannte Escape- Sequenz (Zeichen '\' + weiteres Zeichen) eingegeben werden: Escape- Sequenz ASCII-Code dezimal hexadezimal Bedeutung \a 7 0x07 Bell (Piepzeichen) \b 8 0x08 Backspace (1 Position zurück) \f 12 0x0C Formfeed (Seitenvorschub) \n 10 0x0A Linefeed (neue Zeile) \r 13 0x0D Carriage return (Zeilenanfang) \t 9 0x09 Tabulator (horizontal) \\ 92 0x5C Backslash (entwertet) \' 44 0x2C Single quote (entwertet) \" 34 0x22 Double quote (entwertet) \0 0 0x00 Null-Zeichen (String-Ende) wichtig 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 16

Einschub: Datentyp char Der Datentyp char kann auch zur Speicherung von kleinen ganzen Zahlen verwendet werden. Leider ist es vom System abhängig, ob diese Zahlen im Bereich 0... 255 oder -128... 127 liegen (bei Visual Studio letzteres). Um die Sache eindeutig zu machen, gibt es die Möglichkeit, den Datentyp char genauer zu spezifizieren: unsigned char : Bereich 0... 255 signed char : Bereich -128... 127 Das Schlüsselwort unsigned kann auch bei int (oder short oder long) für nichtnegative Zahlen verwendet werden. short oder short int sind 16-Bit-Integers (-2 15... 2 15-1) oder long oder long int sind 32-Bit-Integers (-2 31... 2 31-1) 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 17

Einschub: type cast Manchmal ist es notwendig, den Datentyp eines Wert zu ändern. Dies kann man durch eine explizite Typumwandlung (engl. type cast) tun. Type cast: ( neuer Datentyp ) wert Beispiele: (double) 5 -> 5.0 (int) 2.7 -> 2 (char) 65 -> 'A' (int) 'A' -> 65 Ein type cast kann auch auf einen Ausdruck oder eine Variable angewandt werden. Achtung: Wert und Datentyp der Variablen werden dadurch nicht verändert. 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 18

Zeichenketten (char-arrays) Zeichenketten (auch Strings genannt) dienen zur Speicherung von Texten und sind als Konstanten schon von der Ausgabe her bekannt, z. B.: cout << "Zahl eingeben: "; Es ist aber auch möglich, Texte in Zeichenketten-Variablen zu speichern. Eine Möglichkeit ist, dazu sogenannte C-Strings zu verwenden, das sind char-arrays. Beispiel: char land [30]; cin >> land; cout << land; // Variablendefinition // Eingabe: Hessen // Ausgabe: Hessen An diesem Beispiel lässt sich eine Besonderheit der Strings erkennen: Im Gegensatz zu anderen Arrays kann man die Ein- und Ausgabe "am Stück" machen, d. h., ohne Schleife. 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 19

Zeichenketten (char-arrays) Frage: Woran erkennt das Programm, wo der String zu Ende ist? (Die Variable land hat Platz für 30 char, "Hessen" benötigt aber nur 6.) Antwort: Ein spezielles Zeichen (mit ASCII-Code 0) wird als Ende-Markierung automatisch an den String angehängt. land: Index: H e s s e n \0 0 1 2 3 4 5 6 Dies gilt auch für String-Konstanten: So besteht der String "HALLO" aus den 6 Zeichen 'H', 'A', 'L', 'L', 'O und '\0'. Somit ist auch klar, was der Unterschied zwischen 'A' und "A" ist: 'A' ist ein Einzelzeichen (char), "A" ist ein char-array, das aus den zwei Zeichen 'A' und '\0' besteht. 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 20

Zeichenketten (char-arrays) Nützliche Funktionen bei char-arrays (C-Strings) strlen (s) cin >> s; cout << s; cin.getline (s, n); strcpy_s (s1, n, s2); strcat_s (s1, n, s2); strcmp (s1, s2) Liefert die aktuelle Länge des Strings (ohne 0-Zeichen). Liest ein Wort von der Konsole in den String s ein. Gibt den String s auf dem Bildschirm aus. Liest eine komplette Textzeile in den String s ein (maximal n Zeichen werden geschrieben). Kopiert den String s2 in den String s1 (max. n Zeichen). Hängt den String s2 an den String s1 an (von engl. concatenate, verketten). Dabei wird s1 auf n Zeichen begrenzt. Vergleicht die Strings s1 und s2: Liefert 0, falls beide gleich sind, < 0, falls s1 alphabetisch vor s2 steht, > 0, falls s1 alphabetisch nach s2 steht, 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 21

Zeichenketten (Datentyp string) Mit Hilfe des Datentyps (der Klasse) string (nur in C++ verfügbar) ist es möglich, Zeichenketten beliebiger Länge zu speichern und zu manipulieren. Um mit string arbeiten zu können, muss die entsprechende Header-Datei in das Programm eingebunden werden: #include <string> Die Handhabung ist wesentlich praktischer und sicherer, als bei den 0-terminierten char-arrays (sog. C-Strings). string s = "LEARN"; 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 22

Zeichenketten (Datentyp string) Ein- und Ausgabe von string-variablen cin >> s; cout << s; Liest ein Wort (bis zum nächsten Trennzeichen) in den String s ein. Beliebige Wortlänge. Gibt den String s aus. getline (cin, s); Liest eine komplette Textzeile (bis zum Newline) in den String s ein. Beliebige Textlänge. 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 23

Zeichenketten (Datentyp string) Weitere string-funktionen (s1 ist string, s2 kann string oder C-String sein) s1 [i] s1.substr (i, n) s1.c_str () s1.size () s1.empty () s1 + s2 s1 += s2; s1 = s2; s1 == s2 <, <=, >, >=,!= Gibt das i-te Zeichen (beginnend mit 0) des Strings zurück. Gibt einen Substring zurück, der aus n Zeichen ab Position i besteht. Gibt s1 als C-String zurück. Liefert die aktuelle Länge des Strings als unsigned-datentyp. Liefert true, wenn s1 leer ist, sonst false. Liefert die Verkettung von s1 und s2 (geht auch für char s2). Hängt den Inhalt von s2 an s1 an (geht auch für char s2). Kopiert den Inhalt von s2 nach s1 (geht auch für char s2). Liefert true, wenn s1 und s2 gleich sind, sonst false. Vergleichen Strings. Dabei werden die Zeichen nach ASCII-Code geordnet.!= ist das Gegenteil von ==. 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 24

Ende Vielen Dank! 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 25