Porzione di codice in c (argomento ciclo while)

germano88
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...!!!

Risposte
hamming_burst
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 :-)

_overflow_1
@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

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.

hamming_burst
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 :-)

germano88
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... :)

hamming_burst
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. :-)

germano88
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?

_overflow_1
Yes ;)

hamming_burst
per $n=4$, è piuttosto semplice, per $n=-3$ non è esatto, è vero che termina, ma non è esatto cosa stampa.

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?

germano88
mmm...scusami ma non so distinguere la differenza con l altro codice..........no stampa sempre gli stessi valori -2 e -1?

_overflow_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.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.