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; }