Witam, mam mały problem z kalkulatorem napisałem kalkulator z zachowaniem kolejności wykonywania działań. Dostałem to zadanie na studiach ale ktoś już oddał mój program (nie potrzebnie mu go wysłałem a on się pod tym podpisał) a ja teraz muszę go zmieniać. Kalkulator działa tak, że użytkownik podaje jakieś długie działanie np 2^2^2/4+8*4-12 a on mu zwraca wynik z kolejnością wykonywania działań. Kalkulator uwzględnia dodawanie, odejmowanie, mnożenie, dzielenie i potęgowanie. Bez pierwiastków i nawiasów. Nie za bardzo mam pomysł jak to pozmieniać i dlatego prosiłbym kogoś o pomoc i naniesienie zmian w moim kodzie.
#include <cstdio>
#include <string>
#include <vector>
#include <iostream>
#include <stdlib.h>
#include <cctype>
#include <cstring>
#include <cmath>
using namespace std;
void dzialanie_podzial(string &dzialanie_matematyczne, vector <double>& tablica_liczb, vector <char>& tablica_znakow, int iRozmiar)
{
int a = 0;
string bufor_liczb;
for (a = 0; a < iRozmiar; a++)
{
if (isdigit(dzialanie_matematyczne[a]) || (dzialanie_matematyczne[a] == '.'))
{
bufor_liczb = bufor_liczb + dzialanie_matematyczne[a];
}
else
{
tablica_liczb.push_back(atof(bufor_liczb.c_str()));
bufor_liczb = "";
tablica_znakow.push_back(dzialanie_matematyczne[a]);
}
if (a == (iRozmiar - 1))
{
tablica_liczb.push_back(atof(bufor_liczb.c_str()));
}
}
}
void dodawanie(vector <double> &tablica_liczb, vector <char> &tablica_znakow, int &i)
{
tablica_liczb[i] = tablica_liczb[i] + tablica_liczb[i + 1];
tablica_liczb.erase(tablica_liczb.begin() + i + 1);
tablica_znakow.erase(tablica_znakow.begin() + i);
i--;
}
void odejmowanie(vector <double> &tablica_liczb, vector <char> &tablica_znakow, int &i)
{
tablica_liczb[i] = tablica_liczb[i] - tablica_liczb[i + 1];
tablica_liczb.erase(tablica_liczb.begin() + i + 1 );
tablica_znakow.erase(tablica_znakow.begin() + i);
i--;
}
void mnozenie(vector <double> &tablica_liczb, vector <char> &tablica_znakow, int &i)
{
tablica_liczb[i] = tablica_liczb[i] * tablica_liczb[i + 1];
tablica_liczb.erase(tablica_liczb.begin() + i + 1);
tablica_znakow.erase(tablica_znakow.begin() + i);
i--;
}
void dzielenie(vector <double> &tablica_liczb, vector <char> &tablica_znakow, int &i)
{
tablica_liczb[i] = tablica_liczb[i] / tablica_liczb[i + 1];
tablica_liczb.erase(tablica_liczb.begin() + i + 1);
tablica_znakow.erase(tablica_znakow.begin() + i );
i--;
}
void potegowanie(vector <double> &tablica_liczb, vector <char> &tablica_znakow, int &i)
{
tablica_liczb[i] = pow(tablica_liczb[i], tablica_liczb[i + 1]);
tablica_liczb.erase(tablica_liczb.begin() + i + 1);
tablica_znakow.erase(tablica_znakow.begin() + i );
i--;
}
int main()
{
string dzialanie_matematyczne;
vector < double > tablica_liczb;
vector < char > tablica_znakow;
int iRozmiar;
int wybor;
cout << "Witaj Drogi U¿ytkowniuku!" << endl;
cout << "Proszê podaæ dzia³anie matematyczne, które ma zostaæ obliczone: " ;
cout << endl;
cin >> dzialanie_matematyczne;
iRozmiar = dzialanie_matematyczne.length();
dzialanie_podzial(dzialanie_matematyczne, tablica_liczb, tablica_znakow,iRozmiar);
int f = 0 ;
int d = tablica_znakow.size();
while (f < d)
{
if (tablica_znakow[f] == '^')
{
potegowanie(tablica_liczb, tablica_znakow, f);
d--;
}
f++;
}
f = 0;
while (f < d)
{
if (tablica_znakow[f] == '*')
{
(mnozenie(tablica_liczb, tablica_znakow, f));
d--;
}
else if (tablica_znakow[f] == '/')
{
dzielenie(tablica_liczb, tablica_znakow, f);
d--;
}
f++;
}
f = 0;
while (f < d)
{
if (tablica_znakow[f] == '+')
{
dodawanie(tablica_liczb, tablica_znakow, f);
d--;
}
else if (tablica_znakow[f] == '-')
{
odejmowanie(tablica_liczb, tablica_znakow, f);
d--;
}
f++;
}
cout << "Wynik podanego dzia³ania to: " << tablica_liczb[0];
return 0;
}