Taschenrechner für Brüche in 3 separaten Dateien
-
krümelkacker schrieb:
#ifndef BRUCH_HPP_INCLUDED #define BRUCH_HPP_INCLUDED struct bruch { long zaehler, nenner; bruch(long z=0) // Default- und Konvertierungs-Konstruktor : zaehler(z), nenner(1) {} bruch(long z, long n) : zaehler(z), nenner(n) {} }; bruch operator+(bruch links, bruch rechts); bruch operator-(bruch links, bruch rechts); bruch operator*(bruch links, bruch rechts); bruch operator/(bruch links, bruch rechts); bruch kuerzen(bruch b); void print(bruch b); #endifDas mit den bruch operator+ usw ist nicht die Aufgabe, abgesehen davon versteh ich das nochweniger als das was ich gerade mache
Zum Verständnis
Header bruch.h //Datentyp Bruch typedef struct bruch { int n; // Zähler int z; // Nenner } bruch; //Funktionen 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); void print_bruch (const bruch x);Funktionsimplementierungen bruch.cpp MAIN #include <iostream> #include "bruch_fun.h" using namespace std; int main (){ char rechenop=' '; bruch zahl1={0,0}; bruch zahl2={0,0}; bruch erg={1,1}; do { cout << "Geben Sie die gewuenschte Operation ein:" << endl; cout << "+ = Addition" << endl; cout << "- = Subtraktion" << endl; cout << ": = Division" << endl; cout << "* = Multiplikation" << endl; cout << "E = Ende" << endl; cin >> rechenop; if(rechenop=='E') return(0); cout << "Geben Sie bitte Bruch1 ein:" << endl; cin >> zahl1.z >> zahl1.n; cout << "Geben Sie bitte Bruch2 ein:" << endl; cin >> zahl2.z >> zahl2.n; // Addition if(rechenop=='+') { erg.n = zahl1.n*zahl2.n; erg.z = zahl1.z*zahl2.n + zahl2.z*zahl1.n; } // Subtraktion if(rechenop=='-') { erg.n = zahl1.n*zahl2.n; erg.z = zahl1.z*zahl2.n - zahl2.z*zahl1.n; } // Multiplikation if(rechenop=='*') { erg.n = zahl1.n*zahl2.n; erg.z = zahl1.z*zahl2.n; } // Division if (rechenop==':') { erg.n = zahl1.n*zahl2.z; erg.z = zahl1.z*zahl2.n; } //Kuerzen int r; int z=erg.z; int q=erg.n; do { r = z%q; z = q; q = r; } while (q !=0); cout << erg.z/z << " / " << erg.n/z << endl; } while(rechenop!='E'); return (0); }test_bruch.cpp Testanwendung für Ihre Funktionen #include <iostream> #include "bruch_fun.h" using namespace std; int main () { // ein Testprogramm für kuerzen() bruch x={3,4}, y={5,6}, z={1,0}; z = bplus(x, y); if (z.z != 19 || z.n!=12) cout << "Fehler bei bplus" << endl; }Jetzt muss ich "Schreiben Sie danach ein Programm, das diese Tests automatisch durchführt und Sie über eventuell fehlgeschlagene Tests informiert."
Das dann so "g++ –Wall test_bruch.cpp bruch.cpp –o test.exe" compilet wird.Wie kann ich die Test umschreiben. dass er
bruch x={3,4}, y={5,6}, z={1,0}; z = bplus(x, y); if (z.z != 19 || z.n!=12) cout << "Fehler bei bplus" << endl;durchführt und mir Fehler meldet?
-
in der bruch.cpp brauchst du keine main. Dort musst du nur die Funkjtionen definieren, die du in bruch.h deklariert hast.
-
Karold schrieb:
Das mit den bruch operator+ usw ist nicht die Aufgabe
Das ist mir ehrlich gesagt egal. Ich will ja auch nicht deine Hausaufgabe machen. In erster Linie solltest du darin erkennen können, wie man den "Kram" auf mehrere Dateien aufteilt, wie ein Header aussieht und wo der überall inkludiert wird.
Du sollst in bruch.cpp deine Operationen plus, minus, kuerzen, u.s.w. definieren, keine main-Funktion! Deine main-Funktion gehört woanders hin.