problem: symulacja stosu SPOJ

0

Witam, mam mały problem z zadaniem ze SPOJ'a o następującej treści:

Napisz program, który w 10-elementowej tablicy symuluje działanie stosu. Na początku stos jest pusty, a następnie ma się zapełniać lub opróżniać zgodnie z wczytanymi z wejścia poleceniami.

Wejście
Na wejście programu podana zostanie pewna nieokreślona liczba zestawów danych. Zestawy składają się albo z jednej linii zawierającej znak - (polecenie zdjęcia liczby ze stosu i wypisania jej na wyjście), albo dwóch linii, z których pierwsza zawiera znak + (polecenie wstawienia liczby na stos), a druga niewielką liczbę całkowitą. Poszczególne zestawy zostaną rozdzielone znakiem nowej linii.

Wyjście
Na wyjściu programu ma się pojawić ciąg napisów będących rezultatem wykonania pojawiających się na wejściu poleceń (jeżeli polecenie udało się wykonać, to wypisujemy jego rezultat: w przypadku wstawienia liczby na stos wypisujemy ':)'; w przypadku zdjęcia liczby jej wartość; w przypadku błędu ':('). Poszczególne napisy należy rozdzielić znakami nowej linii.

Przykład
Wejście:
+
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
0
+
1

Wyjście:
:)
:)
:)
:)
:)
:)
:)
:)
:)
:)
:(
0
9
8
7
6
5
4
3
2
1
:(

 
#include <iostream>
#include <cstdio>
using namespace std;

int tablica[10];
int wielkosc;
char a;


void push()
{
    if (wielkosc>10)
        cout <<":("<<endl;

    else
    {
        wielkosc=wielkosc+1;
        cin>>tablica[wielkosc];
        cout<<":)"<<endl;
    }


}


void pop()
{
    if(wielkosc<1)
        cout<<":("<<endl;
    else
    {
        cout<<tablica[wielkosc-1]<<endl;
        cout<<":)"<<endl;
        wielkosc--;
    }


}


int main()
{


    for(;;)
    {


        cin>>a;

        if (a=='+')

            push();


        if (a=='-')

            pop();
    }

    return 0;

}

Problem napotykam w funkcji pop, która nie zdejmuje poprawnie pierwszej liczby ze stosu. Rozwiązanie jest prawdopodobnie banalne, ale dopiero się uczę i struktury danych to dla mnie mordęga. Cały program można napisać pewnie lepiej i krócej, ale chcę rozwiązać ten problem tymi podstawowymi funkcjami. Jakieś podpowiedzi, nie chcę gotowego rozwiązania. Pozdrawiam

1
  1. W push masz niewłaściwe wstawianie wartości, powinno być:
cin>>tablica[wielkosc];
wielkosc=wielkosc+1;
  1. nie inicjujesz zmiennej "wielkosc"
0

@vpiotr a właśnie, że inicjuje. Możliwe, że nieświadomie, ale inicjuje. Zmienne, które mają static storage duration (a globalne zmienne takie są) inicjowane są zawsze do 0.

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