C++ Taschenrechner für Brüche, auslagern

Kesk

Ensign
Registriert
Okt. 2011
Beiträge
182
Hey,

ich bräuchte mal Hilfe beim Auslagern und erstellen von Funktionen und war hab ich das hier

#include <iostream>
using namespace std;
struct Bruch {
int a; //Zaehler
int b; //Nenner
};
int main () {
int x;
struct Bruch op1 = {0,1}, op2 = {0,1};
struct Bruch Erg_n;
cout << "Operation eingeben +,-,*,/" << endl;
cin >> x;
cout << "Zeahler und Nenner eingeben:" << endl;
cin >> op1.a >> op1.b;
cout << "Zeahler und Nenner eingeben:" << endl;
cin >> op2.a >> op2.b;
// Addition
if ( x == 1) {
Erg_n.b = op1.b*op2.b;
Erg_n.a = op1.a*op2.b + op2.a*op1.b;
}
// Subtraktion
if ( x == 2) {
Erg_n.b = op1.b*op2.b;
Erg_n.a = op1.a*op2.b - op2.a*op1.b;
}
// Multiplikation
if ( x == 3) {
Erg_n.b = op1.b*op2.b;
Erg_n.a = op1.a*op2.a;
}
// Division
if ( x == 4) {
Erg_n.b = op1.b*op2.a;
Erg_n.a = op1.a*op2.b;
}
int r;
int z=Erg_n.a;
int q=Erg_n.b;
do {
r = z%q;
z = q;
q = r;
} while (q !=0);
cout << Erg_n.a/z << " / " << Erg_n.b/z << endl;
return (0);
}

Normaler Taschenrechner mit kürzen usw.

Nun hab ich folgende Aufgabenstgellung

Arbeiten Sie Ihre Lösung so um, dass das Kürzen und die Grundrechenarten in Funktionen ausgelagert werden. Schreiben Sie die Funktionsdefinitionen in eine separate Implementierungsdatei (z.B. bruch_fun.cpp) und die unktionsprototypen in eine separate Headerdatei (z.B. bruch_fun.h)!
Verwenden Sie folgende Funktionssignaturen:
 bruch bplus(bruch x, bruch y)
 bruch bminus(bruch x, bruch y)
 bruch bmal(bruch x, bruch y)
 bruch bdurch(bruch x, bruch y)
 void bkuerzen (bruch &x)

Nur versteh ich ned was ich da machen muss. Kann mir da jemand helfen?
 
Du hast aktuell eine große Main-Methode...du sollst jetzt einfach eine neue cpp-Datei anlegen + Header. Im Header definierst du die neuen Funktionen wie in der Aufgabenstellung angegeben und in der cpp implementierst du sie dann...

Am Ende hast du dann in deiner neuen cpp-Datei mehrere verschiedene (static) Methoden die dann die Grundrechenarten bzw. kürzen bereitstellen. Diese kannst du dann z.B. über deine bestehende main benutzen....

Ich denke mehr sollst du nicht machen...

Gruß Zoldyck
 
Ich brauch 4 Dateien
 bruch_fun.cpp: Funktionsimplementierungen (also: ausprogrammierte Funktionsrümpfe)
 bruch_fun.h: Funktionsprototypen
 taschenrechner.cpp ruft Taschenrechner – Anwendung, ruft Funktionen aus bruch_fun.cpp auf
 test_bruch_fun.cpp Testanwendung für Ihre Funktionen

den obengenannten Quelltext, den ich geschrieben hab muss ich dann irgendwie reinsetzen und den Header vorgeben und das verknüpfen, aber ich versteh nicht im Ansatz wie ich das machen kann.
Sorry das ich so blöd frag, aber ich habs mir 100x durchgelesen und versucht irgendeinen Ansatz zu finden, aber ich komm da einfach nicht weiter
 
Schritt 1: Die 3 neuen Dateien anlegen.
Schritt 2: Den vorhandenen Code auf diese Dateien verteilen.

Im Prinzip ist der ganze Code vorgegeben, du müsstest dich nur ein bisschen mit Methoden in C++ beschäftigen und wie diese Methoden aus anderen Dateien aufruft.
 
Kennst du dich mit den Grundlagen überhaupt aus?
Wir könnten dir hier jetzt natürlich ein fertiges Ergebnis liefern. Aber das ist ja nicht Sinn und Zweck, dabei hättest du ja nicht viel gelernt.

Hier wäre was zum einlesen über Funktionen ("Methoden"). Dies müsstest du dann nur noch auf deine Aufgabenstellung anpassen und in verschiedene Dateien auslagern, die du dann wieder einbinden musst (dazu findest du hier auch etwas):

http://ladedu.com/cpp/kapitel4
 
Ich hab jetzt Ewigkeiten rumprobiert, aber ich komme einfach nicht weiter bzw. ich verstehs einfach nicht.
kann mir jemand bitte vllt nen Lösungansatz odersowas in der Richtung schreiben
 
Du solltest dir halt mal anschauen, wie das mit dem #include funktioniert.

Und

struct Bruch op1 = {0,1}, op2 = {0,1};

würde ich mal ändern, das sind sehr komische Werte.
 
Hab jetzt die 2 Codes

Code:
bruch kuerzen (bruch x)
{
int a, b, r;
bruch ergebnis =x;
if (!x.z){
ergebnis.n = 1;
return (ergebnis);
}
// Kürzen ... return (ergebnis);
int r;
int z=Erg_n.a;
int q=Erg_n.b;

do {
	r = z%q;
	z = q;
	q = r;
} while (q !=0);

cout << Erg_n.a/z << " / " << Erg_n.b/z << endl;

return (ergebnis);
}

Code:
#include <iostream>
using namespace std;
struct Bruch {
int a; //Zaehler
int b; //Nenner

};
int main () {
int x;
struct Bruch op1 = {0,1}, op2 = {0,1};
struct Bruch Erg_n;

cout << "Operation eingeben +,-,*,/" << endl;
cin >> x;

cout << "Zeahler und Nenner eingeben:" << endl;
cin >> op1.a >> op1.b;

cout << "Zeahler und Nenner eingeben:" << endl;
cin >> op2.a >> op2.b;

// Addition
if ( x == 1) {
Erg_n.b = op1.b*op2.b;
Erg_n.a = op1.a*op2.b + op2.a*op1.b;
}

// Subtraktion
if ( x == 2) {
Erg_n.b = op1.b*op2.b;
Erg_n.a = op1.a*op2.b - op2.a*op1.b;
}

// Multiplikation
if ( x == 3) {
Erg_n.b = op1.b*op2.b;
Erg_n.a = op1.a*op2.a;
}

// Division
if ( x == 4) {
Erg_n.b = op1.b*op2.a;
Erg_n.a = op1.a*op2.b;

int r;
int z=Erg_n.a;
int q=Erg_n.b;

do {
	r = z%q;
	z = q;
	q = r;
} while (q !=0);

cout << Erg_n.a/z << " / " << Erg_n.b/z << endl;
}
return (0);
}

Wenn ich beide mi g++ -Wall 1.cpp 2.cpp -o 3.exe compile kommt immer der Fehler
Zeile 1:1: Fehler: >>bruch<< bezeichnet keinen typen
Kann mie jemand sagen an wases liegt?
 
C++ unterscheidet zwischen Groß- und Kleinschreibung. "bruch" ist etwas ganz anderes als "Bruch".
 

Ähnliche Themen

W
  • Gesperrt
  • Frage Frage
2 3
Antworten
45
Aufrufe
3.961
Antworten
9
Aufrufe
1.845
Zurück
Oben