Programmieren in C++
|
|
- Elmar Adenauer
- vor 6 Jahren
- Abrufe
Transkript
1 Programmieren in C++ SS 2016 Vorlesung 7, Dienstag 7. Juni 2016 (Eingabe / Ausgabe, Optionen) und Rest von Vorlesung 6: Rückgabe von Argumenten Prof. Dr. Hannah Bast Lehrstuhl für Algorithmen und Datenstrukturen Institut für Informatik Universität Freiburg
2 Blick über die Vorlesung heute Organisatorisches Inhalt Erfahrungen mit dem Ü6 String Klasse Ein paar typische Fehler Heisenbugs, etc. Ein- und Ausgabe fopen, fgets, stdin, stdout Kommandozeilenoptionen getopt_long Testen von IO und Optionen ASSERT_DEATH Übungsblatt 7: Eine Funktion, die alle Zeilen in einer Datei umdreht und optional Palindrome erkennt 2
3 Erfahrungen mit dem Ü6 1/5 Zusammenfassung / Auszüge Für viele relativ gut und schnell machbar Gut, um Zeiger und Speicherallokation zu verstehen Bei vielen aber auch Probleme und "Heisenbugs" Fehler, die nur manchmal auftreten siehe Folie 5 Vorlesung etwas durcheinander diesmal viel hin und her; copy constructor wurde nicht ganz klar; nicht genug Zeit alle Sachen zu erklären (wegen exit bug) "Blatt nach 0 Uhr unschaffbar, vormittags ein Kinderspiel" "Zum ersten Mal durch unit test einen Fehler gefunden" 3
4 Erfahrungen mit dem Ü6 2/5 EM und Fußball Moderne Gladiatorenkämpfe / Brot und Spiele / Unterhaltung für's Volk um Aufstände zu verhindern Wer gewinnt? Nordkorea. Zumindest in den Übertragungen in Nordkorea Wenn die EM ähnlich politisch korrekt abläuft wie der ESC, dann gewinnt natürlich die Ukraine Curling hätte mehr Aufmerksamkeit verdient Drastischer Qualitätsabfall in der Frage: beim Ü5 noch zu Existenz und Sinn des Lebens und jetzt Fußball War bei einem Public Viewing und habe Schach gespielt 4
5 Erfahrungen mit dem Ü6 3/5 Heisenbugs nach der Heisenbergschen Unschärferelation Fehler, die nur manchmal auftreten zum Beispiel: Bei Ihnen lokal geht's, in Jenkins nicht Der Test schlägt fehl, aber das Programm geht trotzdem Beispiel 1: strlen aufrufen auf einer Zeichenkette (char*), die nicht von einer 0 terminiert wird Dann ist es Zufall, was am Ende der Zeichenkette steht; wenn es zufällig eine 0 ist, funktioniert es, sonst nicht Beispiel 2: außerhalb allozierten Speicherbereich schreiben Wenn da nichts für das Programm Relevantes überschrieben wird, funktioniert es, sonst crasht es irgendwo 5
6 Erfahrungen mit dem Ü6 4/5 delete auf NULL Zeiger Folgendes ist laut Standard erlaubt, und tut nichts delete NULL; delete[] NULL; Man sieht deshalb manchmal in Code: delete _ptr; _ptr = NULL; // Free previously allocated memory. // In case delete is called again. Das (_ptr = NULL) ist aber schlechter Stil! Guter Code sollte so geschrieben sein, dass allozierter Speicher nur genau einmal wieder freigegeben wird 6
7 Erfahrungen mit dem Ü6 5/5 Dieser Code gibt ein double free warum? 7 String::String(const char* s) { _chars = new char[ ]; } String::~String() { delete[] _chars; } void String::set(const String s) { _size = s._size; delete[] _chars; _chars = new char[_size + 1]; for (size_t i = 0; i <= _size; i++) _chars[i] = s._chars[i]; } String a("doof"); String b("bloed"); a.set(b); Der Aufruf von set ist "call by value" Es wird eine "shallow copy" von b gemacht Man hat dann zwei Objekte mit demselben Wert für _chars Mit const String& s alles in Ordnung
8 Ein- und Ausgabe 1/7 Beispielprogramm in C #include <stdio.h> FILE* file = fopen("doof", "r"); const int max = 1000; char line[max + 1]; fgets(line, max, file); if (feof(file)) { } fclose(file); // Open "doof" for reading. // Max. length of a line. // +1 for trailing null. // Read until next newline. // End of file reached // Close the file. 8 Achtung: man muss beim Lesen einer Zeile eine Obergrenze für die Anzahl der Zeichen angeben Damit nicht in nicht-allozierten Speicher geschrieben wird Sonst "buffer overflow error", wie er hinter vielen Sicherheitslücken in Software steckt
9 Ein- und Ausgabe 2/7 Beispielprogramm in C++ #include <iostream> std::ifstream file("doof"); std::string line; std::fgets(file, line); if (file.eof()) { } file.close(); // Open file for reading. // Max. length of a line. // Read until next newline. // End of file reached // Close the file. Sehr ähnlich zu dem C-Code, außer dass man keine Obergrenze für die Länge einer Zeile braucht Benötigt aber Templates und die STL (die C++ Standard Bibliothek), die kommen erst in V8 und V9 dran Von daher in der Vorlesung heute erstmal noch C-Style 9
10 Ein- und Ausgabe 3/7 Die wichtigsten C-Befehle im Überblick fopenöffnet eine Datei, liefert FILE* zurück fcloseschließt die Datei wieder feofsagt, ob wir schon am Ende der Datei sind fread liest eine gegeben Anzahl Bytes aus einer Datei fwriteschreibt eine gegebene Anzahl Bytes in eine Datei fprintfschreibt formatiert in eine Datei, analog zu printf fgetsliest die nächste Zeile aus einer Datei Details dazu wie üblich mit man, z.b. man 3 fopen 10
11 Ein- und Ausgabe 4/7 Ein paar Besonderheiten Wenn fopen fehlschlägt, wird NULL zurückgegeben Auf NULL testen, sonst seg fault beim fgets o.ä. FILE* file = fopen( ); if (file == NULL) { perror(" "); exit(1); } Das Ende der Datei wird behandelt wie ein eigenes Zeichen (EOF = end of file) Wenn man das letzte "richtige" Zeichen aus einer Datei gelesen hat, ist also man noch nicht am Ende der Datei Sondern erst nach dem nächsten Lesezugriff 11
12 Ein- und Ausgabe 5/7 Benutzereingabe / Bildschirmausgabe Das sind in der Unix/Linux Welt auch "Dateien"! Die "Datei" für Benutzereingabe heißt standard input fgets(line, max, stdin); // Read line from user input. Die "Datei" für Bildschirmausgabe heißt standard output fprintf(stdout, "Doof\n"); // Write to the console. Außerdem gibt es noch die Fehlerausgabe standard error fprintf(stderr, "Falsch\n"); // Write to standard error Geht per default auf den Bildschirm, umleiten in der bash geht zum Beispiel mit./inputoutputmain 2> error.log 12
13 Ein- und Ausgabe 6/7 Testen einer Methode mit Eingabedatei Variante 1: als Teil vom Test eine Testdatei erzeugen Dann am Ende vom Test wieder löschen (mit unlink) Variante 2: Testdatei von Hand schreiben Integraler Bestandteil vom Test = muss mit ins SVN Achtung: in jedem Fall soll die Testdatei klein sein Zur Erinnerung: Unit Tests sollen grundsätzlich nur auf kleinen Beispielen laufen und nur wenig Zeit benötigen 13
14 Ein- und Ausgabe 7/7 Namenskonventionen C vs. C++ In C++ verwenden wir CamelCase ClassName, methodname, variablename, In C verwenden wir lower_case file_name, max_length, Zum Beispiel bei den ganzen FILE* Funktionen In der C++ Standard-Bibliothek (STL) wird allerdings auch lower_case verwendet siehe Vorlesung 8 14
15 Parsen von Optionen 1/8 Beispiel mit "langen" Optionennamen Typischer Aufruf von der Kommandozeile./InputOutputMain --shift=3 --numbers doof.txt Zur Erinnerung: Argumente der main Funktion int main(int argc, char** argv); Die Werte von argv sehen dann so aus: argv[0] :./InputOutputMain argv[1] : --shift=3 argv[2]: --numbers argv[3] : doof.txt 15
16 Parsen von Optionen 2/8 Beispiel mit "kurzen" Optionennamen Äquivalenter Aufruf zu dem von der Folie vorher:./inputoutputmain -s 3 -n doof.txt Argumente der main Funktion int main(int argc, char** argv); Die Werte von argv sehen jetzt so aus: argv[0] :./InputOutputMain argv[1] : -s argv[2] : 3 argv[3]: -n argv[4] : doof.txt 16
17 Parsen von Optionen 3/8 Verarbeitung mit getopt, Teil 1/3 Zuerst definiert man eine Struktur, die sagt, welche Optionen es gibt und wie sie heißen (lang und kurz) #include <getopt.h> struct option options[] = { { "shift", 1, NULL, 's' }, // Option with 1 arg. { "numbers", 0, NULL, 'n' }, // Option with 0 args. { NULL, 0, NULL, 0 } // End of array. }; An der jeweils dritten Stelle kann man anstatt von NULL auch einen Zeiger auf eine Variable (Typ int*) übergeben Siehe "man 3 getopt" für die Semantik davon 17
18 Parsen von Optionen 4/8 Verarbeitung mit getopt, Teil 2/3 Jetzt kann man die Optionen verarbeiten: optind = 1; // Start with argv[1]. while (true) { // s and n = short names, the : means with argument. char c = getopt_long(argc, argv, "s:n", options, NULL); if (c == -1) break; // No more options. switch (c) { // c is the short name. case 's': shift = atoi(optarg); // Argument in optarg. break; case 'n': numbers = true; // Option without arg. } } 18
19 Parsen von Optionen 5/8 Verarbeitung mit getopt, Teil 3/3 Jetzt noch die Nicht-Options Argumente if (optind + 1!= argc) { printusageandexit(); } filename = argv[optind]; Achtung: optind zeigt nach der vorherigen Schleife auf das nächste Argument, das keine Option mehr ist Optionen am Ende von argv wurden dabei "nach vorne getauscht", d.h. die folgenden Aufrufe sind äquivalent./inputoutputmain --shift=3 --numbers doof.txt./inputoutputmain doof.txt --shift=3 --numbers 19
20 Parsen von Optionen 6/8 Zwei wichtige globale Variablen aus getopt.h optind ist der Index von dem Argument, das getopt_long als nächstes bearbeitet optind ist zwar mit 1 initialisiert, aber Achtung: beim Testen hat man die getopt_long Schleife evtl. mehrmals hintereinander, deswegen vorher immer optind = 1 setzen optarg ist das Argument der zuletzt verarbeiteten Option, sofern sie ein Argument hatte (sonst NULL) optarg ist immer vom Typ char*, braucht man einen anderen Typ, muss man selber im Code konvertieren 20
21 Parsen von Optionen 7/8 Testen ob ein Programm "abbricht" wenn es soll Zum Beispiel, wenn es nicht mit den richtigen Optionen aufgerufen wurden InputOutput io; ASSERT_DEATH(io.parseArgs(0, NULL), "Usage:.*"); Argument 1: Aufruf, der zum Programmabbruch führt Argument 2: regulärer Ausdruck für Fehlermeldung, die das Programm dann (korrekterweise) produzieren soll Achtung: Funktioniert nur für Fehlermeldungen, die nach stderr geschrieben werden, etwa so: fprintf(stderr, "Usage:./InputOutputMain...\n"); 21
22 Parsen von Optionen 8/8 Noch eine Besonderheit von ASSERT_DEATH Interne Realisierung ist recht kompliziert, es wird ein sogenannter fork verwendet Der Prozess wird in zwei Prozesse aufgespalten Das gibt potenziell Probleme, wenn das Programm threads verwendet, also Teile hat, die unabhängig voneinander nebeneinander her laufen Deshalb gtest versprechen, dass es keine Probleme gibt ::testing::flags_gtest_death_test_style = "threadsafe"; Sonst kommt bei Ausführung der Tests eine Warnung 22
23 Hinweise zum Ü7 1/3 Typkonvertierung Manche Typkonvertierungen finden automatisch statt bool flag = true; int x = flag; // Will get the value 1 (true = 1, false = 0). Manche muss man explizit selber machen: const char* filename = "doof.txt"; char** argv = new char*[2]; argv[1] = filename; argv[1] = const_cast<char*>(filename); // A // B A gibt Warnung "deprecated conversion to char*" B konvertiert explizit von const char* nach char* 23
24 Hinweise zum Ü7 2/3 Vergleich von zwei Strings im Unit Test Umständliche Variante: ASSERT_EQ('d', result._chars[0]); ASSERT_EQ('o', result._chars[1]); ASSERT_EQ('o', result._chars[2]); ASSERT_EQ('f', result._chars[3]); ASSERT_EQ(0, result._chars[4]); Dasselbe in einer Zeile: ASSERT_STREQ("doof", result._chars); Geht aber nur bei 0-terminierten Zeichenketten! 24
25 Hinweise zum Ü7 3/3 Füttern einer Datei als Standardeingabe Um eine Datei als Standardeingabe für ein Programm zu nutzen, kann man Folgendes schreiben./inputoutputmain < doof.txt Alternativ geht auch: cat doof.txt./inputoutputmain Um die Standardausgabe in eine Datei umzulenken:./inputoutputmain > bloed.txt Um sowohl stdout und stderr umzulenken (bash):./inputoutputmain 2>&1 > bloed.txt 25
26 Literatur / Links C-style input / output man 3 fopen Dito für fgets, fprintf, feof, fread, fwrite, fclose, Parsen von Optionen man 3 getopt ASSERT_DEATH AdvancedGuide.md Abschnitt "Death Tests" const_cast 26
Input, Output, Dateien
Input, Output, Dateien C-Kurs 2013, 1. Tutorium Armelle Vérité http://wiki.freitagsrunde.org 8. September 2013 This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 License. 1 / 21
MehrEine Mini-Shell als Literate Program
Eine Mini-Shell als Literate Program Hans-Georg Eßer 16.10.2013 Inhaltsverzeichnis 1 Eine Mini-Shell 1 1.1 Einen Befehl parsen......................... 2 1.2 Was tun mit dem Kommando?...................
MehrE-/A-Funktionalität nicht Teil der Programmiersprache
C Ein-/Ausgabe C Ein-/Ausgabe C.1 Überblick E-/A-Funktionalität nicht Teil der Programmiersprache Realisisierung durch "normale" Funktionen Bestandteil der Standard-Funktionsbibliothek einfache Programmierschnittstelle
MehrProgrammieren in C++
Programmieren in C++ SS 2012 Vorlesung 5, Dienstag 5. Juni 2012 (Klassen, Objekte, Methoden, new & delete) Prof. Dr. Hannah Bast Lehrstuhl für Algorithmen und Datenstrukturen Institut für Informatik Universität
MehrProgrammiersprachen Einführung in C
Programmiersprachen Einführung in C Teil 10: Arbeiten mit Prof. Dr. Gliederung Programmiersprachen 1. Von der Maschinensprache zu C 2. Die Struktur von C-Programmen 3. Variable und Datentypen in C 4. Bildschirm
MehrEin- und Ausgabe mit Dateien
Ein- und Ausgabe mit Dateien Edouard Lamboray Informatik I für D-ITET (2004) Ein- und Ausgabekonzepte in C und C++ fstream header Streamobjekt Files schreiben und lesen Argumente von main Vorbemerkungen
MehrDateizugriff unter C
Begriffe Dateizugriff unter C Datei = sequentielle Ansammlung von Datenbytes, z.b. auf einer Festplatte Auch Bildschirm und Tastatur werden wie Dateien behandelt: Bildschirm ist die Datei stdout Tastatur
MehrEin- und Ausgabe mit Dateien
Ein- und Ausgabe mit Dateien Edouard Lamboray Informatik I für D-ITET (2004) Ein- und Ausgabekonzepte in C und C++ fstream header Streamobjekt Files schreiben und lesen Argumente von main 2 Vorbemerkungen
MehrGI Vektoren
Vektoren Problem: Beispiel: viele Variablen vom gleichen Typ abspeichern Text ( = viele char-variablen), Ergebnisse einer Meßreihe ( = viele int-variablen) hierfür: Vektoren ( = Arrays = Feld ) = Ansammlung
MehrDynamische 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
MehrVerschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes
Verschlüsseln eines Bildes Visuelle Kryptographie Anwendung von Zufallszahlen Wir wollen ein Bild an Alice und Bob schicken, so dass Alice allein keine Information über das Bild bekommt Bob allein keine
MehrIm Windows Betriebssystem sind Dateien eindeutig gekennzeichnet durch ihren Pfad, Dateinamen und nach einem Punkt die Dateierweiterung.
Dateioperationen Seite 1 von 12 Im Windows Betriebssystem sind Dateien eindeutig gekennzeichnet durch ihren Pfad, Dateinamen und nach einem Punkt die Dateierweiterung. z.b.: c:\testdateien\text.dat //Datendatei
MehrGrundlagen 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
MehrGrundlagen der Programmierung in C++ Arrays und Strings, Teil 1
Grundlagen der Programmierung in C++ Arrays und Strings, Teil 1 Wintersemester 2005/2006 G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de Das C++ Typsystem simple structured integral enum
MehrVisuelle Kryptographie. Anwendung von Zufallszahlen
Visuelle Kryptographie Anwendung von Zufallszahlen Verschlüsseln eines Bildes Wir wollen ein Bild an Alice und Bob schicken, so dass Verschlüsseln eines Bildes Wir wollen ein Bild an Alice und Bob schicken,
MehrÜbungspaket 29 Dynamische Speicherverwaltung: malloc() und free()
Übungspaket 29 Dynamische Speicherverwaltung malloc() und free() Übungsziele Skript In diesem Übungspaket üben wir das dynamische Alloziieren 1. und Freigeben von Speicherbereichen 2. von Zeichenketten
MehrProgrammiersprachen Einführung in C
Programmiersprachen Einführung in C Teil 2: Prof. Dr. Unser erstes C-Programm int main (int argc, char *argv[]) int i; int sum = 0; for (i = 0; i
MehrJAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)
JAVA BASICS 2. Primitive Datentypen 1. Warum Java? weit verbreitet einfach und (relativ) sicher keine Pointer (?) keine gotos kein Präprozessor keine globalen Variablen garbage collection objekt-orientiert
MehrAusgewählte Bibliotheksfunktionen
Ausgewählte Bibliotheksfunktionen fopen überträgt den Inhalt des Dateipuffers: Schreibmodus: Dateipuffer wird geschrieben Lesemodus: Puffer wird geleert if (fflush(fp) == EOF) printf("puffer nicht geschrieben\n");
MehrVorlesungsprüfung Programmiersprache 1
Vorlesungsprüfung Programmiersprache 1 Termin der Prüfung: 1) Di 20.03.2018 16:15 17:00 HSB 3 2) Di 15.05.2018 16:15 17:00 HSB 3 3) Di 12.06.2018 16:15 17:00 HSB 3 Stoffgebiete: 1) Ganzzahltypen: char,
MehrStrukturen können wie normale Variablen an Funktionen übergeben werden. Strukturen können auch Ergebnis einer Funktion sein
19 Strukturen 19.2Strukturen als Funktionsparameter 19.2 Strukturen als Funktionsparameter Strukturen können wie normale Variablen an Funktionen übergeben werden Übergabesemantik: call by value Funktion
MehrArrays (Felder/Vektoren)
Arrays (Felder/Vektoren) Zusammenfassung mehrerer Variablen des gleichen Typs unter einem Namen im Speicher direkt hintereinander abgelegt Definition: Typname Arrayname [Größe]; Beispiel: int ar [5]; Zugriff
MehrProgrammieren in C++
Programmieren in C++ SS 2016 Vorlesung 8, Dienstag 14. Juni 2016 (Templates, Templates, Templates) Prof. Dr. Hannah Bast Lehrstuhl für Algorithmen und Datenstrukturen Institut für Informatik Universität
MehrProgrammiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften
Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder
MehrProgrammier-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
MehrEin- und Ausgabe. C - Kurs Mario Bodemann. 15. September 2010
Ein- und Ausgabe C - Kurs 2010 Mario Bodemann 15. September 2010 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License 1 / 46 Inhaltsverzeichnis 1 Wiederholung
MehrProgrammier-Befehle - Woche 8
Datentypen Array (mehrdim.) mehrdimensionale Massenvariable eines bestimmten Typs Definition: int my arr[2][3] = { {2, 1, 6}, {8, -1, 4} }; Zugriff: my arr[1][1] = 8 * my arr[0][2]; (Die Definition kann
MehrInhalt Streams Eingabe / Ausgbe in C Dateizugriff in C Eingabe / Ausgabe in C++ Dateizugriff in C++ Error Handling
Input / Output in C, C++ Inhalt Streams Eingabe / Ausgbe in C Dateizugriff in C Eingabe / Ausgabe in C++ Dateizugriff in C++ Error Handling Page 1 Ausgaben in C,C++ - generell Fuer C basierte Ausgaben:
MehrDynamische Speicherverwaltung
Dynamische Speicherverwaltung Tim Dobert 17.05.2013 Inhaltsverzeichnis 1 Allgemeines zur Speichernutzung 2 2 Ziel und Nutzen 2 3 Anwendung in C 2 3.1 malloc............................... 3 3.2 calloc...............................
MehrProbeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, Uhr Bearbeitungszeit: 105 Minuten
Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, 13.00-14.45 Uhr Bearbeitungszeit: 105 Minuten Schalten Sie ihr Mobiltelefon aus. Bei der Klausur ist als einziges
MehrC/C++-Programmierung
1 C/C++-Programmierung Speicherverwaltung, 0, const Sebastian Hack Christoph Mallon (hack mallon)@cs.uni-sb.de Fachbereich Informatik Universität des Saarlandes Wintersemester 2009/2010 2 Speicherverwaltung
MehrEin- und Ausgabe. C - Kurs Mario Bodemann. 15. September 2010
Ein- und Ausgabe C - Kurs 2010 Mario Bodemann 15. September 2010 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License 1 / 46 Inhaltsverzeichnis 1 Wiederholung
MehrFile I/O. Persistieren von Daten. Gastvorlesung Ralph Erdt erdt (bei) informatik.fh-wiesbaden.de
File I/O, Ralph Erdt, erdt (bei) informatik.fh-wiesbaden.de Seite 1 File I/O Persistieren von Daten Gastvorlesung - 18.01.10 Ralph Erdt erdt (bei) informatik.fh-wiesbaden.de File I/O, Ralph Erdt, erdt
MehrDAP2 Praktikum Blatt 1
Fakultät für Informatik Lehrstuhl 11 / Algorithm Engineering Prof. Dr. Petra Mutzel, Carsten Gutwenger Sommersemester 2009 DAP2 Praktikum Blatt 1 Ausgabe: 21. April Abgabe: 22. 24. April Kurzaufgabe 1.1
MehrLösungshinweise/-vorschläge zum Übungsblatt 13: Software-Entwicklung 1 (WS 2017/18)
Dr. Annette Bieniusa Mathias Weber, M. Sc. Peter Zeller, M. Sc. TU Kaiserslautern Fachbereich Informatik AG Softwaretechnik Lösungshinweise/-vorschläge zum Übungsblatt 13: Software-Entwicklung 1 (WS 2017/18)
MehrJAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)
JAVA BASICS 2. Primitive Datentypen 1. Warum Java? zunehmend weit verbreitet einfach und (relativ) sicher keine Adressrechnung, aber Pointer keine gotos kein Präprozessor keine globalen Variablen garbage
MehrFILE *fp; char fname[100];... fp = fopen (fname, rb ); if( fp == NULL ) { perror( fopen );... } // Fehlernachricht auf letzten Fehler, der aufkam
Aktuelle Fileposition ermitteln long pos; pos=ftell(fp); //aktuelle Bytenummer Filelaenge in Bytes fseek(fp,0,seek_end); pos=ftell(fp); Fileendeerkennung int rc; rc = feof (fp) //!= 0 bei Fileende // ==
MehrLinux Prinzipien und Programmierung
Linux Prinzipien und Programmierung Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2014 1 / 25 2 / 25 Pipes Die Bash kennt drei Standard-Dateideskriptoren: Standard In (stdin) Standard-Eingabe,
MehrUnterlagen. CPP-Uebungen-08/
Unterlagen http://projects.eml.org/bcb/people/ralph/ CPP-Uebungen-08/ http://www.katjawegner.de/lectures.html Kommentare in C++ #include /* Dies ist ein langer Kommentar, der über zwei Zeilen
MehrProgrammiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm
Programmiersprachen Einführung in C Teil 2: Prof. Dr. int main (int argc, char *argv[]) int sum = 0; for (i = 0; i
MehrProgrammieren in C. Die C-Standardbibliothek: Datei Ein- und Ausgabe. Prof. Dr. Nikolaus Wulff
Programmieren in C Die C-Standardbibliothek: Datei Ein- und Ausgabe Prof. Dr. Nikolaus Wulff Das Dateisystem In C erfolgt die gesamte Ein- und Ausgabe durch Lesen oder Schreiben von Strömen (stream). Periphere
MehrC++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18
C++ Teil 5 Sven Groß 13. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 13. Mai 2016 1 / 18 Themen der letzten Vorlesung Funktionen Funktionsüberladung, Signatur Rekursion const-deklaration Referenzen
MehrEinstieg in die Informatik mit Java
Vorlesung vom 25.4.07, Anweisungen Übersicht 1 Ausdrucksanweisung 2 Einfache Ausgabeanweisung 3 Einfache Eingabeanweisung, Vorbereitungen 4 Verbundanweisung 5 Bedingte Anweisung 6 Auswahlanweisung 7 for
MehrThemen. Formatierte und unformatierte Eingabe Bedingungsoperator Namespaces Kommandozeilenargumente
Themen Formatierte und unformatierte Eingabe Bedingungsoperator Namespaces Kommandozeilenargumente Formatierte Eingabe mit cin Die Formatierung der Eingabe ist der Ausgabe sehr ähnlich: Die Flags werden
MehrDateioperationen Fachhochschule Würzburg-Schweinfurt Prof. Dr. Martin Ochs. Abspeichern und Einlesen von Texten (Strings) in Dateien
Informatik I SS 2003 Dateioperationen 1 Textdateien, Öffnen Abspeichern und Einlesen von Texten (Strings) in Dateien 1. Das Öffnen einer Datei a) Deklaration eines Zeigers auf eine Datei FILE *pfile; b)
Mehr15. C++ vertieft (IV): Ausnahmen (Exceptions)
Was kann schon schiefgehen? Öffnen einer Datei zum Lesen oder Schreiben std::ifstream input("myfile.txt"); 15. C++ vertieft (IV): Ausnahmen (Exceptions) Parsing int value = std::stoi("12 8"); Speicherallokation
MehrEinstieg in die Informatik mit Java
1 / 47 Einstieg in die Informatik mit Java Anweisungen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 47 1 Ausdrucksanweisung 2 Einfache Ausgabeanweisung 3 Einfache Eingabeanweisung,
MehrVariablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel
4213 Variablen 17.834 float Flugzeug 36812736294 I write code Hund long String Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 3 + 4 1 Variablen sind wie Becher. Sie speichern etwas. // Variablen
MehrFH Ravensburg-Weingarten Schriftlich Prüfung Programmieren
FH Ravensburg-Weingarten Schriftlich Prüfung Programmieren Prof. Dr. M. Zeller Datum, Zeit Aufgabenblätter erreichbare Punktzahl zugelassene Hilfsmittel, 0800 1000 Uhr (120 min) 16 Seiten (einschl. Deckblatt)
MehrProgrammieren in C. Funktionen mit Zeigern und Adressen. Prof. Dr. Nikolaus Wulff
Programmieren in C Funktionen mit Zeigern und Adressen Prof. Dr. Nikolaus Wulff ByValue versus byreferenz C übergibt immer Kopien der Variablen an Funktionen. Es ist nur dann möglich die Werte von Variablen
MehrC-Kurs 2010 Pointer. 16. September v2.7.3
C-Kurs 2010 Pointer Sebastian@Pipping.org 16. September 2010 v2.7.3 This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 License. C-Kurs Mi Konzepte, Syntax,... printf, scanf Next
MehrEinstieg in die Informatik mit Java
Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form
MehrVariablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes
Variablen Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes v ist Stück im Speicher, der 4 Bytes lang ist Speicherzugriff? Über Adressen!
MehrProgrammierkurs Kapitel 4: Dateien Seite 1. Verwaltungfeld im Speicher. 4.1 Alternativen zur Programmierung der Eingabe und der Ausgabe
Programmierkurs Kapitel 4: Dateien Seite 1 4 Dateien Verwaltungfeld im Speicher Dateivariable im Programm Dateizeiger Schreib-/Lesefeld im Programm EOF 4.1 Alternativen zur Programmierung der Eingabe und
MehrJAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)
JAVA BASICS 2. Primitive Datentypen 1. Warum Java? zunehmend weit verbreitet einfach und (relativ) sicher keine Adressrechnung, aber Pointer keine gotos kein Präprozessor keine globalen Variablen garbage
MehrKapitel 8: Abstrakte Datentypen. Inhalt. Definition ADT Keller ADT Schlange
Wintersemester 005/06 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich Informatik Lehrstuhl
Mehr182. stdio. 183. stdio. Eingabe. Ausgabe. Typisch für Zeileneingabe und Analyse: #include <stdio.h>
182. stdio Eingabe int getchar (), getc (FILE * fp), fgetc (FILE * fp); char * gets (char * buf), * fgets (char * buf, int len, FILE * fp); int scanf (const char * fmt,...); int fscanf (FILE * fp, const
MehrEinführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)
Wintersemester 2005/06 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich Informatik Lehrstuhl
MehrDateien. INE2, Mittwoch / TE402 M. Thaler, Office TG208. ZHAW, M. Thaler, K. Rege, G.
Dateien INE2, Mittwoch 8.00-9.35 / TE402 M. Thaler, tham@zhaw.ch Office TG208 http://www.zhaw.ch/~tham 1 Um was gehtes? Informationsaustausch Programme tauschen Information mit Umgebung über - Kommandozeilen-Argumente
MehrC++ Kurs Teil 3. Standard Template Library (STL) Kommunikation mit der shell Hyper Text Markup Language (HTML)
C++ Kurs Teil 3 Standard Template Library (STL) Übersicht vector algorithm: sort, for_each map Kommunikation mit der shell Hyper Text Markup Language (HTML) O. Ronneberger: C++ Kurs Teil 3 Seite 1
MehrEinstieg in die Informatik mit Java
Vorlesung vom 6.11.07, Weitere Anweisungen Übersicht 1 Verbundanweisung 2 Bedingte Anweisung 3 Auswahlanweisung 4 for Schleife 5 while Schleife 6 do Schleife 7 break Anweisung 8 continue Anweisung 9 Leere
MehrDateien. INE2 M. Thaler, Office TG208. ZHAW, M. Thaler, K. Rege, G. Burkert
Dateien INE2 M. Thaler, tham@zhaw.ch Office TG208 http://www.zhaw.ch/~tham 1 Um was gehtes? Informationsaustausch Programme tauschen Information mit Umgebung über - Kommandozeilen-Argumente - Kanäle bzw.
MehrZusammenfassung des Handzettels für Programmieren in C
Zusammenfassung des Handzettels für Programmieren in C In der handschriftlichen Kopie werden mehr Abkürzungen verwendet. Alles Grün markierte dient zum lernen und wird nicht auf den Handzettel übertragen.
Mehr3D Programmierpraktikum: Einführung in C++ - Teil 1
3D Programmierpraktikum: Einführung in C++ - Teil 1 Praktikum 3D Programmierung Sebastian Boring, Otmar Hilliges Donnerstag, 27. April 2006 LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum
MehrProgrammieren 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
MehrDynamische Datentypen
Dynamische Datentypen Tupel und Folgen o Wertebereich eines Structs / einer Klasse: T1 T2... Tk Werte sind k-tupel Tupel und Folgen o Wertebereich eines Structs / einer Klasse: T1 T2... Tk Werte sind k-tupel
MehrHochschule Darmstadt Informatik-Praktikum WS 2017/2018 WIng Bachelor 6. Aufgabenblatt Zeiger, verkettete Liste, Dateieingabe und -ausgabe
Aufgabe 6: Häuser verwalten - dynamisch Für ein Schneeräumungsunternehmen soll ein Programm zur Verwaltung von Häuserlisten geschrieben werden. Das Programm soll in der Lage sein, zu einem Haus die wichtigsten
MehrNetzwerksicherheit Musterlösung Übungsblatt 4: Viren
Institut für Informatik Alina Barendt und Philipp Hagemeister Netzwerksicherheit Musterlösung Übungsblatt 4: Viren 1 Vorbereitung msg db "Virus" mov ah, 40h mov bx, 1 mov cx, $5 mov dx, msg int 21h ; Write
MehrPerlkurs Dateiverarbeitung. Dr. Marc Zapatka Deutsches Krebsforschungszentrum Molekulare Genetik Gruppenleiter Bioinformatik
Perlkurs Dateiverarbeitung Dr. Deutsches Krebsforschungszentrum Gruppenleiter Bioinformatik Umgang mit Dateien in Perl Dateitest- oder Prüfoperatoren um was für eine Art Datei handelt es sich? Durch Verzeichnisse
MehrInformatik I - Übung 2 Programmieren in Eclipse
Informatik I - Übung 2 Programmieren in Eclipse. / Info1 / HelloWorld / HelloWorld Wort1 Wort2 Daniel Hentzen dhentzen@student.ethz.ch 5. März 2014 1.2 Häufigste Fehler im Terminal auf Gross-/Kleinschreibung
Mehrfile:///h:/dokumente/_fh/ ws /etinfoii/vorlesung/infoii...
7 Dateien Um Daten dauerhaft zu sichern, müssen sie auf den Sekundärspeicher (die Festplatte) abgespeichert werden. Beim Umgang mit Peripheriegeräten unter Windows und UNIX ist zu beachten Die Verbindung
MehrC allgemein. C wurde unter und für Unix entwickelt. Vorläufer sind BCPL und B.
C-Crash-Kurs Eine kurze, keinesfalls erschöpfende Einführung in die Sprache C für Studierende, die eine strukturierte imperative Programmiersprache beherrschen. Die Vorstellung erfolgt am Beispiel von
Mehr8. Referenzen und Zeiger
8. Referenzen und Zeiger Motivation Variable werden in C++ an speziellen Positionen im Speicher abgelegt. An jeder Position befindet sich 1 Byte. Sie sind durchnummeriert beginnend bei 0. Diese Positionen
MehrZeiger in C und C++ Zeiger in Java und C/C++
1 Zeiger in Java und C/C++ Zeigervariable (kurz: Zeiger, engl.: pointer): eine Variable, die als Wert eine Speicheradresse enthält Java: Zeiger werden implizit für Referenztypen (Klassen und Arrays) verwendet,
MehrHochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller
Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller Datum, Zeit, 08:00 09:30 Uhr (90 min) Aufgabenblätter 14 Seiten (einschl. Deckblatt) erreichbare Punktzahl 54 zugelassene
MehrInhalt Übungen zu Systemnahe Programmierung in C (SPiC) Inhalt. Terminal - historisches (etwas vereinfacht) Seriell. Computer. Netzwerk DFÜ.
Übungen zu Systemnahe Programmierung in C (SPiC) Sebastian Maier, Heiko Janker (Lehrstuhl Informatik 4) Übung 5 Wintersemester 2015/2016 Lehrstuhl Informatik 4 Übungen zu SPiC (WS 2015/16) 2 21 Terminal
MehrU8 7. Übung U8 7. Übung
U8 7. Übung U8 7. Übung Dynamische Speicherverwaltung Generisches Sortieren Aufgabe 7 U8.1 U8-1 Dynamische Speicherverwaltung U8-1 Dynamische Speicherverwaltung Erzeugen von Feldern der Länge n: mittels:
MehrC++ Notnagel. Ziel, Inhalt. Programmieren in C++
C++ Notnagel Ziel, Inhalt Ich versuche in diesem Dokument noch einmal die Dinge zu erwähnen, die mir als absolut notwendig für den C++ Unterricht und die Prüfungen erscheinen. C++ Notnagel 1 Ziel, Inhalt
MehrTeil I Debuggen mit gdb
Teil I Debuggen mit gdb Wer kennt das nicht? $./a.out Segmentation fault Was tun dagegen? printf()s in den Code einfügen? Besser (und professioneller): Einen Debugger verwenden Wer kennt das nicht? $./a.out
MehrBereits behandelt: Einfache Datentypen / Variablen. Schleifen und Verzweigungen. Funktionen. Heute: Felder, Zeiger, Referenzen. Freispeicherverwaltung
Kompaktkurs C++ Themen C 1 Bereits behandelt: Einfache Datentypen / Variablen Schleifen und Verzweigungen Funktionen Heute: Felder, Zeiger, Referenzen Freispeicherverwaltung Zeichenketten Kommandozeilenargumente
MehrKlausur Informatik WS 2012/13
Klausur Informatik WS 2012/13 Name Gruppe 1 Vorname Dauer 90 min Matrikelnummer Hilfsmittel keine Die Klausur ist mit 50 Punkten sicher bestanden. Hinweies: Voraussetzung für die Teilnahme ist das Bestehen
MehrGrundlagen der Programmiersprache C für Studierende der Naturwissenschaften
Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften Teil 7: Matrizen, Vektoren und dynamische Speicherverwaltung Martin Nolte Abteilung für Angewandte Mathematik Universität Freiburg
MehrHS Ravensburg-Weingarten Schriftlich Prüfung Programmieren
HS Ravensburg-Weingarten Schriftlich Prüfung Programmieren Prof. Dr. M. Zeller Datum, Zeit, 08:00 10:00 Uhr (120 min) Aufgabenblätter 16 Seiten (einschl. Deckblatt) erreichbare Punktzahl 58 zugelassene
MehrÜbungsblatt 1. Java Vorkurs (WS 2017)
Übungsblatt 1 Java Vorkurs (WS 2017) Aufgabe 1 Hallo-Welt Erstelle ein neues Projekt mit dem Namen HelloJava. Erzeuge in diesem Projekt eine neue Klasse HelloJava. (a) Schreibe die main-methode in die
MehrZeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch
darstellung Arbeiten mit darstellung werden im Computer durch (kleine) Zahlen dargestellt in C können im Datentyp char gespeichert werden, dieser umfasst ein Byte und gilt als Ganzzahltyp darstellung Arbeiten
MehrProgrammieren in Java
Ein Projekt 2 Wiederholung: new-operator Werte nicht-primitiver Datentypen müssen mit new erzeugt werden Es gibt keine Möglichkeit primitive Daten mit new zu erzeugen Beispiele int[] myarray = new int[]
MehrErste Schritte der Programmierung in C
Erste Schritte der Programmierung in C C versus C++ Anatomie von C-Programmen für AVR- Mikrocontroller Unterschiede zwischen C++ und C 1 Grundlegende Unterschiede File-Extensions (Header und Quellcode)
MehrEinführung in den Einsatz von Objekt-Orientierung mit C++ I
Einführung in den Einsatz von Objekt-Orientierung mit C++ I ADV-Seminar Leiter: Mag. Michael Hahsler Syntax von C++ Grundlagen Übersetzung Formale Syntaxüberprüfung Ausgabe/Eingabe Funktion main() Variablen
MehrProgrammieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff
Programmieren in C Eine Einführung in die Programmiersprache C Prof. Dr. Nikolaus Wulff Textausgabe per printf Die Funktion printf ist kein Bestandteil der C Sprache sondern gehört zur C Bibliothek. printf
MehrÜbungen zu Softwaresysteme I Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2004 E-Uebung3.fm
E 3. Übung E 3. Übung Besprechung 1. Aufgabe Aufgabe 3: malloc Debugger gdb E.1 1. Include, Deklarationen #include #include void append_element(int value); int remove_element(void);
MehrF Zeiger, Felder und Strukturen in C
F Zeiger, Felder und Strukturen in C F Zeiger, Felder und Strukturen in C F.1 Zeiger(-Variablen) 1 Einordnung Konstante: Bezeichnung für einen Wert a 0110 0001 Variable: Bezeichnung eines Datenobjekts
MehrTyp : void* aktuelle Parameter Pointer von beliebigem Typ
2. Funktionen - Prototypvereinbarung typangabe funktionsname(parameterliste); - Funktionsdefinition typ funktionsname(parameterliste){ Anweisung - Funktionstyp -> Typ der Funktionswertes zulaessige Typangaben
MehrLinux. Fehlerbehandlung Sebastian Maier. Aufgabe: concat Übung 7 Anhang
Übungen zu Systemnahe Programmierung in C (SPiC) Sebastian Maier (Lehrstuhl Informatik 4) Übung 7 Sommersemester 2016 Lehrstuhl Informatik 4 Übungen zu SPiC (SS 2016) 2 23 Terminal - historisches (etwas
MehrProgrammiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny
Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 7. Funktionen Einleitung Nach dem Prinzip Divide and Conquer bietet es sich an, größere Aufgaben in kleinere Teile zu unterteilen. Anweisungsblöcke,
MehrPrimitive Datentypen
Primitive Datentypen 2 Arten von Datentypen: primitive Datentypen (heute) Objekte (später) Java ist streng typisiert, d.h. für jede Variable muß angegeben werden was für eine Art von Wert sie aufnimmt.
MehrAdvanced Programming in C
Advanced Programming in C Pointer und Listen Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Oktober 2013 Überblick 1 Variablen vs. Pointer - Statischer und dynamischer
MehrProgrammieren in C/C++ und MATLAB
Programmieren in C/C++ und MATLAB Sven Willert Sabine Schmidt Christian-Albrechts-Universität zu Kiel CAU 5-1 Übung Schreiben Sie ein Programm, das die Zahl π durch π = 4 4 4 4 4 4 + + +... 3 5 7 9 11
MehrC++ Teil 9. Sven Groß. 17. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil Juni / 17
C++ Teil 9 Sven Groß 17. Juni 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 9 17. Juni 2016 1 / 17 Themen der letzten Vorlesung Objektorientierung und Klassen Attribute / Datenelemente Methoden / Elementfunktionen
MehrCrashkurs C++ - Teil 1
Crashkurs C++ - Teil 1 Intro Speicherverwaltung Variablen, Pointer, Referenzen Felder statische & dynamische Allozierung Birgit Möller & Denis Williams AG Bioinformatik & Mustererkennung Institut für Informatik
Mehr