Porzione di codice in c (argomento ciclo while)
salve a tutti...mi viene fornito una porzione di codice in C:
i=n;
while(i++){
printf("%d\n", i);
}
mi viene chiesto quante volte viene ripetuto il ciclo e che cosa produrrebbe se n=4 e n=-3....
ecco non riesco proprio c capire...se non cè nessun tipo di condizione per l uscita il ciclo non è infinito?
qualcuno può aiutarmi...??? grazie a tutti in anticipo...!!!
i=n;
while(i++){
printf("%d\n", i);
}
mi viene chiesto quante volte viene ripetuto il ciclo e che cosa produrrebbe se n=4 e n=-3....
ecco non riesco proprio c capire...se non cè nessun tipo di condizione per l uscita il ciclo non è infinito?
qualcuno può aiutarmi...??? grazie a tutti in anticipo...!!!
Risposte
Ciao,
bhe non è complicato, basta ricordarsi quali sono i vincoli perchè una condizione sia vera o false nel linguaggio C.
Esempio la valutazione di un qualsiasi condizione da 0 se vero, qualsiasi valore intero per falso.
tipo: if(3==3)
risulterà if(0) perciò sarà valutato il ramo if, perchè l'uguaglianza vera, da come risultato 0, e che dato all'If darà come risultato vero anch'esso perchè la sua condizione è verificata.
Per il while il concetto è analgo, ricordandoti che il while è una condizione di uscita. A te trarne le conclusioni.
Spero sia utile
bhe non è complicato, basta ricordarsi quali sono i vincoli perchè una condizione sia vera o false nel linguaggio C.
Esempio la valutazione di un qualsiasi condizione da 0 se vero, qualsiasi valore intero per falso.
tipo: if(3==3)
risulterà if(0) perciò sarà valutato il ramo if, perchè l'uguaglianza vera, da come risultato 0, e che dato all'If darà come risultato vero anch'esso perchè la sua condizione è verificata.
Per il while il concetto è analgo, ricordandoti che il while è una condizione di uscita. A te trarne le conclusioni.
Spero sia utile

@ham_burst
Mi sa tanto che ti stai sbagliando, infatti è esattamente il contrario di come dici, in quanto in c lo 0 è falso, qualsiasi altro valore diverso da zero è vero.
A sostegno della mia tesi prova ad eseguire questo pezzo di codice
oppure per riprendere il tuo esempio
Per quanto riguarda la questione posta da germano88
Il consiglio che ti posso dare in questi casi è uno: scrivi il pezzo di codice e provalo, così avrai sicuramente la risposta giusta.
Per quanto riguarda la teoria ti basta sapere che si esce dal while quando la condizione diventa falsa, quindi in questo caso uscirai quando la i sarà uguale a zero.
Prova un po' e facci sapere, se hai problemi chiedi pure.
Mi sa tanto che ti stai sbagliando, infatti è esattamente il contrario di come dici, in quanto in c lo 0 è falso, qualsiasi altro valore diverso da zero è vero.
A sostegno della mia tesi prova ad eseguire questo pezzo di codice
if(1) printf("\nVero\n"); else printf("\nFalso\n"); if(0) printf("\nVero\n"); else printf("\nFalso\n");
oppure per riprendere il tuo esempio
if((3==3)==1) printf("\nVero\n"); else printf("\nFalso\n"); if((3==3)==0) printf("\nVero\n"); else printf("\nFalso\n");
Per quanto riguarda la questione posta da germano88
Il consiglio che ti posso dare in questi casi è uno: scrivi il pezzo di codice e provalo, così avrai sicuramente la risposta giusta.
Per quanto riguarda la teoria ti basta sapere che si esce dal while quando la condizione diventa falsa, quindi in questo caso uscirai quando la i sarà uguale a zero.
Prova un po' e facci sapere, se hai problemi chiedi pure.
azz come pensavo ho scritto il contrario...chiedo scusa.
Hai ragione _overflow_ mi è venuto in mente mentre ero in macchina di aver sovrapposto un esercizio di un altro corso, che era di modificare la semantica delle condizioni dell'If.
spero di non aver creato confusione, prendi come corretto quello che ha detto overflow, sorry
Hai ragione _overflow_ mi è venuto in mente mentre ero in macchina di aver sovrapposto un esercizio di un altro corso, che era di modificare la semantica delle condizioni dell'If.
spero di non aver creato confusione, prendi come corretto quello che ha detto overflow, sorry

ciao...grazie ad entrambi per l interessamento...a me non è chiaro quando dici che si esce dal ciclo quando la i è uguale a zero...perchè? qual è la condizione che me l avrebbe dovuto far capire? scusa la mia ignoranza...

bhe fai un'analisi di questo banale codice:
hai due valori $n=4$ ed $n=-3$
perciò: $i=4$ ed $i=-3$
condizioni per l'uscita del while: che la valutazione dell'espressione sia false, che equivale a dire che il valore sia 0.
Ad ogni iterazione prima si incrementa il valore e poi si valuta l'espressione (condizione) del while.
1° ciclo: $i=4$
$i=4+1$
while(5==0)? No, perciò stampa
2° ciclo: $i=5$
$i=5+1$
while(6==0)? No, perciò stampa
... domandati adesso quando sarà 0?
medesima analisi con il secondo caso.
hai due valori $n=4$ ed $n=-3$
perciò: $i=4$ ed $i=-3$
condizioni per l'uscita del while: che la valutazione dell'espressione sia false, che equivale a dire che il valore sia 0.
Ad ogni iterazione prima si incrementa il valore e poi si valuta l'espressione (condizione) del while.
1° ciclo: $i=4$
$i=4+1$
while(5==0)? No, perciò stampa
2° ciclo: $i=5$
$i=5+1$
while(6==0)? No, perciò stampa
... domandati adesso quando sarà 0?
medesima analisi con il secondo caso.

ok mi sembra di capire che nel primo caso dove n=4 ...non uscira mai dal ciclo perchè i non sarà mai = 0...invece con n=-3...stamperà -2 -1 e poi uscirà dal ciclo ...giusto?
Yes

per $n=4$, è piuttosto semplice, per $n=-3$ non è esatto, è vero che termina, ma non è esatto cosa stampa.
te ne propongo una variante:
cosa stampa secondo te questo codice, e qual'è la differenza di valutazione con il tuo?
te ne propongo una variante:
i=-3; while(++i){ printf("%d\n", i); }
cosa stampa secondo te questo codice, e qual'è la differenza di valutazione con il tuo?
mmm...scusami ma non so distinguere la differenza con l altro codice..........no stampa sempre gli stessi valori -2 e -1?
eh no ha ragione ham_burst.
La differenza tra i codici sta nel fatto che tu usi il post-incremento (i++) mentre quello che ti ha proposto ham usa il pre-incremento.
La differenza tra i codici sta nel fatto che tu usi il post-incremento (i++) mentre quello che ti ha proposto ham usa il pre-incremento.