• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kalkulator z kolejnością wykonywania działań

VPS Starter Arubacloud
–1 głos
3,281 wizyt
pytanie zadane 23 maja 2017 w C i C++ przez kakola3 Początkujący (270 p.)

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;

}

 

1 odpowiedź

0 głosów
odpowiedź 23 maja 2017 przez j23 Mędrzec (195,220 p.)

(...) 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ć.

A tym ktosiem nie jesteś przypadkiem Ty? laugh Nie wierzę, że ktoś, kto napisał cały program, ma teraz problem z jego modyfikacją.

Zaimplementuj ONP, i będziesz miał to samo inaczej napisane.

Podobne pytania

0 głosów
0 odpowiedzi 364 wizyt
+2 głosów
0 odpowiedzi 125 wizyt
0 głosów
1 odpowiedź 821 wizyt
pytanie zadane 1 marca 2017 w C i C++ przez Lemon Nowicjusz (210 p.)

92,973 zapytań

141,938 odpowiedzi

321,180 komentarzy

62,301 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...