S
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.