Brüche in c++ (Addieren, Subtrahieren, Multiplizieren, Dividieren und Rest berechnen)
-
wenn man alles beachtet bei Brüchen dann ist da nix mit schnell!
Übrigens, was soll den der Rest bei Brüchen sein?
-
evtl ganzzahl - ganzzahl = ganzzahl + bruch
würde die suchfunktion funktionieren, würdest du eine ganz fertige c++ klasse mit brüchen gehen. wenn du also zu faul bist, das selbst zu machen, hilft nur warten bis die suchfunkton wieder up ist oder das vorum durchsuchen :p
-
Ja das weiß ich auch nicht genau, Überprüfung auf Rest.
Ich kenn ich in C++ nicht so aus, bin erst in den Kurs eingestiegen.
-
Deine Hausaufgaben werde ich nicht machen.
Ich kann dir aber ein paar Tipps gehen, wie man Brüche addiert etc.a c a * d + b * c - + - = ------------- b d b * d a c a * d - b * c - - - = ------------- b d b * d a c a * c - * - = ------------- b d b * d a c a * d - / - = ------------- b d b * c
-
Danke Chrissi
Ok ich werd mich nochmal dran machen, hatte schon angefangen, aba bin da nicht mehr weitergekommen.
Finde das ne ganz schön happige Aufgabe, wenn man gerade erst mit C++ begonnen hat und sich selbst nicht wirklich auskennt.Dann werd ich einfach ne Eingabe Funktion für Zahlen machen.
-
hätte da jetzt noch bezügl eingabe eine Frage:
die Striche wie bei den Brüchen kann ich das einfach so hinschreiben wie du oben in deinen Code das gemacht hast?
-
Redsky schrieb:
hätte da jetzt noch bezügl eingabe eine Frage:
die Striche wie bei den Brüchen kann ich das einfach so hinschreiben wie du oben in deinen Code das gemacht hast?was meinst du denn?
Hier findest du außerdem ein fertiges Bruchprogramm: hier
P.S.: Benutze öfters google.de.
-
hab google scho auch benutzt so blöd war i au ned
aba die progs waren zu kompliziert, bzw für mich als neuanfänger zu hoch, hab de ned kapiert bzw teilweise sind die brüche auch ned gegangen öhm programme
-
Machst du das freiwillig oder musst du das (für Schule) machen?
Ich würde dir dann den Tipp geben, erst mal C++ zu lernen, bevor du es mit Brüchen versuchst.
-
dasn studium auf freiwilliger basis (kolleg, was i grad begonnen hababa auftrag war das bruchrechnen jep
nur davon kann i mir nix kaufen wenn i c++ ned kann
auf der andren seite muss i das machen bis DI sonst kann i glei kurriquulum machen
-
Ich weiß nicht, ob du das bis Dienstag schaffst.
Auf jeden Fall solltest du dir anschauen, wie man Operatoren überladet.
Und natürlich ist OOP auch wichtig.
Ich denke, du musst auch immer den Quellcode erklären können.
Fangst du neu an oder hast du schon Erfahrungen mit C++?
Wenn dir hier einer einen Quellcode sendet, hilft dir das ja auch nicht.
Du musst verstanden haben, wie das funktioniert.
-
also i hab mir mal einiges überlegt und sachen zusammengesucht und bin nun auf folgendes ergebnis gekommen
leider wärs mir lieba was einfacheres zum kürzen zu finden, vielleicht könnt ihr mir nu helfen? ;#include <iostream> #include <cmath> using namespace std; class bruch { private: int z; int n; int z1; int n1; int k; int k1; public: bruch( int pz, int pn) { z=pz; n=pn; } void ausgeben(); void ausgeben1(); void addieren(bruch v); void subtrahieren(bruch v); void multiplizieren(bruch v); void division(bruch v); void eingeben(); void eingeben1(); }; void bruch::ausgeben() { cout << z <<"/" << n<<endl; } void bruch::ausgeben1() { cout << z1 <<"/" << n1 << " Das ergibt gekuerzt: "<<k<<","<<k1<<endl; } void bruch::addieren(bruch v) { z1= z*v.n + n*v.z; n1= n*v.n; k=z1/n1; k1=z1%n1; k1=k1*1000/n1; } void bruch::subtrahieren(bruch v) { z1= z*v.n - n*v.z; n1= n*v.n; k=z1/n1; k1=z1%n1; k1=k1*1000/n1; } void bruch::multiplizieren(bruch v) { z1= z*v.z; n1= n*v.n; k=z1/n1; k1=z1%n1; k1=k1*1000/n1; } void bruch::division(bruch v) { z1= z*v.n; n1= n*v.z; k=z1/n1; k1=z1%n1; k1=k1*1000/n1; } void bruch::eingeben() { cout << "Bitte geben Sie den Zaehler fuer den 1sten Bruch ein" <<endl; cin >>z; do{ cout << "Bitte geben Sie den Nenner fuer den 1sten Bruch ein" <<endl; cin >>n; } while ( n==0); } void bruch::eingeben1() { cout << "Bitte geben Sie den Zaehler fuer den 2ten Bruch ein" <<endl; cin >>z; do{ cout << "Bitte geben Sie den Nenner fuer den 2ten Bruch ein" <<endl; cin >>n; } while (n==0); } int main() { bruch v1(0,0), v2(0,0); v1.eingeben(); v2.eingeben1(); cout << "\nErster Bruch: "; v1.ausgeben(); cout << "Zweiter Bruch: "; v2.ausgeben(); v1.addieren(v2); cout << "\nNach Addition: "; v1.ausgeben1(); v1.subtrahieren(v2); cout << "\nNach Subtraktion: "; v1.ausgeben1(); v1.multiplizieren(v2); cout << "\nNach Multiplizieren: "; v1.ausgeben1(); v1.division(v2); cout << "\nNach Division: "; v1.ausgeben1(); cout <<endl<<endl; return 0; }
-
noch ne frage: wenn ich unterschiedliche nenner habe? muss i die dann mittels ggt oda kgn auf gemeinsamen nenner bringen? um das zu berechnen oda ist das hinflüssig.
vielleicht hat wer ne einfache lösung oda weiß was zu verbessern an dem source
-
Wenn du unterschiedlich Nenner hast dann erweitere beide Brüche mit dem jeweils anderen Nenner und kürze dann via gcd (oder ggT).
-
ok, aba wie mach ich das?
gct?
-
Du kannst noch viel verbessern.
Unter anderem kannst du versuchen, die Operatoren überladen.
Beispiel:// Operator + bruch operator+(const bruch& a, const bruch& b) { bruch temp; temp.n = a.n * b.n; temp.z = a.z * b.n + b.z * a.n; temp.reduce(); return temp; } // Und in Klasse class bruch { // ... public: friend bruch operator+(const bruch&, const bruch&); // ... }; // Kürzen void bruch::reduce() { int temp; if (n > z) temp = n; else temp = z; for (int i = temp; i > 1; i--) { if ((n % i == 0) && (z % i == 0)) { n /= i; z /= i; } } } // Klasse erweitern.. class bruch { // ... public: void reduce(); // ... };
Ist aber alles ungetestet.
-
für was wäre denn das erweitern hier gut?
-
Redsky schrieb:
für was wäre denn das erweitern hier gut?
Meinst du das Kommentar?
Das soll nur ausdrücken, dass in der Klasse die Deklaration der Methode ergänzt werden muss.
-
ChrissiB schrieb:
Du kannst noch viel verbessern.
Unter anderem kannst du versuchen, die Operatoren überladen.
Beispiel:// Operator + bruch operator+(const bruch& a, const bruch& b) { bruch temp; temp.n = a.n * b.n; temp.z = a.z * b.n + b.z * a.n; temp.reduce(); return temp; } // Und in Klasse class bruch { // ... public: friend bruch operator+(const bruch&, const bruch&); // ... }; // Kürzen void bruch::reduce() { int temp; if (n > z) temp = n; else temp = z; for (int i = temp; i > 1; i--) { if ((n % i == 0) && (z % i == 0)) { n /= i; z /= i; } } } // Klasse erweitern.. class bruch { // ... public: void reduce(); // ... };
Ist aber alles ungetestet.
gehört hier das obige vom Operator und kürzen zusammen? muss i beides eingeben dann in den source?, weil irgendwie funzt das ned
-
Redsky schrieb:
gehört hier das obige vom Operator und kürzen zusammen? muss i beides eingeben dann in den source?, weil irgendwie funzt das ned
Kannst du mal bitte deine Compilerfehlermeldung sagen?
Ja, das gehört alles zusammen.
Hier nochmal eine kleines Bruchprogramm, das ich grad gemacht habe:
(mit g++ compiliert es)// Datei: bruch.h #include <iostream> using namespace std; // Klasse bruch class bruch { private: long z, n; // Zähler und Nenner // weitere Variablen public: bruch(int pz = 0, int pn = 1) // Minimal-Konstruktor { z = pz; n = pn; } friend bruch operator+(const bruch&, const bruch&); // Operator + friend ostream& operator<<(ostream& os, const bruch&); // Operator << void reduce(); // Kuerzen // weitere Methoden };
// Datei: bruch.cpp #include "bruch.h" // Methode zum Kürzen void bruch::reduce() { int temp; if (n > z) temp = n; else temp = z; for (int i = temp; i > 1; i--) { if ((n % i == 0) && (z % i == 0)) { n /= i; z /= i; } } } // Operator + zum Addieren von 2 Brüchen bruch operator+(const bruch& a, const bruch& b) { bruch temp; temp.n = a.n * b.n; temp.z = a.z * b.n + b.z * a.n; temp.reduce(); return temp; } // Zur Ausgabe ostream& operator<<(ostream& os, const bruch& a) { os << a.z << "/" << a.n; return os; }
// Datei: main.cpp #include "bruch.h" int main() { // Zwei Brüche bruch a(2, 4), b(3, 6); // Ausgeben cout << "a + b = " << (a + b) << endl; // Bei Subtraktion nun: // cout << "a - b = " << (a - b) << endl; }
EDIT:
Du musst jetzt noch die anderen Operatoren (Subtraktion, Division und Multiplikation) und die Eingabe hinzufügen oder was du sonst noch brauchst.