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

Ähnliche Dokumente
Praktikum zur Vorlesung Einführung in die Programmierung WS 17/18 Blatt 4

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

Informatik für Elektrotechnik und Informationstechnik

C/C++ Debugging mit CDT unter Eclipse

Technische Informatik für Ingenieure Winter 2005/2006 Übungsblatt Nr. 3

Technische Informatik für Ingenieure WS 2010/2011 Übungsblatt Nr. 3

Einrichten einer Debug- Umgebung in Eclipse

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2017/18. Vorbereitende Aufgaben

Visual Basic Editor CATIA V5

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

Effizientes Programmieren

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

SAP -Schnelleinstieg: ABAP-Entwicklung in Eclipse. Christoph Lordieck

Grundlagen von C# - 2

Praktikum zur Vorlesung Einführung in die Programmierung WS 18/19 Blatt 1

Kontrollstrukturen -- Schleifen und Wiederholungen

Eclipse Tutorial.doc

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2016/17. Vorbereitende Aufgaben

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

Kurzanleitung Eclipse

Technische Informatik für Ingenieure WS 2010/2011 Musterlösung Übungsblatt Nr. 3

Erste Schritte mit Eclipse

Für die Erstellung von Javaprogrammen sind eventuell zwei Komponenten nötig. 1. Das Java-Develepment-Kit (JDK) und die 2. Java Runtime Engine (JRE)

µversion 2 Einführung

Ziele sind das Arbeiten mit Funktionen (Modularisierung, Parameterübergabe), sowie - Reihentyp (Array)

Im Mathe-Pool startet man Eclipse am besten aus einer Shell heraus, und zwar indem man im Home- Verzeichnis den Befehl

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

Programmieren in C/C++ und MATLAB

Klausur: Informatik, am 11. Juli 2013 Gruppe: B Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Informatik I - Übung 2 Programmieren in Eclipse

C++ Teil Schleifen. Man kann bestimme Anweisungen in einem Programm mehrfach ausführen lassen. Dazu gibt es in C++ verschiedene Schleifen.

BASIC-Tiger Starter Kit. Tel: +49 (241) Fax: +49 (241)

Visual Basic Express Fehlerermittlung

Klausur: Informatik, am 11. Juli 2013 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Eclipse kann kostenlos unter dem folgenden Link herunter geladen werden:

Aufgabe 1. Universität Duisburg-Essen Fachbereich Mathematik Dr. O. Rheinbach

Debugging und Speicherfehler. Seminar Effiziente Programmierung Kadir Duman

Aufgabe 3. Aufgabe 4.

Schritt-für-Schritt-Anleitung für die Arbeit mit dem Debugger

Informatik I. Übung 2 : Programmieren in Eclipse. 5. März Daniel Hentzen

Debugging mit ddd (Data Display Debugger)

Hello World! Eine Einführung in das Programmieren Das erste Programm

Grundlagen der Programmentwicklung

Hinweise zum Programm Überprüfung des Betriebszustandes von Kläranlagen. Bitte prüfen Sie regelmäßig den aktuellen Stand der Software im Internet!

Programmieren in Haskell Debugging

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik

Installationsanleitung

C++ - Einführung in die Programmiersprache Fehler abfangen. Leibniz Universität IT Services Anja Aue

Praktikum Ingenieurinformatik. Termin 3. Fehlervermeidung, Fehlersuche, Schleifen (while, do-while, for)

Praktikum zu Einführung in die Informatik für LogWings und WiMas Wintersemester 2013/14

Programmiervorkurs Einführung in Java Tag 3

Praktikum 1: Einführung, BMI Rechner

Access 2010 Programmierung Schleifen

Übung zur Vorlesung EidP (WS 2018/19) Blatt 4

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

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

VORBEMERKUNGEN ZUM INFORMATIK-KURS : PROGRAMMIEREN MIT C++

GI Vektoren

RO-Tutorien 17 und 18

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

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.

Grundlagen der OO- Programmierung in C#

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

Medien Programmierung. von Nico Hezel

Kurzanleitung CodeBlocks zur C-Programmierung. In dieser Kurzanleitung wird anhand zweier Beispiele beschrieben, wie C-Programme mit der

Mapra: C++ Teil 2. Felix Gruber, Sven Groß. 2. Mai 2017 IGPM. Felix Gruber, Sven Groß (IGPM) Mapra: C++ Teil 2 2. Mai / 11

Kurze Bedienungsanleitung für den Java-Editor

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

Hochschule Darmstadt Informatik-Praktikum WS 2017/2018 WIng Bachelor 6. Aufgabenblatt Zeiger, verkettete Liste, Dateieingabe und -ausgabe

4 Schleifen und Dateien

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

Musterlösung: 12. Jgst. 2. Kursarbeit Datum: Fach: Informationsverarbeitung (LK)

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

DKS-Install einsetzen

RO-Tutorien 15 und 16

Einführung in die Programmierung

Microcontroller Praktikum SS2010 Dipl. Ing. R. Reisch

C# - Einführung in die Programmiersprache Fehler abfangen. Leibniz Universität IT Services Anja Aue

Klausur in Programmieren

Einführung in die Programmierung Wintersemester 2011/12

Programmieren I. Entwicklungsumgebungen Eclipse, NetBeans und IntelliJ IDEA. Institut für Angewandte Informatik

DAP2 Praktikum Blatt 2

Programmieren I. Entwicklungsumgebungen Eclipse und NetBeans. Institut für Angewandte Informatik

Herzlich willkommen!

Hochschule Darmstadt Informatik-Praktikum SS 2018 EIT Bachelor 3. Aufgabenblatt Funktionen - Unterprogramme

Werkzeuge zur Programmentwicklung

Programmieren I. Entwicklungsumgebungen Eclipse, NetBeans und IntelliJ IDEA. Institut für Angewandte Informatik

Klausur: Informatik, am 11. Juli 2013 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

EV3 JAVA-PROGRAMMIERUNG MIT LEJOS INSTALLATIONSANLEITUNG INHALT

SCHRITT 0 ( Nur falls Java noch nicht installiert ist! )

Version 0.3. Installation von MinGW und Eclipse CDT

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

3 Maps richtig ablegen und

Wegleitung Installation, Einstellung und Nutzung der Trader Workstation und dem NinjaTrader für PC

hue12 January 24, 2017

Transkript:

Michael Jugovac Dominik Kopczynski Jan Quadflieg Till Schäfer Stephan Windmüller Dortmund, den 7. November 2014 Praktikum zur Vorlesung Einführung in die Programmierung WS 14/15 Blatt 4 Es können 15 Punkte erreicht werden. Allgemeine Hinweise 1. Bitte lesen Sie vor der Bearbeitung alle Aufgaben sorgfältig durch! Dies erspart Ihnen unnötige Arbeit und somit auch Zeit! 2. Die einzigen Header, die Sie zur Bearbeitung der Aufgaben verwenden dürfen, sind iostream und solche, die laut Aufgabenstellung explizit erlaubt werden. 3. Lassen Sie sich fertiggestellte Aufgaben bitte möglichst frühzeitig testieren. In der letzten halben Stunde vor Schluss wird nur noch eine Aufgabe testiert! Grundlage: Aktualisieren von Eclipse (Nur Informatik-Pool) Achtung: Betrifft nur die Rechner im Informatik-Pool! Im Retina-Pool ist die Aktualisierung nicht nötig! Leider bereitet die vorhandene Eclipse Installation der Poolrechner Probleme. Deswegen ist es nötig, einige Softwarekomponenten zu aktualisieren. 1. Starten Sie Eclipse 3.8 ganz normal. 2. Wählen Sie im Menü Help Install New Software... 3. Geben Sie oben im Feld Work with die url http://download.eclipse.org/tools/cdt/releases/juno ein (mit Enter bestätigen). Danach dauert es einen kurzen Moment, bis die Paketliste geladen ist. 4. Wählen Sie unten die drei Pakete CDT Main Features C/C++ Development Tools, CDT Optional Features GCC Cross Compiler Support und CDT Optional Features C++ Remote Launch aus. 5. Zwei mal weiter mit Next. 6. Auf der letzten Seite müssen noch die Lizenzbedingungen akzeptiert werden (I accept the terms of the license agreement.), dann kann mit Finish die Installation ausgeführt werden. 7. Abschließend muss Eclipse neu gestartet werden.

Grundlage: Strukturierte Fehlersuche (Debugging) Das Suchen nach Fehlern ist einfacher, wenn der Quelltext vernünftig formatiert ist: Einrückungen tragen wesentlich dazu bei, die Struktur des Codes zu erkennen. In Eclipse kann man den Quelltext vollautomatisch sinnvoll formatieren lassen, indem man den kompletten Quelltext markiert (Strg+A) und dann im Menü den Befehl Source Format auswählt (Strg+Umschalt+F). Ein Debugger ist ein Werkzeug zum Auffinden von Bugs (Fehlern) in Programmen. Dabei kann das Programm schrittweise ausgeführt und nach jedem Schritt der Zustand untersucht werden. Ein Schritt bezeichnet dabei immer eine Programmzeile und der Zustand eines laufenden Programms lässt sich (stark vereinfacht) durch die Variablenbelegung beschreiben. Beispiel: : int x = 5 ; cout << x << endl ; // Zustand : x hat den Wert 5,... x = x 1 ; cout << x << endl ; // Zustand : x hat den Wert 4,... : Der folgende Abschnitt beschreibt, wie das Debuggen mit Eclipse funktioniert: Da zum Debugging zusätzliche Debug-Symbole in dem Programm gespeichert werden müssen und weniger Optimierungen beim Übersetzen verwendet werden können, erzeugt Eclipse (und alle anderen gängigen Entwicklungsumgebungen) für ein neues Projekt zwei Konfigurationen für den Compiler (Übersetzer). Mit der Konfiguration Release wird das Programm so übersetzt, dass es möglichst schnell ausgeführt wird. Mit der Konfiguration Debug übersetzt der Compiler das Programm so, dass mit Hilfe des Debuggers nach Fehlern gesucht werden kann. Zwischen den zwei Konfigurationen kann über den Menüpunkt Project Build Configurations Set Active umgeschaltet werden, wie in Abbildung 1 zu sehen. Achten Sie also darauf, das Debugging zum Testen immer einzuschalten und das Programm mit der Konfiguration Debug zu übersetzen. Abbildung 1: Eclipse: Umschalten zwischen Debug und Release Einstellung. Nachdem das Debugging angeschaltet wurde, kann das Programm mit F11 oder Run Debug gestartet werden. Eclipse wechselt dann (ggf. nach einer Rückfrage) in die Debugging-Perspektive. Diese zeigt in einem Bereich rechts oben die Zustände der Variablen an. Soll wieder zurück zur Programmier-Perspektive (mit der Konsolenausgabe und der Fehlerliste) gewechselt werden, muss das Programm erst gestoppt werden (Strg+F2, Run -> Terminate oder der Stopp-Schaltfläche). Danach muss dann über einen separaten Klick auf das C++-Layout zurück gewechselt werden. Wurde das Programm zum Debuggen gestartet, hält es am Beginn der main Funktion direkt an. Im angehaltenen Zustand kann dann in Ruhe der Zustand des Programms untersucht werden. Mit dem Befehl Run Step Over (Strg+F6) kann das Programm schrittweise (ein Schritt entspricht i.d.r. einer Zeile Programmtext) weiter ausgeführt werden. Da ein Programm mitunter viele Schritte ausführt, wäre es mühselig immer alle Schritte durchzugehen, bis die relevante Stelle im Code erreicht wurde. Daher gibt es sogenannte Haltepunkte (engl. Breakpoints). Mit diesen markiert man einzelne Zeilen, an denen das Programm angehalten werden soll. In Eclipse kann ein Breakpoint in der aktuellen Zeile (in der sich der Cursor befindet) erstellt werden, indem Umschalt+Strg+B gedrückt, im Menü Run Toggle Breakpoint ausgewählt oder ein Doppelklick auf die blaue Fläche links neben dem Zeilenanfang getätigt wird. Der Breakpoint wird anschließend über einen kleinen blauen Punkt angezeigt. Wurde das Programm schließlich an einem Haltepunkt angehalten, kann es entweder bis zum nächsten Haltepunkt ausgeführt (F8-Taste, Run Resume oder der Resume Schaltfläche) oder wie oben beschrieben Schritt für Schritt (zeilenweise) durchgegangen werden (Eclipse: F6 oder Run Step Over). In Tabelle 1 befindet sich noch einmal eine Zusammenfassung der verfügbaren Shortcuts.

Abbildung 2: Eclipse: Debugging-Schaltflächen Tabelle 1: Zusammenfassung der Shortcuts Befehl Tastenkombination Haltepunkt setzen/entfernen Umschalt+Strg+B Debugging starten F11 Debugging stoppen Strg+F2 Bis zum nächsten Haltepunkt F8 Eine Zeile ausführen F6 Hinweis: Wenn das Debugging eingeschaltet ist (Konfiguration Debug und Start mit F11) und ein Laufzeitfehler auftritt, hält das Programm automatisch an der fehlerhaften Stelle an und wechselt in die Debugging Perspektive. Der Programmzustand zum Zeitpunkt des Fehlers kann direkt untersucht werden. Tipp: Formatieren Sie den Quelltext vernünftig! Tipp: Verwenden Sie den Debugger immer, wenn Sie sich das Verhalten eines Programms nicht erklären können und wenn Fehler auftreten. Es lohnt sich, mit dem Debugger vertraut zu sein. Die effiziente und effektive Fehlersuche in komplexen Programmen ist ohne Debugger kaum möglich! Tipp: Das Zusammenspiel zwischen Eclipse und dem Debugger verläuft nicht immer reibungslos. Sollten Sie merkwürdiges Verhalten beobachten oder Probleme beim Debuggen haben, melden Sie sich bitte bei den Betreuern. Bekannte Problem sind z.b.: Wenn das Programm noch im Debugger ausgeführt wird, kann der Quelltext nicht neu übersetzt werden, da das Programm nicht überschrieben werden kann. Achten Sie also unbedingt darauf, noch laufende Programminstanzen immer zu beenden (Befehl Terminate). Ohne die Aktualisierung von Eclipse funktioniert das Einlesen von Werten mittels cin nicht, wenn der Debugger verwendet wird (Nur Informatik-Pool). Der verwendete Debugger ignoriert Haltepunkte in leeren Zeilen und bei einfachen Variablendeklarationen ohne gleichzeitige Initialisierung. Setzen Sie Haltepunkte deshalb immer in Zeilen, die Anweisungen enthalten.

Aufgabe 1: Benutzen des Debuggers (6 Punkte) Erstellen Sie ein neues Projekt mit dem Namen Aufgabe_4_1 und fügen Sie die zur Verfügung gestellte Datei aufgabe_4_1.cpp hinzu. a) Starten Sie das Programm im Debugging-Modus. Normalerweise ist der Debugger so eingestellt, dass das Programm direkt anhält. Tut es das nicht, setzen Sie in der ersten Programmzeile der Funktion main() bei der Definition der Variablen a einen Haltepunkt. Gehen Sie dann das Programm schrittweise durch. Welche Zeilen des Programms wurden schon ausgeführt, wenn der Pfeil auf Zeile x zeigt? Wie verhält sich der Debugger bei Bedingungen? Welche Zeilen werden ausgewertet? b) Setzen Sie einen Haltepunkt in der Zeile mit der Anweisung cout «Zahlenvergleich «endl;. Welchen Wert haben die Variablen a, b und text wenn das Programm an diesem Haltepunkt anhält? Welche Werte haben die Elemente des Arrays text? Sind die Werte über mehrere Läufe stabil? Wie erklären Sie das Verhalten? c) Legen Sie in dem Programm eine Variable vom Datentyp char an. Welche Informationen lassen sich mit dem Debugger über die Repräsentationen von x und! gewinnen? d) Legen Sie einen Haltepunkt in der Zeile mit der Anweisung (if(a < b)) an und lassen Sie das Programm bis zu diesem Haltepunkt laufen. Ändern Sie nun im View Variables den Wert von Variable b in 42 und lassen Sie das Programm weiterlaufen. Was passiert?

Aufgabe 2: Wolf, Ziege und Kohlkopf (9 Punkte) Ein Bauer ist mit einer Ziege, einem Wolf und einem Kohlkopf unterwegs, als er auf einen Fluss trifft, den er überqueren möchte. Es gibt auch ein Ruderboot, mit dem er das bewältigen könnte. Das Problem dabei ist: Das Boot ist sehr klein und der Bauer kann neben sich höchstens den Kohlkopf oder eines der Tiere mitnehmen. Er kann also entweder die Ziege oder den Wolf oder den Kohlkopf transportieren. Natürlich kann er den Wolf nicht mit der Ziege alleine lassen, weil der Wolf die Ziege fressen würde. Selbiges gilt auch für die Ziege und den Kohlkopf, der ohne Aufsicht des Bauern von der Ziege verspeist werden würde. In dieser Aufgabe soll ein Programm entwickelt werden, mit dem verschiedene Strategien interaktiv durchgespielt werden können. a) Erstellen Sie zunächst ein neues Projekt Aufgabe_4_2 und fügen Sie den Code aus der zur Verfügung gestellten Datei aufgabe_4_2.cpp hinzu. Erzeugen Sie ein vierelementiges Array namens lage mit Einträgen vom Typ info. Die name-einträge der Arraykomponenten sollen mit "Bauer", "Kohlkopf", "Wolf" und "Ziege" und die ort-komponenten mit ufer_links initialisiert werden. b) Geben Sie die durch lage spezifizierte Situation in folgender Weise auf dem Bildschirm aus (hier beispielhaft die Ausgangssituation): Ufer links: Bauer Kohlkopf Wolf Ziege -------------------------------- Ufer rechts: Gestalten Sie Ihren Code so, dass beliebige Situationen gemäß der Variablenbelegung ausgegeben werden können. So lautet nach Ausführung der Anweisungen lage[bauer].ort = ufer_rechts; lage[ziege].ort = ufer_rechts; die Ausgabe: Ufer links: Kohlkopf Wolf -------------------------------- Ufer rechts: Bauer Ziege c) Betten Sie den Ausgabecode aus Teil b) in eine do/while-schleife ein: bool abbruch = f a l s e ; do{.. // Code zur Ausgabe der a k t u e l l e n S i t u a t i o n } while (! abbruch ) ; return 0 ; Hinter der Ausgabe soll nun Code für die auszuführenden Aktionen eingefügt werden. Fordern Sie zunächst zur Auswahl einer Aktion auf. Lesen Sie dann ein Zeichen von der Eingabe ein. Die Eingaben K, W und Z stehen dabei für das Übersetzen des Bauern zusammen mit dem Kohlkopf, dem Wolf bzw. der Ziege. Wird B eingegeben, so setzt der Bauer alleine über. Für die Eingabe Q soll das Programm beendet werden. Alle anderen Zeichen sind ungültig. In diesem Fall soll der Benutzer auf seine falsche Eingabe hingewiesen werden und eine neue Gelegenheit bekommen, eine Eingabe zu machen. Nach einer entsprechenden Ausgabe soll die Schleife in der nächsten Iteration fortgesetzt werden. Ähnliches gilt auch, wenn die ausgewählte Aktion nicht möglich ist. Dieses ist immer dann der Fall, wenn sich das ausgewählte Subjekt und der Bauer nicht auf derselben Uferseite befinden.

Verwenden Sie eine switch-case-anweisung, um auf das eingegebene Zeichen zu reagieren. Setzen Sie im Falle der tatsächlichen Aktionen B, K, W und Z zunächst nur eine Statusvariable (Typ integer) auf den entsprechenden Wert Bauer, Kohlkopf, Wolf bzw. Ziege. Im Anschluss kann dann die eigentliche Aktion durchgeführt werden, nämlich durch Aktualisierung der betroffenen ort-einträge. Einschränkung: Verwenden Sie keine return- oder break-anweisung um das Programm bei Eingabe von Q zu beenden. (3) d) Ergänzen Sie eine Überprüfung auf Erfolg oder Nichterfolg einer erreichten Situation. Für den Fall, dass sich Wolf und Ziege oder Ziege und Kohlkopf allein auf einer Uferseite befinden, soll das Programm mit einer entsprechenden Meldung beendet werden. Ebenso soll im Erfolgsfall, also wenn alle das andere Ufer erreicht haben, das Programm mit einer Erfolgsmeldung beendet werden. Einschränkung: Verwenden Sie keine return- oder break-anweisung um das Programm bei Erfolg oder Misserfolg zu beenden. e) Geben Sie eine erfolgreiche Strategie in Form einer Eingabefolge an: