Stos – mnożenie elementów nie działa prawidłowo

0

Napisałem kod:

stack <int> obl;
obl.push(0);
obl.push(1);
obl.push(2);
while(run){
	cout<<"Stack size: "<<obl.size()<<endl;
	cin>>znak;
	if(znak>=-100 || znak <=100) obl.push(znak);
	if(znak==(char)42){		//mnozenie, znak gwiazdki
		a=obl.top();
		cout<<endl<<a<<" "<<endl;
		obl.pop();
		b=obl.top();
		cout<<endl<<b<<" "<<endl;
		c = a * b;
		cout<<endl<<c<<" "<<endl;
		obl.push(c);
		cout<<endl<<"Stack size: "<<obl.size()<<endl;
	}

jednak operacje mnożenia dwóch elementów ze stosu nie jest wykonywana na tych elementach, tylko na jakichś innych elementach, co jest nie tak?

0

Czym są a, b, c? Pokuś się o zrobienie MCVE, zamiast wklejać małe wycinki kodu. https://dsp.krzaq.cc/post/445/jak-zadawac-pytania-na-forum/

0
kq napisał(a):

Czym są a, b, c? Pokuś się o zrobienie MCVE, zamiast wklejać małe wycinki kodu. https://dsp.krzaq.cc/post/445/jak-zadawac-pytania-na-forum/

Myślałem, że to wynika z kodu, a i b to zmienne, do których przypisywana jest wartość ze szczytu stosu, c to ich iloczyn.

0

Świetnie. Jakiego typu są to zmienne? Przeczytaj jeszcze raz podlinkowany post, myślałem, że z niego wynika jak wygląda poprawne zapytanie na forum oraz komu powinno zależeć na uzyskaniu odpowiedzi.

0
#include <iostream>
#include <stack>
#include <conio.h>

using namespace std;

int main()
{
    bool run = true;
    float first = 0;
    float second = 0;
    float multipl = 0;
    char znak;
    stack<int> obl;
    obl.push(0);
    obl.push(1);
    obl.push(2);
    while (run) {
        cout << "Stack size: " << obl.size() << endl;
        cin >> znak;
        if (znak >= -100 || znak <= 100)
            obl.push(znak);
        if (znak == (char)42) { //mnozenie
            first = obl.top();
            cout << endl
                 << first << " " << endl;
            obl.pop();
            second = obl.top();
            cout << endl
                 << second << " " << endl;
            multipl = first * second;
            cout << endl
                 << multipl << " " << endl;
            obl.push(multipl);
            cout << endl
                 << "Stack size: " << obl.size() << endl;
        }
        else if (znak == (char)43) { //dodawanie
        }
        else if (znak == (char)45) { //odejmowanie
        }
        else if (znak == (char)47) { //dzielenie
        }

        if (getch() == 'a') {
            run = false;
        }
    }
}
0

tu wstawiam cały kod

0

https://wandbox.org/permlink/wANeJrexGU1loJg2

Mnożenie jest wykonywane na dwóch pierwszych elementach. Nie wiem w czym problem.

Przy okazji: jeśli to stos intów, to przypisywanie ich do floatów tylko zaciemnia intencję i może oznaczać błąd rozumowania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1