Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Qrevo Curv 2 Flow è l'ultima novità di casa Roborock per la pulizia di casa: un robot completo, forte di un sistema di lavaggio dei pavimenti basato su rullo che si estende a seguire il profilo delle pareti abbinato ad un potente motore di aspirazione con doppia spazzola laterale
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Abbiamo guidato per diversi giorni la Alpine A290, la prima elettrica del nuovo corso della marca. Non è solo una Renault 5 sotto steroidi, ha una sua identità e vuole farsi guidare
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Abbiamo provato a fondo il nuovo Magic 8 Lite di HONOR, e per farlo siamo volati fino a Marrakech , dove abbiamo testato la resistenza di questo smartphone in ogni condizione possibile ed immaginabile. Il risultato? Uno smartphone praticamente indistruttibile e con un'autonomia davvero ottima. Ma c'è molto altro da sapere su Magic 8 Lite, ve lo raccontiamo in questa recensione completa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-03-2015, 16:00   #1
TheVeryKill
Member
 
Iscritto dal: Nov 2010
Messaggi: 42
[C] Stack e funzione Pop

Salve a tutti, sto studiando il linguaggio C e prendendo spunto da i programmi di un professore mi sto esercitando sullo Stack e le funzioni di Push e Pop. Il file Cpp che ho sottomano è questo:



#define MAX 4

int main(){
int stack[MAX+1];
int i,n,stato;
stack[0]=MAX;

for (i=1;i<=stack[0];i++){
printf("Inserisci il %d elemento dello stack (max 4 elementi):\n",i);
scanf("%d",&stack);
}

printf("\nLo stack e\':\n");
for(i=1;i<=stack[0];i++){
printf("%d ",stack);
}
printf("\n");
stato=1;
while(stato==1||stato==2){
printf("Cosa vuoi fare?\n POP(1) - PUSH(2) - STAMPA(3)\n");
scanf("%d",&stato);
switch(stato){
case 1:
if(stack[0]==0){
printf("\nNon ci sono elementi nello stack\n");
}
else{
stack[0]--;
printf("Il top era %d\n",stack[stack[0]+1]);
}
break;

case 2:
if(stack[0]==MAX){
printf("\nLo stack e\' pieno\n");
}
else{
printf("Che valore vuoi mettere al top?\n");
scanf("%d",&n);
stack[stack[0]+1]=n;
stack[0]++;
}
break;
}
}

printf("\nLo stack e\':\n");
for(i=1;i<=stack[0];i++){
printf("%d ",stack);
}
printf("\n");

system("PAUSE");
return 0;

}


Ovviamente mancano le librerie ma non è questo il punto. Come potete vedere in grassetto ho indicato una piccola stringa, la mia domanda è: ma cosa vorrebbe indicare? Cioè mi spiego meglio: come da struttura dovrebbe dire "Se lo stack è vuoto dì all'utente che non si può togliere più nulla" ma perché stack[0]==0 dovrebbe indicare stack vuoto? Lo stack così definito non è altro che un vettore di 5 elementi (0 1 2 3 4) ove il valore dell'elemento 0 è pari a MAX (costante predefinita pari a 4), qualcuno mi può spiegare perchè il confronto positivo tra stack[0] e 0 sta ad indicare che il contenitore è vuoto?
Ringrazio tutti in anticipo!
TheVeryKill è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2015, 16:05   #2
Simonex84
Senior Member
 
L'Avatar di Simonex84
 
Iscritto dal: Jun 2003
Messaggi: 15829
probabilmente l'assunzione di chi ha scritto il codice è che 0 indica "nessun elemento" e siccome lo stack è un "oggetto" dove gli elementi vengono impilati, se il primo posto utile (stack[0]) è vuoto (cioè uguale a 0) la pila è vuota e quindi non si può fare nessun push

PS, se stai iniziando a studiare un linguagigo di programmazione (vale per tutti i linguaggi) devi sempre scrivere il codice con un'indentazione corretta, così come l'hai scritto te è illeggibile e un casino da debuggare in caso di errori

Ultima modifica di Simonex84 : 13-03-2015 alle 16:09.
Simonex84 è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2015, 16:09   #3
TheVeryKill
Member
 
Iscritto dal: Nov 2010
Messaggi: 42
Sì ma come puoi vedere ad inizio compilazione ha dichiarato che quella posizione è occupata da un elemento pari a MAX che è uguale a 4, come può mai variare una cosa fissata quindi?

PS: io uso il costrutto funzionale, cioè con i void e poi richiamo tutto nel main, questa è fatta così solo per dare un idea di come si esercita in situazioni del genere.
TheVeryKill è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2015, 16:11   #4
Simonex84
Senior Member
 
L'Avatar di Simonex84
 
Iscritto dal: Jun 2003
Messaggi: 15829
Quote:
Originariamente inviato da TheVeryKill Guarda i messaggi
Sì ma come puoi vedere ad inizio compilazione ha dichiarato che quella posizione è occupata da un elemento pari a MAX che è uguale a 4, come può mai variare una cosa fissata quindi?
se però fai due pop al primo hai "MAX" al secondo niente
Simonex84 è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2015, 16:18   #5
TheVeryKill
Member
 
Iscritto dal: Nov 2010
Messaggi: 42
Cavolo hai ragione ora ci arrivo! E' ovvio che non è uguale a 0 appena inizio ma dopo che ho fatto 4 Pop si svuota!! XD Io ragionavo in termini diciamo immediati senza pensare che quella istruzione era vera solo dopo che avevo fatto 4 Pop ed ero passato da Max a 0 xD Grazie mille!
TheVeryKill è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2015, 16:20   #6
Simonex84
Senior Member
 
L'Avatar di Simonex84
 
Iscritto dal: Jun 2003
Messaggi: 15829
Di niente mi raccomando con l'indentazione è molto ma molto importante
Simonex84 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Roborock Qrevo Curv 2 Flow: ora lava con un rullo Roborock Qrevo Curv 2 Flow: ora lava con un rull...
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite Alpine A290 alla prova: un'auto bella che ti fa ...
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Oracle NetSuite si potenzia con nuove fu...
Musica generata con l'IA: Sony lavora a ...
Cyberpunk 2077 in versione PC su smartph...
BYD si gioca un grosso jolly: pronta Rac...
Samsung annuncia l'arrivo in Italia dei ...
Offerta lancio Pixel 10a: come ottenere ...
Google presenta Pixel 10a: poche le novi...
Caos F1 2026: 14 monoposto senza omologa...
Tesla festeggia il primo Cybercab prodot...
Desktop piccolo e potente? NZXT H2 Flow ...
Polestar spinge sull'acceleratore: arriv...
Nuovo record mondiale nel fotovoltaico: ...
L'ultimo baluardo cade: fine supporto pe...
'Il mondo non ha mai visto nulla di simi...
La Commissione europea mette sotto indag...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:32.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v