Parameter, doch welche wo???



  • andi01 schrieb:

    naja das mit der funktion für cin.fail() is ja nicht schwer:

    bool cin_fail()
    {
        if(cin.fail())
        {
            return false;
        }
        else
        {
            return true;
        }
    }
    

    LOL! Ganz ehrlich, schon lange nicht mehr SO einen scheiß gesehen. Davon abgesehen, dass die Funktion absolut überflüssig ist, ist sie auch noch falsch.



  • andi01 schrieb:

    vom Schreibaufwand her ist da eigentlich kein Unterschied weil er ohnehin nach jeder Eingabe eine if-Bedingung verwenden muss^^

    Doch, es ist schon ein Unterschied. Wenn du cin.fail() schreibst, sparst du dir etliche Zeilen für eine sinnlose Funktion. Das wollte ich eigentlich mit meinem Post sagen. 😉

    Übrigens ist das == true auch unnötig. Boolsche Werte musst du nicht explizit auf true prüfen.

    andi01 schrieb:

    edit: und es war ja das Ziel keine if-Bedingung nach cin zu verwenden^^

    Ja, aber mit deiner Funktion muss man das genauso. Und die If-Abfrage brauchst du für eine bedingte Ausführung. Wenn schon, packt man mehr als nur die Prüfung auf cin.fail() in eine separate Funktion.



  • Janjan schrieb:

    Davon abgesehen, dass die Funktion absolut überflüssig ist

    ich weiß, deswegen schrieb ich ja extra im vorigen post "also kann er ja gleich if(cin.fail()) verwenden" 😉

    Janjan schrieb:

    [...]ist sie auch noch falsch

    upps, da habe ich den falschen Funktionsmamen genommen^^ ich bessere das mal schnell aus;



  • andi01 schrieb:

    ich weiß, deswegen schrieb ich ja extra im vorigen post "also kann er ja gleich if(cin.fail()) verwenden" 😉

    Wenn du es weisst, dann poste doch solchen Code nicht. Das verunsichert Anfänger nur und bringt sie auf dumme Ideen. 😉



  • stimmt.

    Nexus schrieb:

    Wenn schon, packt man mehr als nur die Prüfung auf cin.fail() in eine separate Funktion.

    wie soll man das cin in die Funktion mit reinpacken? da die Funktion ja nicht weiß welchen datentyp der user eingeben will müsste man ja templates verwenden, das wäre ja aber wieder ein Problem für cin.fail() weil das ja bei templates auch nicht weißt welcher datentyp eigegeben werden soll und somit eigentlich immer false liefern müsste oder?

    edit: mein ansatz würde spontan so aussehen:

    template<class T>
    void safe_cin(T Zielvariable)
    {
    do
    {
    	cin>>Zielvariable;
    }
    	while(cin.fail());
    }
    

    bleibt aber das problem dass cin.fail() hier wahrscheinlich immer false liefern würde...

    kann man das dann anders lösen? denn es müsste ja unabhängig vom einzugebenden Datentypen sein...

    edit: eine weiter mögliche Lösung wäre die Funktion für alle standard-datentypen zu überladen, aber das würde den code wohl kaum verringern, denn das wäre dann doch einiges an Aufwand 😉

    mfg,
    andi01.



  • andi01 schrieb:

    edit: mein ansatz würde spontan so aussehen:

    template<class T>
    void safe_cin(T Zielvariable)
    {
    do
    {
    	cin>>Zielvariable;
    }
    	while(cin.fail());
    }
    

    bleibt aber das problem dass cin.fail() hier wahrscheinlich immer false liefern würde...

    Und wie kommst du darauf? Programmieren ist nicht raten, sondern wissen.

    Je nach Datentyp wird ein bestimmter überladener operator>> aufgerufen. Dieser liest die Daten in die angegebene Variable - geht bei diesem einlesen etwas schief, so wird ein failbit gesetzt. Die member-Funktion fail() prüft lediglich auf dieses bit.



  • mir ist gerade aufgefallen das ich vergaß das failbit zu löschen; so funktioniert es jetzt aber(getestet):

    template<class T> 
    void safe_cin(T Zielvariable) 
    {  
    	do
    	{
    		if(cin.fail())
    		{
    			cin.clear();   //fail-state löschen
    			cin.ignore(); //Zeichen im Stream leeren
    			cout<<"Fehleingabe, bitt erneut eingeben!\n";
    		}
    		cin>>Zielvariable;
    	}
    	while(cin.fail());
    }
    

    etzt funktioniert es aber 😉

    mfg,
    andi01.



  • andi01 schrieb:

    template<class T> 
    void safe_cin(T Zielvariable) 
    {  
    	do
    	{
    		if(cin.fail())
    		{
    			cin.clear();   //fail-state löschen
    			cin.ignore(); //Zeichen im Stream leeren
    			cout<<"Fehleingabe, bitt erneut eingeben!\n";
    		}
    		cin>>Zielvariable;
    	}
    	while(cin.fail());
    }
    

    Ok, ich als Anfänger muss sagen, dass das schön aussieht, leider konnte ich es nicht übernehmen, da ich ja 2 cin habe. Wobei ich dies mit einer Prüfvariable und ner if handeln könnte, jedoch lasse ich glaub vorerst das untere Bsp. oder ist das schlecht?

    void Eingabe ()
    {
      if (cin.fail())
      {
        (exit(-1));
      }
    }
    

    und so weit ich das beurteilen kann funktioniert es sogar, zumindest schließt er einfach das Dos Fenster 🙄

    Okay, hab übersehen das es ein template is 😉 allerdings funzt des net so wirklich, muss ich iwas includen?

    Das Problem liegt darin, das er zwar weiterläuft und nochmal die möglichkeit einer Eingabe gibt, jedoch mit -9.25596e+061 rechnet! auch wenn ich was anderes angegeben hab beim zweiten mal. Demnach ist das ergebnis auch -9.25596e+061.



  • samkirchner schrieb:

    oder ist das schlecht?

    also schlecht würde ich es jetzt nicht nennen, aber es ist nicht optimal weil dein Konsolenfenster eben zugeht und eine erneute Eingabe besser wäre da man sonst das programm immer neustarten muss.

    samkirchner schrieb:

    muss ich iwas includen?

    für templates nichts spezielles, nur eben iostream damit die Ausgabe funktioniert^^

    samkirchner schrieb:

    Das Problem liegt darin, das er zwar weiterläuft und nochmal die möglichkeit einer Eingabe gibt, jedoch mit -9.25596e+061 rechnet!

    hm du hast Recht da muss ich irgendwo noch einen Fehler haben... ich schaus mir noachmal an

    mfg,
    andi01.



  • ok ich habe meinen fehler gefunden: ich muss natürlich eine Referenz übergeben 😃

    so funktioniert es jetzt aber(getestet):

    template<class T> 
    void safe_cin(T& Zielvariable) 
    {  
        do
        {
            if(cin.fail())
            {
                cin.clear();   //fail-state löschen
                cin.ignore(); //Zeichen im Stream leeren
                cout<<"Fehleingabe, bitte erneut eingeben!\n";
            }
            cin>>Zielvariable;
        }
        while(cin.fail());
    }
    

    probiers nochmal, jetzt muss es aber klappen!

    btw: was meinst du damit dass du die funktion nicht verwenden kannst

    samkirchner schrieb:

    da ich ja 2 cin habe

    ? wenn du 2 Variablen eingeben willst musst du die Funktion eben 2mal aufrufen ;). wo ist jetzt das Problem mit einer zweiten Eingabe?(in der jetztigen Funktion kommen übrigens die richtigen werte raus, ich hatte nur die referenz vergessen 😃 )

    mfg,
    andi01.



  • ja, die Funktion geht nun. Allerdings gibbet nun noch ein problem, da ich ja erst nach cin auf cin überprüfen kann. Wenn das cin in ordnung ist, dann wird allerdings nochmal ein cin angefordert 😉 denn es ist ausserhalb der if-schleife
    und wird somit immer ausgeführt wenn er in die funktion springt, müsste eigentlich bei dir auch so sein!

    doch sicherlich lässt sich darauf auch ne lösung finden mal *denken geh* 🙂

    template<class T>
    void Eingabe(T& Zielvariable)
    {  
    	if(cin.fail())
        {
          do
          {
    
                cin.clear();   //fail-state löschen
                cin.ignore(); //Zeichen im Stream leeren
                cout<<"Fehleingabe, bitte erneut eingeben!\n";
    
            cin>>Zielvariable;
          }
          while(cin.fail());
    	}
    }
    

    so ist es glaub richtig, kein doppeltes cin mehr :p



  • samkirchner schrieb:

    so ist es glaub richtig

    dein code hat das problem dass überhaupt nichts eingegeben wird vor if(cin.fail()), deswegen wird das immer true liefern und die funktion wird vermutlich kein brauchbares Ergebnis liefern 😉

    edit: also ich habe meinen code jetzt noch einmal getestet aber wenn ich eine richtige Eingabe mach wird bei mir keine neue gefordert. hm vielleicht haste bei der Verwendung ja was falsch gemacht 😕

    hier nochmal der funktionierende Code:

    template<class T> 
    void safe_cin(T& Zielvariable) 
    {  
        do
        {
            if(cin.fail())
            {
                cin.clear();   //fail-state vergessen
                cin.ignore(); //Zeichen im Stream vergessen
                cout<<"Fehleingabe, bitte erneut eingeben!\n";
            }
            cin>>Zielvariable;
        }
        while(cin.fail());
    }
    

    hier nochmal ein einfaches Verwendungsbeispiel für diese Funktion:

    #include<iostream>
    #include<windows.h>//nur für Sleep(), für templates nicht benötigt!
    using namespace std;
    
    template<class T> 
    void safe_cin(T& Zielvariable) 
    {  
        do
        {
            if(cin.fail())
            {
                cin.clear();   //fail-state vergessen
                cin.ignore(); //Zeichen im Stream vergessen
                cout<<"Fehleingabe, bitte erneut eingeben!\n";
            }
            cin>>Zielvariable;
        }
        while(cin.fail());
    }
    
    int main()
    {
    int a;
    safe_cin(a);
    cout<<"korrekte Eingabe: "<<a<<endl;
    Sleep(2000);
    }
    

    mfg,
    andi01.



  • also is doch davor ne cin (Eingabe). Also wenn ich es teste, dann geht es nun, hier mal mein ganzer code:

    Die main

    #include <iostream>
    #include "Mathe.h"
    using namespace std;
    
    void Ausgabe (double ergebnis, double z1, double z2, char auswahl)
    {
        cout<<"Das Ergebnis von "<<z1<<" "<<auswahl<<" "<<z2<<" ist: "<<ergebnis<<"\n\a"<<endl;
    }
    
    template<class T>
    void Eingabe(T& Zielvariable)
    {  
    	if(cin.fail())
        {
          do
          {
    
                cin.clear();   //fail-state löschen
                cin.ignore(); //Zeichen im Stream leeren
                cout<<"Fehleingabe, bitte erneut eingeben!\n";
    
            cin>>Zielvariable;
          }
          while(cin.fail());
    	}
    } 
    
    int main()
    {
    
    	char auswahl;
    	do
    	{
    	  double z1;
    	  double z2; 
    
    	  cout<<"Zahl 1:"<<endl;
    	  cin>>z1;
    	  Eingabe(z1);
    	  cout<<"Zahl 2:"<<endl;
    	  cin>>z2;
    	  Eingabe(z2);
    	  cout<<"Bitte geben Sie eine der unten stehenden Aktionen ein: \n"<<endl;
    	  cout<<"*******************************************************"<<endl;
    	  cout<<"*******************************************************"<<endl;
    	  cout<<"**                  + = Addition                     **"<<endl;
    	  cout<<"**                  - = Subtraktion                  **"<<endl;
    	  cout<<"**                  * = Multiplikation               **"<<endl;
    	  cout<<"**                  / = Division                     **"<<endl;
    	  cout<<"**                  p = Potenz                       **"<<endl;
    	  cout<<"**                  % = Modolo                       **"<<endl;
    	  cout<<"**                  b = Beenden                      **"<<endl;
    	  cout<<"*******************************************************"<<endl;
    	  cout<<"*******************************************************"<<endl;
    	  cin>>auswahl;
    	  while (z2==0 && auswahl=='/')
    	  {
    	    cout<<"Bitte Zahl 2 erneut eingeben, da durch Null teilen 0 ist!"<<endl;
    	    cin>>z2;
    	  }
    	  double ergebnis = 0;
    	  switch (auswahl)
    	  {
    		case '+':ergebnis=Addition(z1,z2);
    				 Ausgabe(ergebnis, z1, z2, auswahl);
    			break;
    		case '-':ergebnis= Subtraktion(z1,z2);
    				 Ausgabe(ergebnis, z1, z2, auswahl);
    			break;	
    		case '*':ergebnis= Multiplikation(z1,z2);
    			     Ausgabe(ergebnis,z1,z2, auswahl);
    			break;	
    		case '/':ergebnis =Division(z1,z2);
    				 Ausgabe(ergebnis, z1, z2, auswahl);
      		case 'p':Potenz(z1, z2, ergebnis);
    				 auswahl='^';
    				 Ausgabe (ergebnis, z1, z2, auswahl);
    			break;
    		default : 
    			{
    			  cout<<"Falsche Eingabe"<<endl;
    			}
    	  }  
    	}while(auswahl != 'b');
    	system("PAUSE");
      return 0;
    }
    

    Die Math.cpp

    #include <iostream>
    #include "Mathe.h"
    using namespace std;
    
    void Ausgabe (double ergebnis, double z1, double z2, char auswahl)
    {
        cout<<"Das Ergebnis von "<<z1<<" "<<auswahl<<" "<<z2<<" ist: "<<ergebnis<<"\n\a"<<endl;
    }
    
    template<class T>
    void Eingabe(T& Zielvariable)
    {  
    	if(cin.fail())
        {
          do
          {
    
                cin.clear();   //fail-state löschen
                cin.ignore(); //Zeichen im Stream leeren
                cout<<"Fehleingabe, bitte erneut eingeben!\n";
    
            cin>>Zielvariable;
          }
          while(cin.fail());
    	}
    } 
    
    int main()
    {
    
    	char auswahl;
    	do
    	{
    	  double z1;
    	  double z2; 
    
    	  cout<<"Zahl 1:"<<endl;
    	  cin>>z1;
    	  Eingabe(z1);
    	  cout<<"Zahl 2:"<<endl;
    	  cin>>z2;
    	  Eingabe(z2);
    	  cout<<"Bitte geben Sie eine der unten stehenden Aktionen ein: \n"<<endl;
    	  cout<<"*******************************************************"<<endl;
    	  cout<<"*******************************************************"<<endl;
    	  cout<<"**                  + = Addition                     **"<<endl;
    	  cout<<"**                  - = Subtraktion                  **"<<endl;
    	  cout<<"**                  * = Multiplikation               **"<<endl;
    	  cout<<"**                  / = Division                     **"<<endl;
    	  cout<<"**                  p = Potenz                       **"<<endl;
    	  cout<<"**                  % = Modolo                       **"<<endl;
    	  cout<<"**                  b = Beenden                      **"<<endl;
    	  cout<<"*******************************************************"<<endl;
    	  cout<<"*******************************************************"<<endl;
    	  cin>>auswahl;
    	  while (z2==0 && auswahl=='/')
    	  {
    	    cout<<"Bitte Zahl 2 erneut eingeben, da durch Null teilen 0 ist!"<<endl;
    	    cin>>z2;
    	  }
    	  double ergebnis = 0;
    	  switch (auswahl)
    	  {
    		case '+':ergebnis=Addition(z1,z2);
    				 Ausgabe(ergebnis, z1, z2, auswahl);
    			break;
    		case '-':ergebnis= Subtraktion(z1,z2);
    				 Ausgabe(ergebnis, z1, z2, auswahl);
    			break;	
    		case '*':ergebnis= Multiplikation(z1,z2);
    			     Ausgabe(ergebnis,z1,z2, auswahl);
    			break;	
    		case '/':ergebnis =Division(z1,z2);
    				 Ausgabe(ergebnis, z1, z2, auswahl);
      		case 'p':Potenz(z1, z2, ergebnis);
    				 auswahl='^';
    				 Ausgabe (ergebnis, z1, z2, auswahl);
    			break;
    		default : 
    			{
    			  cout<<"Falsche Eingabe"<<endl;
    			}
    	  }  
    	}while(auswahl != 'b');
    	system("PAUSE");
      return 0;
    }
    

    und die Math.h

    #ifndef MATHE_H
    #define MATHE_H
    
    double Division(double z1, double z2);
    double Multiplikation(double z1, double z2);
    double Addition(double z1, double z2);
    double Subtraktion(double z1, double z2);
    double Potenz(double z1, double z2, double ergebnis);
    #endif
    

    mißachte die / und ^sowie p case bitte, noch net fertig!

    Edit: Aha, nun kapier ich dat 😉 dachte das wäre schon auf mein Kauderwelsch abgeschnitten 😃

    dafür hab ich nun doppelt so viel überlegt 👍



  • edit:

    also wenn du deine Variante der Codes nimmst passt das so;

    allerdings würde ich dir trotzdem zu meiner Funktion raten weil du dann nicht immer cin davor benutzen musst!

    also bei deiner Variante cin vorher benutzen, bei meiner nicht(was einige Codezeilen spart!)

    mfg,
    andi01.



  • super, danke für deine Hilfe 👍

    sicherlich ist es wichtig überflüssigen code zu vermeiden, jedoch bin ich mom schon froh, wenn ich ein wenig was verstehe was dort vor sich geht. ich hoffe nur das ich iwann noch mein logisches denken verbessern kann und auch auf solche lösungen komme 😞



  • als Anfänger musst du ja auch noch nicht gleich mit templates programmieren, am Anfang reichts wenn du die Grundlagen verstehst 😉

    vom Verständinis her sollte meine Variante auch nicht schwerer zu verstehen sein, es gibt ja nur den Unterschied dass das cin außerhalb der if-bedingung geschieht. da sie aber wesentlich praktischer zu verwenden ist und wirklich einige Zeilen Code spart hier nochmal ein Verwendungsbeispiel für beide Varianten:

    1. für deine Variante:

    template<class T>
    void Eingabe(T& Zielvariable)
    {  
        if(cin.fail())
        {
          do
          {
    
                cin.clear();   //fail-state löschen
                cin.ignore(); //Zeichen im Stream leeren
                cout<<"Fehleingabe, bitte erneut eingeben!\n";
    
            cin>>Zielvariable;//einziger Unterschied der Methoden!
          }
          while(cin.fail());
        }
    }
    
    int main()
    {
    int a;
    cin>>a;//diese Zeile ist bei mir unnötig! auf Dauer kommt da einiges zusammen...
    Eingabe(a);
    }
    

    2. für meine Variante:

    template<class T> 
    void safe_cin(T& Zielvariable) 
    {  
        do
        {
            if(cin.fail())
            {
                cin.clear();   //fail-state löschen
                cin.ignore(); //Zeichen im Stream leeren
                cout<<"Fehleingabe, bitte erneut eingeben!\n";
            }
            cin>>Zielvariable;//einziger Unterschied der Methoden!
        }
        while(cin.fail());
    }   
    
    int main()
    {
    int a;
    safe_cin(a);//hier ist KEIN cin vorher nötig!
    }
    

    3.Unterschiede: der einzige Unterschied in der Verwendung ist also dass du vor deiner Methode erst cin aufrufen musst und dann die eigentliche Methode, bei meiner ist das unnötig und die methode macht den code dadurch auch übersichtlicher^^

    alles in allem ist also die zweite methode empfehlenswerter weil der code nicht wesentlich schwerer zu verstehen ist und die methode einiges an Code spart(und so zB die lesbarkeit erhöht^^)

    samkirchner schrieb:

    jedoch bin ich mom schon froh, wenn ich ein wenig was verstehe was dort vor sich geht

    deshalb hier noch ne kleine Erklärung zur Methode:

    das Template ist ledeglich dazu da dass du die Methode für alle Datentypen verwenden kannst, da du dich sonst auf einen Datentypen beschränken müsstest;

    zu Beginn der Methode wird geprüft ob die letzt Eingabe fehlerhaft war
    (if(cin.fail()), wenn ja wird der fail-state gelöscht (um cin.fail() "zurückzusetzen" mit cin.clear()) und die eingegebenen Zeichen werden gelöscht, danach ist praktisch alles wie wenn die Falscheingabe nie stattgefunden hätte; dann wird der user zur erneuten Eingabe aufgefordert, und das solange bis er einen gültigen Wert eingibt.

    mfg,
    andi01.



  • sodale, nun mal mein fertiges ergebnis!

    wobei ich noch ein paar fragen hätte.

    wie realisiere ich das modolo und den rest bei division am besten.
    momentan habe ich einfach die funktion modolo erneut aufgerufen, allerdings ist dies nicht wirklich schön, wäre glaub besser gewesen als template, oder?

    zudem weiß ich immer noch nicht, wann es besser ist eine neue funktion zu machen oder es in die main zu schreiben. ist das mit der if (rest=='j') richtig in der main oder hätte ich dafür eine funktion schreiben sollen?

    ebenso frage ich mich, ob es schön bzw. richtig ist, wenn ich für ausgabe eine extra funktion mache, denn die parameter muss ich dann ja eh immer mitgeben, ist es dann noch sinnig eine einzeilerfunktion zu schreiben?

    ein etwas längerer aufwand war das double zu int, weiß nicht ob das eine schöne lösung ist, denn wenn ich mir das genauer überlege, ist doch nun z1 sowie z2 ein int. ich verstehe nicht wo das int wieder zu double wird, er gibt mir jedoch keinen fehler raus also passt es so, weiß nur net wieso!

    doch nun mal mein code

    die main.cpp

    #include <iostream>
    #include "Mathe.h"
    using namespace std;
    
    void Ausgabe (double ergebnis, double z1, double z2, char auswahl)
    {
        cout<<"Das Ergebnis von "<<z1<<" "<<auswahl<<" "<<z2<<" ist: "<<ergebnis<<"\n\a"<<endl;
    }
    
    template<typename T>
    void Eingabe(T& Zielvariable)
    {  
          do
          {
    	    if(cin.fail())
            {
    			cin.clear();   //fail-state löschen
    			cin.ignore(); //Zeichen im Stream leeren
    			cout<<"Fehleingabe, bitte erneut eingeben!\n";	
            }
    		cin>>Zielvariable;
          }while(cin.fail());	
    } 
    
    int main()
    {
    	double ergebnis = 0;  
    	char auswahl;
    	do
    	{
    	  double z1;
    	  double z2; 
    	  cout<<"Zahl 1:"<<endl;
    	  Eingabe(z1);//Eingabe überprüfung
    	  cout<<"Zahl 2:"<<endl;
    	  Eingabe(z2);//Eingabe überprüfung
    	  cout<<"**************************"<<endl;
    	  cout<<"**************************"<<endl;
    	  cout<<"**                      **"<<endl;
    	  cout<<"**       Bitte          **"<<endl;      
    	  cout<<"**  Rechenart eingeben! **"<<endl;
    	  cout<<"**                      **"<<endl;
    	  cout<<"**************************"<<endl;
    	  cout<<"**************************"<<endl;
    	  cout<<"**                      **"<<endl;
    	  cout<<"**  + = Addition        **"<<endl;
    	  cout<<"**  - = Subtraktion     **"<<endl;
    	  cout<<"**  * = Multiplikation  **"<<endl;
    	  cout<<"**  / = Division        **"<<endl;
    	  cout<<"**  p = Potenz          **"<<endl;
    	  cout<<"**  % = Modolo          **"<<endl;
    	  cout<<"**  b = Beenden         **"<<endl;
    	  cout<<"**                      **"<<endl;
    	  cout<<"**************************"<<endl;
    	  cout<<"**************************"<<endl;
    	  cin>>auswahl;
    	  while (z2==0 && auswahl=='/')
    	  {
    	    cout<<"Bitte Zahl 2 erneut eingeben, da durch Null teilen 0 ist!"<<endl;
    	    Eingabe(z2);
    	  }
    	  switch (auswahl)
    	  {
    		case '+':ergebnis=Addition(z1,z2);
    				 Ausgabe(ergebnis, z1, z2, auswahl);
    			break;
    		case '-':ergebnis= Subtraktion(z1,z2);
    				 Ausgabe(ergebnis, z1, z2, auswahl);
    			break;	
    		case '*':ergebnis= Multiplikation(z1,z2);
    			     Ausgabe(ergebnis,z1,z2, auswahl);
    			break;	
    		case '/':ergebnis =Division(z1,z2);
    				 Ausgabe(ergebnis, z1, z2, auswahl);
    				 ergebnis = 0;
    				 cout<<"j = Restwert anzeigen?"<<endl;
    				 char rest;
    				 Eingabe(rest);
    				 if (rest == 'j')
    				 {
    				   cout<<endl;
    				   ergebnis=Modolo(z1,z2,ergebnis);
    				   cout<<"Der Rest ist: "<<ergebnis<<"\n\n"<<endl;
    				 }
    			break;
    		case '%':ergebnis=Modolo(z1,z2, ergebnis);
    				 Ausgabe(ergebnis, z1, z2, auswahl);
    			break;
      		case 'p':ergebnis =Potenz(z1, z2, ergebnis);
    				 auswahl='^';
    				 Ausgabe (ergebnis, z1, z2, auswahl);
    			break;
    		case 'b':cout<<"Auf Wiedersehen!"<<endl;
    			break;
    		default : 
    			{
    			  cout<<"Falsche Eingabe"<<endl;
    			}
    	  }  
    	}while(auswahl != 'b');
    	system("PAUSE");
      return 0;
    }
    

    meine mathe.h

    #ifndef MATHE_H
    #define MATHE_H
    
    double Division(double z1, double z2);
    double Multiplikation(double z1, double z2);
    double Addition(double z1, double z2);
    double Subtraktion(double z1, double z2);
    double Modolo(double z1, double z2, double ergebnis);
    double Potenz(double z1, double z2, double ergebnis);
    #endif
    

    und meine mathe.cpp

    #include <iostream>
    #include "Mathe.h"
    
    using namespace std;
    
    double Division(double z1, double z2)
    {
      return z1/z2;
    }
    
    double Multiplikation(double z1, double z2)
    {
      return z1*z2;
    }
    
    double Subtraktion(double z1, double z2)
    {
      return z1-z2;
    }
    
    double Addition(double z1, double z2)
    {
      return z1+z2;
    }
    
    double Modolo(double z1, double z2, double ergebnis)
    {
      int a = static_cast<int>(z1);//Umwandlung von double zu int
      int b = static_cast<int>(z2);
      return  ergebnis= a%b;
    }
    
    double Potenz(double z1, double z2, double ergebnis)
    {
      ergebnis= 1;//eins wegen hoch rechnung, denn 2 hoch 1 = 1 nicht 0
      for (int i=1; i<= z2; i++)
      {
        ergebnis*=z1;
      } 
      return ergebnis;
    }
    

    ich weiß das hier keine korrekturlesung ist, jedoch weiß ich net wo ich sonst meine fehler erfragen könnte und ich schaffe es nie c++ zu beherschen, danke euch für jede hilfe, kritik und erklärung.


Anmelden zum Antworten