Informatică, întrebare adresată de Cattt0987, 9 ani în urmă

Am pus solutia la o problema pe pbinfo si primesc incontinuu 80p din cauza memoriei (caught fatal signal 11). Am sa las mai jos cerinta problemei si solutia mea, imi puteti spune unde e greseala, va rog?
Cerința
Să se scrie un program care gestionează o coadă de numere întregi. Inițial coada este vidă. Programul va citi de la tastatură o listă de operații, care pot fi:

push X – adaugă valoarea întreagă X în coadă;
pop – elimină elementul din coadă;
front – afișează elementul de la începutul cozii.
Programul va realiza asupra cozii operațiile citite, în ordine. Afișările se fac pe ecran, câte o valoare pe linie.

Date de intrare
Programul citește de la tastatură un număr n, apoi cele n operații,

Date de ieșire
Programul va afișa pe ecran numerele rezultat ale operațiilor front, câte unul pe o linie.

Restricții și precizări
coada nu va conține la un moment dat mai mult de 1000 elemente
elementele cozii vor fi cuprinse între -1.000.000 și 1.000.000
dacă la un moment dat se aplică operația pop și coada nu conține niciun element, operația nu are efect
dacă la un moment dat se aplică operația front și coada nu conține niciun element, operația nu are efect (nu se afișează nimic)


#include
#include
using namespace std;

int main()
{ int n,k=0,i,cd[1000],v[1000],p;
char s[20];
cin>>n;
for(i=1;i<=n;i++)
{ cin>>s;
if(strcmp(s,"push")==0)
{ cin>>v[i];
k++;
cd[k]=v[i];}
if(strcmp(s,"pop")==0 && k>0)
{ for(p=1;p<k;p++)
     { cd[p]=cd[p+1];}
k--; }
if(strcmp(s,"front")==0 && k>0)
{cout<<cd[1]<<endl;}
return 0;
}


artur99: În sfârșit. Chiar dubios a fost până mi-am dat seama. Problema nu e de la stivă, pentru că, într-adevăr, restricția e respectată „coada nu va conține la un moment dat mai mult de 1000 elemente”, parțial
artur99: (nu știu de ce stochezi de la 1.. În mod normal, în vector se stochează de la 0, nu de la 1. :)) Și din cauză că stochezi de la 1, pentru 1000 de elemente, ultimul l-ai stoca la cd[1000], și pentru asta ai avea nevoie de 1001 spații (0-1000), dar în fine, nu asta cauzează eroarea, cu toate că e și asta incorect).
artur99: Problema e de la vectorul v. Nu există nicio restricție pusă pe n. Dacă n e 1 milion, sigur nu poți scrie în v[1000000]. :))
artur99: Poți, ori să mărești v-ul la 10 mii sau ceva, ori, și mai bine, să scapi definitiv de v.
artur99: Chiar ai nevoie de el? :)) Ai nevoie să stochezi undeva numerele alea? Le folosești undeva? Nu prea cred. Deci poți declara un int, pur și simplu, în care citești numărul, îl pui pe stivă, apoi nu-ți mai pasă de valoarea aia, următoarea dată când citești ceva la push, citești în același int.
Cattt0987: asta era, mersi multt =)
artur99: Np

Răspunsuri la întrebare

Răspuns de ap53
6

Iti atasez solutia problemei in C++. Acum sper sa te descurci.

Anexe:
Alte întrebări interesante