Sono nuovo di c ++ e sto facendo il buon vecchio calcolatore. Sono passato da un calcolatore a 2 valori a un calcolatore a 3 valori e mi sono chiesto come sia possibile creare un calcolatore a 10 cifre (usando esclusivamente +, -, *, /) che non codifica per sempre .. Ho una dichiarazione if che restituisce cosa succede se gli operatori sono + e + o + e - ecc. e se dovessi passare al valore 4, scriverei 64 if e il valore 5 sarebbe 256 se le istruzioni.
C'è un modo per cambiarlo in modo tale da non richiedere la scrittura di così tante istruzioni if?
Ecco le mie parti importanti del codice:
Calculator.cpp:
#include "stdafx.h"
#include <iostream>
#include "headers.h"
using namespace std;
int main()
{
int nInput1 = GetUserInput();
char chOperation = GetMathematicalOperation();
{
if (chOperation == '=')
{
cout << "The answer is: " << nInput1 << endl;
return 0;
}
}
int nInput2 = GetUserInput();
char chOperation2 = GetMathematicalOperation();
{
if (chOperation2 == '=')
{
int nResult = CalculateResult(nInput1, chOperation, nInput2);
cout << "The answer is: " << nResult << endl;
return 0;
}
}
int nInput3 = GetUserInput();
int nResult = CalculateResult2(nInput1, chOperation, nInput2, chOperation2, nInput3);
PrintResult(nResult);
}
CalculateResult.cpp:
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int CalculateResult(int nX, char chOperation, int nY)
{
if (chOperation == '+')
return nX + nY;
if (chOperation == '-')
return nX - nY;
if (chOperation == '*')
return nX * nY;
if (chOperation == '/')
return nX / nY;
return 0;
}
GetMathematicalOperation.cpp:
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
char GetMathematicalOperation()
{
cout << "Please enter an operator (+,-,*,/ or =): ";
char chOperation;
cin >> chOperation;
return chOperation;
}
CalculateResult2.cpp:
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int CalculateResult2(int nX, char chOperation, int nY, char chOperation2, int nZ)
{
if (chOperation == '+' && chOperation2 == '+')
return nX + nY + nZ;
if (chOperation == '+' && chOperation2 == '-')
return nX + nY - nZ;
if (chOperation == '+' && chOperation2 == '*')
return nX + nY * nZ;
if (chOperation == '+' && chOperation2 == '/')
return nX + nY / nZ;
if (chOperation == '-' && chOperation2 == '+')
return nX - nY + nZ;
if (chOperation == '-' && chOperation2 == '-')
return nX - nY - nZ;
if (chOperation == '-' && chOperation2 == '*')
return nX - nY * nZ;
if (chOperation == '-' && chOperation2 == '/')
return nX - nY / nZ;
if (chOperation == '*' && chOperation2 == '+')
return nX * nY + nZ;
if (chOperation == '*' && chOperation2 == '-')
return nX * nY - nZ;
if (chOperation == '*' && chOperation2 == '*')
return nX * nY * nZ;
if (chOperation == '*' && chOperation2 == '/')
return nX * nY / nZ;
if (chOperation == '/' && chOperation2 == '+')
return nX / nY + nZ;
if (chOperation == '/' && chOperation2 == '-')
return nX / nY - nZ;
if (chOperation == '/' && chOperation2 == '*')
return nX / nY * nZ;
if (chOperation == '/' && chOperation2 == '/')
return nX / nY / nZ;
return 0;
}