Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    106

    Esempio incremento nel for[c++]

    Scusate non riesco a capire cosa cambia in questo esempio..
    codice:
        int n=5;
        for(int i=0;i<n;++i)cout<<i<<endl;
        cout<<"Esercizio"<<endl;
        for(int i=0;i<n;i++)cout<<i<<endl;
    La stampa viene allo stesso modo sia che metto i++,che ++i,io credevo si avere un risultato diverso..
    codice:
    0
    1
    2
    3
    4
    Esercizio
    0
    1
    2
    3
    4
    Potreste spiegarmi il motivo??

  2. #2
    In entrambi i casi la variabile i viene incrementata prima della verifica i<n. Quindi sì, direi che è giusto ottenere lo stesso risultato. Pre-incremento e post-incremento si riferiscono all'istruzione dove sono contenuti, non alle successive. In questo caso pensa semplicemente che i venga incrementata alla fine di ogni ciclo.

    Un po' come se fosse:

    codice:
    while (i < n)
    {
       //....
       i++; // (++i è lo stesso, solo un minimo più veloce mi pare)
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    106
    Hai ragione ma questa domanda mi ha fatto pensare ad un'altra cosa..
    Nella stampa con ++i,
    non vado a stampare con il valore gia incrementato??
    es:
    codice:
    int i=5;
    for(int i=0;i<n;++i){cout<<i<<endl;}
    in questo modo??
    codice:
    1
    2
    3
    4

  4. #4
    No perchè, come ti ho già detto, i viene incrementata alla fine del ciclo, quindi la prima volta vale 0 (il valore a cui l'hai inizializzata).

    codice:
    int i = 0;
    while (i < n)
    {
       cout << i << endl;
       ++i;   // l'incremento è come se avvenisse alla fine del ciclo while corrispondente
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    106
    Originariamente inviato da ESSE-EFFE
    No perchè, come ti ho già detto, i viene incrementata alla fine del ciclo, quindi la prima volta vale 0 (il valore a cui l'hai inizializzata).

    codice:
    int i = 0;
    while (i < n)
    {
       cout << i << endl;
       ++i;   // l'incremento è come se avvenisse alla fine del ciclo while corrispondente
    }
    Capito ma a questo punto,con i++,che prima di incrementare i,restiruisce lo stesso i non incrementato,dovrebbe stamapare due volte zero??
    codice:
    0
    0
    1
    2
    3
    4

  6. #6
    Originariamente inviato da Gianni91
    Capito ma a questo punto,con i++,che prima di incrementare i,restiruisce lo stesso i non incrementato,dovrebbe stamapare due volte zero??
    No, l'incremento viene eseguito comunque alla fine (lascia perdere cosa restituisce, i viene incrementato in ogni caso), guarda tu stesso:

    codice:
    int i = 0;
    while (i < n)
    {
       cout << i << endl;
       i++;   // cosa cambia rispetto a prima?
    }

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    225

    Re: Esempio incremento nel for[c++]

    [QUOTE]Originariamente inviato da Gianni91
    Scusate non riesco a capire cosa cambia in questo esempio..
    codice:
        int n=5;
        for(int i=0;i<n;++i)cout<<i<<endl;
        cout<<"Esercizio"<<endl;
        for(int i=0;i<n;i++)cout<<i<<endl;
    [QUOTE]

    ai fini della stampa il risultato è lo stesso.

    Nelle prestazioni il ciclo che usa l'operatore di incremento postfisso è leggermente più lento in quanto il compilatore deve prima memorizzare la variabile (per renderla eventualmente disponibile) e poi incrementa. Nel caso dell'operatore prefisso il compilatore deve solo incrementare la variabile, e fa quindi una operazione in meno.

    In realtà un moderno compilatore probabilmente ottimizza il codice e genera lo stesso codice macchina in entrambi i casi.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    106
    codice:
    int i = 0;
    while (i < n)
    {
       cout << i << endl;
       i++;   // cosa cambia rispetto a prima?
    }
    In effetti compilandolo, ho lo stesso risultato..

    Facciamo cosi vediamo la diffrenza tra i++ e ++i,in una assegnazione ad un'altra variabile..
    codice:
    int a = 5; 
    int b; 
     b = ++a; // adesso 'b' vale 6e 'a' vale 6
    questo perchè icrementa subito la a..
    codice:
    int a = 5; 
    int b;  
    b = a++; // adesso 'b' vale 5 e 'a' vale 6
    questo perché la variabile viene prima utilizzata e poi incrementata..
    Questo é quello che ho capito io della differenza tra le due..

    Ora nel tuo codice
    codice:
    int i = 0;
    while (i < n)
    {
       cout << i << endl;
       i++;   
    }
    Perché non viene utilizzata un'altra volta come i non incrementata??? .Intendo reutilizzata xhè ho prima il cout...
    Cioé non funziona la regola di prima..

  9. #9
    Originariamente inviato da Gianni91
    Perché non viene utilizzata un'altra volta come i non incrementata??? .Intendo reutilizzata xhè ho prima il cout...
    Ma perchè dovrebbe, il cout non è la stessa istruzione. Supponi di avere altre istruzioni tra la cout e l'incremento, perchè dovrebbero essere legate le due cose?

    Come giustamente hai visto, pre-incremento e post-incremento sono significativi in casi come "a = ++b", ma se devi solo incrementare una variabile, sia i++ che ++i equivalgono (salvo le differenze di cui si parlava) a: i = i + 1.

    prova invece qualcosa come

    cout << i++ << endl;

    o

    cout << ++i << endl;

    per capire la differenza!

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    106
    Originariamente inviato da ESSE-EFFE
    Ma perchè dovrebbe, il cout non è la stessa istruzione. Supponi di avere altre istruzioni tra la cout e l'incremento, perchè dovrebbero essere legate le due cose?
    scusami intendevo dire,che contralla se i<n ,stampa i(mettiamo valga 2) ,non la incrementa perchè,c'è i++ e ricicla,di conseguenza alla successiva stampa essendo non incrementato stampa di nuovo 2..

    Come giustamente hai visto, pre-incremento e post-incremento sono significativi in casi come "a = ++b", ma se devi solo incrementare una variabile, sia i++ che ++i equivalgono (salvo le differenze di cui si parlava) a: i = i + 1.

    prova invece qualcosa come

    cout << i++ << endl;

    o

    cout << ++i << endl;

    per capire la differenza!
    Questo codice conferma purtroppo la mia ipotesi sbagliata ,infatti con ++i stampa da 1 a 5 ..
    Ma non c'é una relazione la la i che stampo e quella del while,io credevo di si..
    Possibile chè é cosi complicato?!?! ...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.