Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++/STL] Problem z używaniem stosu

Ostatnio zmodyfikowano 2009-09-30 19:45
Autor Wiadomość
Lord_Voldemort
Temat założony przez niniejszego użytkownika
[C++/STL] Problem z używaniem stosu
» 2009-09-30 19:20:41
Witam napisałem program, który ma za zadanie symulować działanie stosu 10 elementowego. Na wejściu programu mam wpisać znak '+' lub '-'. Jeżeli wprowadzę '+' następnie muszę dodać liczbę do stosu i wyświetlić ":)". Jeśli wprowadzę znak '-' i stos nie jest pusty mam wyświetlić wypisywaną liczbę, a jeśli jest pusty komunikat ":(". Mój kod wydaje się byę dobry ale niestety taki nie jest. Proszę o pomoc !
C/C++
#include <iostream>
#include <stack>
using namespace std;
int main()
{
    stack < int > stos;
    char znak;
    int liczba;
    cin >> znak;
    if( znak == '+' && stos.size() < 10 )
         cin >> liczba;
   
    stos.push( liczba );
    cout << ":)" << endl;
    if( znak == '+' && stos.size() > 10 )
         cout << ":(" << endl;
   
    if( znak == '-' && stos.empty() )
         cout << ":(" << endl;
   
    if( znak == '-' && !stos.empty() )
         stos.pop( liczba );
   
    cout << liczba << endl;
}
P-10550
Lord_Voldemort
Temat założony przez niniejszego użytkownika
Stos
» 2009-09-30 20:29:49
Właśnie pomyliły mi się troszeczkę funkcje w STL-u. To jest poprawiony kod prawie działający jednak wciąż wyświetla trochę złe wyniki.

C/C++
#include <iostream>
#include <stack>
using namespace std;
int main()
{
   
    stack < int > stos;
    char znak;
    int liczba;
    while( cin >> znak )
    {
        if( znak == '+' && stos.size() < 10 )
        {
            cin >> liczba;
            stos.push( liczba );
            cout << ":)" << endl;
        }
        if( stos.size() > 10 )
        {
            cout << ":(" << endl;
        }
        if( znak == '-' && stos.empty() )
        {
            cout << ":(" << endl;
        }
        if( znak == '-' && !stos.empty() )
        {
            liczba = stos.top();
            stos.pop();
            cout << liczba << endl;
        }
    }
    system( "PAUSE" );
}

Błąd polega na tym, iż po wpisaniu do stosu liczby większej niż 10 nie wyświetla się ":("
P-10552
jimmye
» 2009-10-04 10:56:38
Próbowałeś tak ?
C/C++
#include <iostream>
#include <stack>
using namespace std;
int main()
{
   
    stack < int > stos;
    char znak;
    int liczba;
    while( cin >> znak )
    {
        if( znak == '+' && stos.size() < 10 )
        {
            cin >> liczba;
            stos.push( liczba );
            cout << ":)" << endl;
        }
        else if( znak == '+' && stos.size() >= 10 )
        {
            cout << ":(" << endl;
        }
        if( znak == '-' && stos.empty() )
        {
            cout << ":(" << endl;
        }
        if( znak == '-' && !stos.empty() )
        {
            liczba = stos.top();
            stos.pop();
            cout << liczba << endl;
        }
    }
    system( "PAUSE" );
}
P-10623
manfred
» 2009-09-30 19:45:49
Klamerki ci w jednym miejscu zjadło. W innym zresztą też, i jakoś dziwnie wykonujesz pop.
P-19395
« 1 »
  Strona 1 z 1