Analisi codice C++

thity92

Nuovo Utente
4
0
Ciao ragazzi l'esercizio mi chiede cosa stampa il seguente programma:

int main () {
inti i;
int j;
for ( i=0;j<=10;i++) {
for (J=0; (j+1)*(j+1)<=i;J++);
printf("%i, " ,j);
}
for (i=2;i<=30;i++) {
for(j=2;i%j !=0;j++);
if(j==i)
printf("%i\n",i);
}
}

A questo punto la mia domanda è , io eseguo la prima iterazione con i =0 , "entro" nel secondo for e mi accorgo che la condizione non è verificata cosi non eseguo il primo printf, cosi proseguo ed "entro nel terzo for" e mi inizializza la variabile i a 2 , cosi dato che nel 4° for e verificta la condizione verifico l if in questo caso risulta vero e quindi stampo i che dovrebbe essere due .

Ovviamente la soluzione dice che la prima iterazine stampa 0 ma non capisco perchè?
Mi potete aiutare a ragionare con i for annidati ?
Grazie mille
 

fenlux

Utente Attivo
221
39
CPU
i5-3570K
Dissipatore
CM Hyper 212+
Scheda Madre
ASRock Z77 Pro4-M
HDD
Crucial MX300 525GB
RAM
Kingston HyperX 16GB
GPU
GTX660
Monitor
Acer H223HQ
PSU
CM M520
Case
CM 690
OS
Win10 64bit

thity92

Nuovo Utente
4
0
Ok quindi se ho capito bene dato che la condizione del secondo for non è verificata stampa j=0 giusto?
mentre nel terzo e quarto for alla prima iterazione non stampa nulla perchè non sono verificate le condizioni ? giusto?
 

sLN

Nuovo Utente
59
5
CPU
Intel i5 4670@3.40GHz
Scheda Madre
AsRock h87 Pro4
HDD
WD Caviar Blue 1TB
RAM
Ballistix Sport XT 2x4 GB 1600 MHz CL9
GPU
Sapphire r9 270x
Audio
Integrata Realtek ALC892
Monitor
Asus VG248QE 144Hz
PSU
CM b600 600W
Case
Aerocool GT Advance White
OS
Windows 7 64bit / Ubuntu 14.04 LTS
Ciao,
cerco innanzitutto di rendertelo più comprensibile, perché confondi l'ordine del for.


Allora un ciclo for
for(x=0;x<=10;x++);
è equivalente a


int x=0
while(x<=10){
x++};


Quindi prendo il programma e ti converto i due for con il punto e virgola per renderti il tutto più chiaro


int main () {
int i;
int j;
for ( i=0;j<=10;i++) {
j=0;
while ((j+1)*(j+1)<=i){
j++;}
printf("%d " ,j);
}
for (i=2;i<=30;i++) {
j=2;
while (i%j!=0){
j++;}
if(j==i){
printf("%d\n",i);
}
}
}


ricorda che esci dal ciclo quando la condizione è falsa
quindi nel tuo primo for viene stampato 0 perché (j+1)*(j+1) è maggiore di i(i viene incrementato dopo il corpo del for) e di conseguenza esce direttamente dal while senza incrementare j.
Nel tuo secondo for viene stampato 2 perché i=2, j=2. i%j è 0 quindi la condizione è falsa e si esce direttamente dal while senza incrementare j, 2==2 stampa 2.
Se non hai capito cerco di rispiegartelo in qualche altro modo :utonto::utonto:
 
Ultima modifica:
  • Mi piace
Reazioni: fenlux

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili