B
Ich habe mal etwas rumgefrickelt, das hier nimmt eine Rechnung von bis zu anzahl Operatoren:
#include <iostream>
double calc(double v1, double v2, char op);
int const anzahl = 19;
int main()
{
double v[anzahl+1] = { 0 };
char op[anzahl] = { 0 };
double ergebnis = 0;
std::cout << "Welche Rechenaufgabe wollen sie loesen?" << std::endl;
int i;
std::cin >> v[0];
for (i = 1; i < anzahl+1; i++)
{
if (std::cin >> op[i-1])
{
if (!(std::cin >> v[i]))
{
std::cout << "Fehler, ein Operator zu viel!" << std::endl;
return 0;
}
}
else
{
i--;
break;
}
}
if (i == 0)
{
std::cout << "Ungueltige Rechenaufgabe!" << std::endl;
return 0;
}
if (i == anzahl+1) i = anzahl;
for (int j = 0; j < i; j++)
{
if (op[j] == '*' || op[j] == '/')
{
v[j+1] = calc(v[j], v[j+1], op[j]);
v[j] = 0;
if (j > 0 && (op[j-1] == '-'))
op[j] = '-';
else
op[j] = '+';
}
}
int j;
for (j = 0; j < i; j++)
{
v[j+1] = calc(v[j], v[j+1], op[j]);
}
ergebnis = v[j];
std::cout << "Ergebnis:" << ergebnis << std::endl;
}
double calc(double v1, double v2, char op)
{
switch (op)
{
case '+':
return v1 + v2;
break;
case '-':
return v1 - v2;
break;
case '*':
return v1 * v2;
break;
case '/':
return v1 / v2;
break;
default:
{
//Fehler
}
}
return 0;
}
Wenn du eine Rechnung von weniger als anzahl Operatoren berechnen willst, kannst du die Schleife mit Strg+Z (unter Windows) beenden.
Der nächste Schritt wäre dann alles dynamisch zu machen, also beliebig viele Operatoren zu akzeptieren.
Edit: Fehler gefixt.