Struct-Funktion und die Darstellung von Brüchen
-
Hallo zusammen,
ich bin ganz neu hier und hoffe dass mir vielleicht jemand helfen kann, seit kurzem habe ich angefangen zu programmieren, deshalb bitte ich um Verständnis wenn ich blöde Fragen stellen werde.
Ich hab folgendes Problem und zwar muss ich 2 Brüche darstellen die in der folgende weise aussehen sollten z.b. "2/3" und "4/5", doch davor muss ich mit eine Funktion die Brüche formatieren d.h. wenn der Benutzer "2/-3" eingibt muss die Funktion diesen Bruch in "-2/3" umwandeln oder wenn der Benutzer "-2/-3" eingibt muss es zu "2/3" umgewandelt werden. Soweit so gut, ich hab angefangen zu programmieren und es hat alles gut geklappt, doch ich hab es zu kompliziert gemacht die Funktion sollte heißen "struct Fraction {int z; int n; };" doch bei mir sieht sie so aus:
"struct Fraction {int z1; int n1; int z2; int n2; };"
ich hab für jeweils ein Bruch ein Zähler gemacht und ein Nenner, dies ist aber falsch. Es müssen nur zwei Elemente in der Funktion struct sein mit denen ich zurecht kommen soll also nur EIN NENNER und nur EIN ZÄHLER für die zwei Brüche.
So sieht mein Code aus:
struct fraction { int z1; int n1; int z2; int n2; }; int main () { //Variablen deffeniert fraction bruch; bruch.z1; bruch.n1; bruch.z2; bruch.n2; // einlesen des ersten Bruchs cout << "Zaehler und Nenner eingeben fuer Bruch1:"; cin >>bruch.z1 >> bruch.n1; // einlesen des zweiten Bruchs cout << "Zaehler und Nenner eingeben fuer Bruch2:"; cin >>bruch.z2 >> bruch.n2;
Hier ist die Formatierung für das erste Bruch:
Zähler:
int fraction_format1_z (int z1, int n1 ) { // Bedingung wenn im Nenner Vorzeichen ein minus sein soll, oder wenn beide Vorzeichen minus sind. if (((z1>0) && (n1<0)) || ((z1<0) && (n1<0))) { z1 = z1 * -1; n1 = n1 * -1; } return z1; }
Nenner:
int fraction_format1_n (int z1, int n1 ) { // Bedingung wenn Nenner gleich Null ist, dann if (n1==0){ error ( " FEHLER: der Nenner darf nicht Null sein" ); } if (((z1>0) && (n1<0)) || ((z1<0) && (n1<0))) { z1 = z1 * -1; n1 = n1 * -1; } return n1; }
genau das gleiche habe ich auch für das zweite Bruch gemacht mit z2 und n2.
und am Ende habe ich es so ausgegeben:
cout << fraction_format1_z << "/" << fraction_format1_n << endl; cout << fraction_format2_z << "/" << fraction_format2_n << endl;
was ich jetzt brauche ist es nur eine Funktione die die Brüche formatiert und die ich dann ausgeben kann, und nicht so wie ich dass gemacht habe für Zähler und Nenner. Ich hoffe ich konnte erklären wo mein Problem liegt.
Danke
-
Hab jetzt nicht alles gelesen aber was soll dieses Konstrukt?
struct fraction { int z1; int n1; int z2; int n2; };
Mach doch so was:
class Bruch{ private: int zaehler; int nenner; public: Bruch(int nenner_, int zaehler):nenner(nenner_),zaehler(zaehler_){} //Konstruktor
Lies dir mal was über Klassen /Strukturen durch (bezüglich Konstruktor....)
-
Hallo, danke schon mal für dein Antwort, was ich aber vergessen hab zu erwähnen ich darf erst mal keine Klassen benutzen dies sollte schon mit struct Funktion gemacht werden. Das hängt damit zusammen dass ich die Funktion kennen lernen soll.
-
Öhm...?
struct fraction { int z; int n; void formatieren() { if(n<0) { z*=-1; } } }; int main () { //Variablen deffeniert fraction bruch1; fraction bruch2; // einlesen des ersten Bruchs cout << "Zaehler und Nenner eingeben fuer Bruch1:"; cin >>bruch1.z >> bruch2.n; // einlesen des zweiten Bruchs cout << "Zaehler und Nenner eingeben fuer Bruch2:"; cin >>bruch2.z >> bruch2.n; bruch1.formatieren(); bruch2.formatieren();
-
die Variablen habe ich jetzt richtig definiert wie du es oben gemacht hast:
struct fraction { int z; int n;}; int main () { fraction bruch1; fraction bruch2; //Variablen deffeniert // einlesen des ersten Bruchs cout << "Zaehler und Nenner eingeben fuer Bruch1:"; cin >>bruch1.z >> bruch1.n; // einlesen des zweiten Bruchs cout << "Zaehler und Nenner eingeben fuer Bruch2:"; cin >>bruch2.z >> bruch2.n; fraction_format (bruch1.z, bruch1.n); cout << fraction_format (bruch1.z, bruch1.n) << "/" << fraction_format (bruch1.z, bruch1.n) << endl;
ich hab das jetzt in mein main Funktion und unten ist die Funktion für Formatierung
int fraction_format (int z, int n) { z = z < 0 ? -z : z; n = n < 0 ? -n : n; return ; }
in so etwa soll es aussehen also die Formatierung der Brüche, ich hab jetzt die Bedingungoperatoren für Nenner und Zähler wie soll ich aber beide ausgeben also den Zähler und den Nenner ????
ich verstehe es irgendwie nicht
-
Wenn du Operatorüberladung kennst kannst du dir so was bauen(kennst du aber wahrscheinlich nicht).
Dann wirst du wahrscheinlich so was ausgeben müssen(2/3+6/5=28/15) oder du baust dir ein array, das so was ausgeben kann2 6 28 - + - = -- 3 5 15
gruß
syntax
-
cobb schrieb:
int fraction_format (int z, int n) { z = z < 0 ? -z : z; n = n < 0 ? -n : n; return ; }
Das kann doch nicht richtig sein?! Das macht aus -2/3 --> 2/3 und aus 2/-3 ebenfalls ... müsste das nicht so aussehen:
int fraction_format (int z, int n) { if(n < 0) { z = -z; n = -n; } return ; }
-
Hallo Belli ja da habe ich was übersehen, du hast vollkommen recht