Esercizio sul ciclo for in C ?

Messaggioda simonerusso64 » 16/07/2018, 00:22

int y=5, x=2, k;
for(k=y; k>0; k+=x) {x-=3; printf("#");}

Perchè questo ciclo non è infinito ? Inoltre non ho ben capito come si valuta l'istruzione x-=3 .
simonerusso64
Junior Member
Junior Member
 
Messaggio: 57 di 212
Iscritto il: 30/10/2017, 22:44

Re: Esercizio sul ciclo for in C ?

Messaggioda claudio86 » 16/07/2018, 07:20

"x -= 3" è equivalente a "x = x - 3" (eccetto in C++ per tipi complessi). Stesso discorso per +=, *=, /=, %=, >>=, <<=, &=, |=, ^=.
Quindi dopo la prima iterazione k inizia a decrescere e prima o poi diventa negativo.
"This theorem, as many others, is proven by writing zero in a creative way…"
claudio86
Senior Member
Senior Member
 
Messaggio: 489 di 1130
Iscritto il: 09/01/2011, 15:12

Re: Esercizio sul ciclo for in C ?

Messaggioda simonerusso64 » 16/07/2018, 11:55

Sisi questo lo sapevo. Non riesco a spiegarmi perchè questo frammento stampa 2 "#" .Quello rinchiuso nel for l'ho capito ma non capisco come dall'istruzione seguente si arrivi a 2.
simonerusso64
Junior Member
Junior Member
 
Messaggio: 59 di 212
Iscritto il: 30/10/2017, 22:44

Re: Esercizio sul ciclo for in C ?

Messaggioda claudio86 » 16/07/2018, 17:41

Conta quante volte il ciclo viene eseguito.
All'inizio y = 5, x = 2, k = y = 5.

Prima iterazione, continuo il ciclo? k = 5 > 0, sì, quindi esegui il corpo del ciclo.
x = x - 3 = 2 - 3 = -1
Stampa un cancelletto
Fine del corpo, k = k + x = 5 + -1 = 4

Seconda iterazione, continuo il ciclo? k = 4 > 0, sì, quindi esegui il corpo del ciclo.
x = x - 3 = -1 - 3 = -4
Stampa un cancelletto
Fine del corpo, k = k + x = 4 + -4 = 0

Terza iterazione, continuo il ciclo? k = 0 > 0, no, quindi esci dal ciclo.

In tutto hai stampato due cancelletti.
"This theorem, as many others, is proven by writing zero in a creative way…"
claudio86
Senior Member
Senior Member
 
Messaggio: 490 di 1130
Iscritto il: 09/01/2011, 15:12

Re: Esercizio sul ciclo for in C ?

Messaggioda simonerusso64 » 16/07/2018, 17:44

Grazie, sei stato chiarissimo.
simonerusso64
Junior Member
Junior Member
 
Messaggio: 61 di 212
Iscritto il: 30/10/2017, 22:44


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite