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

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

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 2016/2017 WIng Bachelor 4. Aufgabenblatt Modularisierung, Funktionen, Unterprogramme

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 EIT Bachelor 5. Aufgabenblatt Datenstruktur, Dateieingabe und -ausgabe

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

Hochschule Darmstadt Informatik-Praktikum SS 2018 EIT Bachelor 4. Aufgabenblatt Dateiverarbeitung, Funktionen, Records

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

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

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

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

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

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

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

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

Einführung in die Programmierung Wintersemester 2008/09

Tobias Wolf Seite 1 von 19

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

Grundlagen der Informatik 4. Kontrollstrukturen I

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

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

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

Klausur Informatik WS 2012/13

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

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.

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

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

Pseudo-Programmiersprache

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

Ziel: Das Arbeiten mit Zeigern, Strukturen und dynamischer Speicherverwaltung

5. Elementare Befehle und Struktogramme

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

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

Klausur: Informatik, am 13. August 2015 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Klausur in Programmieren

Grundlagen der Informatik 6. Arrays I

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

Grundlagen der Informatik 5. Kontrollstrukturen II

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

Informatik I (D-ITET)

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

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

Abschlußtest Programmieren 30. Juni 2017 Name: Punkte von 32: Gruppe: Haase-Di Haase-Do Stanek-Di Stanek-Do

Name: Klausur Informatik III WS 2003/04

Programmieren in C/C++ und MATLAB

Übungen zur Vorlesung EidP (WS 2015/16) Blatt 6

Ein kleiner Blick auf die generische Programmierung

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

Informatik für Elektrotechnik und Informationstechnik

einlesen n > 0? Ausgabe Negative Zahl

Übungen zur Vorlesung EINI (WS 2010) Blatt 11

Themen. Formatierte und unformatierte Eingabe Bedingungsoperator Namespaces Kommandozeilenargumente

Klausur im WS 2003/04 : Informatik III

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

Klausur in Programmieren

Klausur Informatik I WS 2006/2007

Klausur Programmieren 1 SS 2017

Angewandte Mathematik und Programmierung

Programmieren/Algorithmen und Datenstrukturen 1

Algorithmen und Datenstrukturen

Kontrollstrukturen -- Schleifen und Wiederholungen

Wissenschaftliches Rechnen

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik

Polymorphismus 179. Function.h. #include <string>

Programmieren in C/C++ und MATLAB

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

Polymorphismus 44. Function.hpp. #include <string>

7. Grundlagen von Funktionen

4 Schleifen und Dateien

Implementation VL3 Gruppe A

Objektorientierte Programmierung mit C++ SS 2007

Praktikumstermin B-07: make & Makefiles

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

Kap 7. Funktionen und Arrays

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

Gran Turismo Cars - WS 11/12

Einführung in die Programmierung

if ( Logischer Operator ) { } else { Anweisungen false

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

Auswahlen (Selektionen)

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

Abend 4 Übung : Erweitern von Klassen durch Vererbung

Praktikum Ingenieurinformatik. Termin 4. Funktionen, numerische Integration

Prüfung aus PROGRAMMIEREN (2) (C++) (WS 2002/03)

Programmierung und Angewandte Mathematik

Übung Notendarstellung

Hochschule München, FK 03 FA WS 2012/13. Ingenieurinformatik

Schleifen in C/C++/Java

Programmieren II Abstrakte Klassen / Virtuelle Methoden. Programmieren II Abstrakte Klassen / Virtuelle Methoden

Ein- und Ausgabe (I/O)

Funktionales C++ zum Ersten

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11

Klausur in Programmieren

Grundlagen der Informatik

Grundlegende Programmstrukturen sind Sequenzen, Schleifen und Entscheidungen.

Transkript:

Ziele sind das Arbeiten mit Funktionen (Modularisierung, Parameterübergabe), sowie - Aufgabe 3: Diese Aufgabe baut auf der 2. Aufgabe auf und erweitert diese. Die Funktionalität der 2. Aufgabe wird also weiterhin erwartet und wird überprüft werden! Das Programm ist so zu erweitern bzw. zu ändern, dass die vom Anwender gewählten Menüpunkte als Funktionsaufrufe implementiert werden. Zusätzlich ist ein weiterer Menüpunkt einzufügen und zu implementieren (siehe weiter unten). Nachdem die ausgewählte Aktion durchgeführt wurde, wird die Auswahl erneut angeboten. Dies wird solange wiederholt, bis der Anwender entscheidet, dass das Programm beendet werden soll. Folgende Funktionen sollen zur Auswahl stehen und mittels switch case realisiert werden: a. Russische Bauernmultiplikation b. Kreis-Kugel-Berechnung c. Schaltjahrberechnung d. Lösung einer quadratischen Gleichung e. Nachbarn in einem Feld tauschen (NEU!) x. Programm beenden Die Auswahl (= das Menü) soll ebenfalls als Funktion implementiert werden! Hinweise zur Durchführung: Schritt 1: Beginnen Sie mit einem neuen Projekt (Achtung: Hinzufügen zur bestehenden Projektmappe) und fügen Sie in eine leere cpp-datei den Quelltext von Aufgabe 2 ein (Copy&Paste = Kopieren&Einfügen). Das wird später die Datei mit dem Hauptprogramm (beachten Sie dies bei der Wahl des Dateinamens) Übersetzen und testen Sie das Projekt, erst dann gehen Sie zu Schritt 2 über. Dokumentieren Sie diesen (und alle weiteren Tests) in einem handschriftlichen Protokoll auf Papier. Schritt 2: Fügen Sie dem Projekt eine (leere) Header-Datei hinzu (Vorschlag für den Namen: aufg3_funktionen.h oder aufgabe3.h). Kopieren Sie in diese Datei den entsprechenden Quelltext vom Ende des Aufgabenblattes (Copy&Paste). Beachten Sie bitte: Die Header-Datei enthält die Schnittstellendefinitionen für alle Projektbestandteile und darf nicht geändert werden! Ersetzen Sie dann die #include-anweisung(en) durch #include "ihr gewählter Dateiname.h". Übersetzen und testen Sie das Projekt erneut. (Protokollieren nicht vergessen!) Schritt 3: Fügen Sie dem Projekt eine weitere cpp-datei (der Name sollte sinnvollerweise genauso lauten wie der der Header-Datei, nur die Erweiterung ändert sich zu cpp; d.h. aufg3_funktionen.cpp). Beginnen Sie dann damit, die einzelnen Menüpunkte nach und nach in Funktionen umzuändern. Achten Sie auf die Schnittstellendefinition in der Header-Datei und die Aufgabenverteilung zwischen Aufrufer (main()-funktion) und Unterprogramm. Seite 1 von 5

Die Implementierung der Funktion erfolgt dabei in der neuen Datei, gleichzeitig verschwindet der entsprechende Quellcode aus dem Hauptprogramm und wird durch den passenden Funktionsaufruf ersetzt. Testen und protokollieren Sie nach jeder geänderten Funktion, es müssen jederzeit alle Menüpunkte funktionieren! Schritt 4: Fügen Sie den neuen Menüpunkt Nachbarn in einem Feld tauschen in das Menü ein und implementieren Sie zunächst eine leere Funktion, die lediglich den Text Nachbarn tauschen ausgibt. Wenn das funktioniert, implementieren Sie folgende Aufgabenstellung: Die Funktion tauschenachbarn füllt ein Array mit einzugebenden Werten bis zu einer maximalen Anzahl. Danach wird das gefüllte Array ausgegeben. Im nächsten Schritt werden die Inhalte der beiden benachbarten Arrayelemente getauscht und das geänderte Array ausgegeben. Die Ausgabe ist so zu gestalten, dass die Vertauschung gut zu erkennen ist. Die Ausgabe des gefüllten Feldes (nach der Vertauschung erfolgt im Hauptprogramm. Beispiel: vorher 17-8 12 4-100 22 815-5 17 4-9 0 nachher -8 17 4 12 22-100 -5 815 4 17 0-9 Lösungshinweise: die maximale Anzahl der Arrayelemente wird als Konstante im Hauptprogramm festgelegt und als Parameter übergeben, ebenso wie das (leere) Array. Als Ergebnis gibt die Funktion die Anzahl der tatsächlich belegten Elemente zurück. Sonstiges: Im Anhang findet sich auch das Fragment eines Hauptprogramms, das Ihnen als Orientierung für die Umgestaltung ihres Programms dienen kann. Insbesondere können Sie dort die eine oder andere Idee für den Einsatz der Funktionen finden. Die Header-Datei muss in der vorgegebenen Form verwendet werden, die Schnittstellen sind entsprechend zu implementieren. Das anzufertigende Protokoll ist Bestandteil der Aufgabenstellung Vorbereitung: Neben den obligatorischen Testwerten ist ein Entwurf der Funktion Nachbarn tauschen zu erstellen (Struktogramm oder Flußdiagramm) und zur Übung mitzubringen. Seite 2 von 5

Bitte beachten Sie, dass die Header-Datei zwingend zu benutzen ist. Diese Datei darf nicht geändert werden! // Headerdatei zu Aufgabe 3 Wintersemster2018/2019 #include <iostream> #include <cmath> #include <iomanip> using namespace std; // Funktion zum Anzeigen des Auswahlmenues char menu(); // Eingabe in die Funktion: keine // Rückgabe der Funktion: gewählter Menüpunkt // Besonderheit: Diese Funktion darf zu int menue(); // geändert werden, wenn die Auswahl bisher numerisch erfolgte //Funktion zur Bauernmultiplikation void bauernmultiplikation(int a, int b); //Eingabe an die Funktion: die beiden Faktoren //Rückgabe aus der Funktion: keine //Besonderheiten: Berechnung der Werte und Ausgabe komplett in der Funktion //Funktion zur Berechnung von Kreis und Kugel void kreis_kugel(double radius); //Eingabe in die Funktion: Radius //Rückgabe der Funktion: keine //Besonderheiten: Berechnung der Werte und Ausgabe komplett in der Funktion //Funktion zur Überprüfung auf Schaltjahr bool istschaltjahr(int jahr); //Eingabe: das zu überprüfende Jahr //Rückgabe: true, wenn es sich um ein Schaltjahr handelt, sonst false //Funktion zur Lösung der p-q-formel double quad_gl(double p, double q, double& x1, double& x2); //Eingabe: die beiden Koeffizienten p und q //Rückgabe: Diskriminante als Funktionswert, x1 und x2 über Parameterliste //Funktion, um benachbarte Elemente in einem Feld zu tauschen int nachbarn_tauschen(int daten[], const int MAXANZAHL); //Eingabe: das leere Array, Max. Größe des Arrays //Rückgabe: die Zahl der tatsächlich eingegebenen Werte //Besonderheiten: Die Funktion muss auch mit einer ungeraden Anzahl von // Elementen zurecht kommen //Funktion zum Ausgeben eines Feldes void feldausgeben(int daten[], int anz); //Eingabe: Das Feld, die Zahl der belegten Elemente //Rückgabe: keine //Besonderheiten: Diese Funktion muss nicht verwendet werden Seite 3 von 5

Beispiel eines Programmrahmens (Menüsteuerung): ACHTUNG!! Das ist ein Fragment, welches nicht lauffähig ist! // Aufgabe 3 - Wintersemester 2018-2019 // Autoren: Jörg Schake, Dirk Seeber // Datum: 9. November 2018 #include "aufg3_funktionen.h" int main() // Konstantendeklaration const double PI = 4 * atan( 1.0 ); // Variablendeklaration char menuwahl = 'x'; bool programmende = false; // weitere Variablen // case 'a' int a, b; // case 'b' double radius; // case 'c' int jahr; // case 'd' double diskriminante, p, q, x1, x2; // case 'e' const int MAXANZAHL = 10; // Maximale Größe des Arrays int anzahl; // die tatsächlich belegte Anzahl im Array // d.h. anzahl <= MAXANZAHL int werte[maxanzahl]; // das Array selbst do menuwahl = menu(); switch (menuwahl) case 'a': // Ihre Implementierung Russische Bauernmultiplikation cout << "Russische Bauernmultiplikation" << endl << endl; cout << "In jedem Rechenschritt wird..." << endl; cout << " der erste Faktor durch 2 dividiert." << endl; cout << " der zweite Faktor verdoppelt" << endl << endl; cout << "Geben Sie den ersten Faktor ein: "; cin >> a; cout << "Geben Sie den zweiten Faktor ein: "; cin >> b; bauernmultiplikation(a, b); Seite 4 von 5

} case 'b': // Ihre Implementierung Kreis-Kugel-Berechnung cout << "Bitte Radius eingeben: "; cin >> radius; kreis_kugel( radius ); case 'c': // Ihre Implementierung Schaltjahrberechnung cout << "Gib eine Jahreszahl ein: "; cin >> jahr; //Ausgabe und Funktionsaufruf einfügen case 'd': // Ihre Implementierung Loesung einer quadratischen Gleichung cout << "Gib p ein: "; cin >> p; cout << "Gib q ein: "; cin >> q; //Ausgabe und Funktionsaufruf einfügen case 'e': // Ihre Implementierung Nachbarn in einem Feld tauschen // Funktionsaufruf einfügen // Feldausgabe einfügen case 'x': // Programm beenden programmende = true; default: // Warnhinweis cout << "Der eingegebene Wert " << menuwahl; cout << " ist nicht gueltig!" << endl; } // endswitch } while ( false == programmende ); system("pause"); return 0; Seite 5 von 5