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

[C++] SPOJ - Stos

Ostatnio zmodyfikowano 2019-12-17 22:48
Autor Wiadomość
RareKey_v2
Temat założony przez niniejszego użytkownika
[C++] SPOJ - Stos
» 2019-12-17 17:51:29
Witam,

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.

Wykonałem wszystko zgodnie z poleceniem, chociaż kiedy daje kod do zaliczenia to wyskakuję komunikat: "Przekroczono limit czasu".
Kod:

C/C++
#include <iostream>

using namespace std;

int tablica[ 10 ];
int rozmiar;


void push()
{
   
    if( rozmiar >= 10 )
         cout << "):" << endl;
   
    else
    {
       
        cin >> tablica[ rozmiar ];
        rozmiar = rozmiar + 1;
        cout << "(:" << endl;
    }
   
}

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


int main()
{
   
    char a;
   
    for(;; )
    {
        cin >> a;
       
        if( a == '+' )
        {
            push();
        }
        else
       
       
        if( a == '-' )
        {
            pop();
           
        }
        else
             cout << "):" << endl;
       
    }
   
   
    return 0;
}
Z góry dziękuję za pomoc.
P-175806
pekfos
» 2019-12-17 18:09:40
Program powinien móc się zakończyć, a Twój wykonuje się w pętli nieskończonej.
» Kurs C++ / FAQMam problem z zadaniem ze SPOJa pytanie/odpowiedź
P-175807
RareKey_v2
Temat założony przez niniejszego użytkownika
» 2019-12-17 18:57:14
Już nie ma pętli nieskończonej. Nie wiem czy o to chodziło, bo teraz wyskakuję "Błędna odpowiedź" chociaż wyniki wychodzą tak jak należy.

C/C++
#include <iostream>

using namespace std;

int tablica[ 10 ];
int rozmiar;


void push()
{
   
    if( rozmiar >= 10 )
         cout << ":(" << endl;
   
    else
    {
       
        cin >> tablica[ rozmiar ];
        rozmiar = rozmiar + 1;
        cout << ":)" << endl;
    }
   
}

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


int main()
{
   
    int d;
    char a;
    cout << "Podaj liczbe testow:";
    cin >> d;
   
    for( int x = 0; x <= d; x++ )
    {
        cin >> a;
       
        if( a == '+' )
        {
            push();
        }
        else
       
       
        if( a == '-' )
        {
            pop();
           
        }
        else
             cout << ":(" << endl;
       
    }
   
   
    return 0;
}
P-175808
pekfos
» 2019-12-17 19:33:21
Wejście przyjmowane przez program jest niezgodne ze specyfikacją z zadania.
P-175809
RareKey_v2
Temat założony przez niniejszego użytkownika
» 2019-12-17 19:40:12
Chodzi o to ?
C/C++
cout << "Podaj liczbe testow:";
cin >> d;
P-175810
pekfos
» 2019-12-17 20:09:51
A zadanie mówi coś, że ilość danych jest z góry podana? Masz wczytywać, aż się skończą.
P-175811
RareKey_v2
Temat założony przez niniejszego użytkownika
» 2019-12-17 21:38:14
Zmieniłem to, ale nadal:" Błędna odpowiedź".

C/C++
#include <iostream>

using namespace std;

int tablica[ 10 ];
int rozmiar;


void push()
{
   
    if( rozmiar >= 10 )
         cout << ":(" << endl;
   
    else
    {
       
        cin >> tablica[ rozmiar ];
        rozmiar = rozmiar + 1;
        cout << ":)" << endl;
    }
   
}

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


int main()
{
   
    int d;
    char a;
   
   
    while( cin >> a )
    {
       
       
        if( a == '+' )
        {
            push();
        }
        else
       
       
        if( a == '-' )
        {
            pop();
           
        }
        else
             cout << ":(" << endl;
       
    }
   
   
    return 0;
}
P-175813
nanoant20
» 2019-12-17 22:18:17
w petli while
usuń
C/C++
else
     cout << ":(" << endl;
i pop() jest do poprawienia
C/C++
//if( rozmiar < 1 ) //warunek jest zły

if( warunek )
{
    cout << tablica[ rozmiar - 1 ] << endl;
    rozmiar = rozmiar - 1;
} else {
    cout << ":(" << endl;
}


P-175814
« 1 » 2
  Strona 1 z 2 Następna strona