[C++] SPOJ - Stos
Ostatnio zmodyfikowano 2019-12-17 22:48
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: #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.  | 
 | 
pekfos  | 
» 2019-12-17 18:09:40  | 
 | 
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. #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; }
   | 
 | 
pekfos  | 
» 2019-12-17 19:33:21 Wejście przyjmowane przez program jest niezgodne ze specyfikacją z zadania.  | 
 | 
RareKey_v2 Temat założony przez niniejszego użytkownika  | 
» 2019-12-17 19:40:12 Chodzi o to ? cout << "Podaj liczbe testow:"; cin >> d;
   | 
 | 
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ą.  | 
 | 
RareKey_v2 Temat założony przez niniejszego użytkownika  | 
» 2019-12-17 21:38:14 Zmieniłem to, ale nadal:" Błędna odpowiedź". #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; }
   | 
 | 
nanoant20  | 
» 2019-12-17 22:18:17 w petli while usuń else      cout << ":(" << endl; i pop() jest do poprawienia 
  if( warunek ) {     cout << tablica[ rozmiar - 1 ] << endl;     rozmiar = rozmiar - 1; } else {     cout << ":(" << endl; }
 
  | 
 | 
|  « 1 »  2 |