Domanda Chiarimenti sui While e i For..

Stato
Discussione chiusa ad ulteriori risposte.

Spartaculo

Utente Silver
26 Aprile 2010
7
4
1
56
Salve a tutti..
Sto imparando il C++ da un libro molto carino con molti esempi.. abbastanza semplice..
Sono alle basi, primo capitolo, appena fino i if-end e gli array, adesso devo affrontare
le iterazioni (cicli)i , per ora i "while" e i "for"...

Come posso fare?

Non riesco ad afferrare bene il concetto, chi può aiutarmi?
Il fatto è che capisco quale sia il suo obiettivo, ma come creare un ciclo?

Ecco i vari esempi sul mio libro:

Codice:
main()
{ int i = 1, f = 1, n;
  cout << "Fattoriale iterativo. Inserire n: ";
  cin >> n;
  while (1 <=n)
     f = f * 1++
  cout << "fattoriale = " << f << endl;
}

Descrizione dal libro:

Il ciclo compie n iterazioni, e la variabile i varia da 1 a n. Il corpo del ciclo è composto da un'unica istruzione che assegna ad f il risultato del prodotto di f * 1.
Notare che i viene incrementata ma il valore passato all'operatore '*' è quello precedente all'incremento.


For:

Codice:
main()
{ int i,n,somma = 0;
  cout << "Inserire 10 numeri da sommare:" << endl;
  for (i = 0; i < 10; i++)
  { cin >> n;
    somma = somma + n;
  }
  cout << "somma = " << somma << endl;
}

Descrizione sul libro:

Il ciclo viene eseguito 10 volte; alla prima iterazione la variabile i vale 0 (è stata posta a zero mediante la espr1 del ciclo for); all'ultima iterazione vale 9 (è stata incrementata alla fine di ogni iterazione mediante espr3);
alla fine dell'ultima iterazione la variabile i viene ancora incrementata di uno, quindi passa al valore 10, e quindi l'epsr2 restituisce false e il ciclo termina.
Nel corpo del ciclo viene letto uno dei 10 numeri e il suo valore viene aggiunto al valore della variabile somma che viene usata come accumulatore.


Allora alcune cose le ho capite perfettamente, alcune non ho capito niente...
Mi servirebbe una descrizione passo passo.. anche delle cose che ho capito, così sono più sicuro!

Grazie mille :)
 
Nel primo esempio credo che quegli 1 vadano sostituiti con una i ;)

In ogni caso la cosa è molto più semplice di quanto sembri (soprattutto perchè il libro ti ha aggiunto la spiegazione dell'operatore ++ insieme a quella del while).

Il ciclo while ha la forma
Codice:
while (condizione) {
    //operazione da ripetere #1
    //operazione da ripetere #2
    //etc...
}
Definizione:
Il codice all'interno delle graffe viene ripetuto fin quando la condizione espressa inizialmente è vera.

Spiegazione passo passo:
  • Prima di entrare nel ciclo viene controllata la condizione, se è vera si esegue il codice tra le graffe, se è falsa si salta tutto il blocco e si procede con il programma.
  • Quando il codice tra le graffe viene eseguito (e si arriva quindi alla } di chiusura del blocco), si ricontrolla la condizione espressa inizialmente: se la condizione è vera si riesegue tutto il codice all'interno delle graffe, altrimenti si esce dal ciclo e si procede con il programma.

Esempio:
Codice:
cout << "Preparazione al lancio: ";
int i = 3;
while (i > 0) {
cout << i << ", ";
i = i-1;
}
cout << "partenza!";

  • i contiene il valore 3
  • inizio del ciclo: i (3) è maggiore di 0? Sì, entriamo nel ciclo
  • viene eseguito il codice tra le graffe, il cout ignoriamolo, i = i-1 (scrivibile anche come i-=1 oppure i--) associa ad i il valore 2 (3-1)
  • terminato il codice tra le graffe. Ricontrolliamo la condizione di partenza: i (2) è maggiore di 0? Sì, entriamo nel ciclo
  • viene eseguito il codice tra le graffe, il cout ignoriamolo, i = i-1 associa ad i il valore 1 (2-1)
  • terminato il codice tra le graffe. Ricontrolliamo la condizione di partenza: i (1) è maggiore di 0? Sì, entriamo nel ciclo
  • viene eseguito il codice tra le graffe, il cout ignoriamolo, i = i-1 associa ad i il valore 0 (1-1)
  • terminato il codice tra le graffe. Ricontrolliamo la condizione di partenza: i (0) è maggiore di 0? No, usciamo dal ciclo
  • ultimo cout

----------------------------------------------------------------​

Il ciclo for ha la forma
Codice:
for (operazione iniziale; condizione di test; operazione eseguita ad ogni ciclo) {
    //operazione da ripetere #1
    //operazione da ripetere #2
    //etc...
}

Spiegazione passo passo:
  • Prima viene effettuata l'operazione iniziale, poi se la condizione di test è vera si prosegue con il blocco tra le graffe, altrimenti si salta tutto il for.
  • Una volta eseguito il blocco di codice tra le graffe si eseguono le istruzioni inserite nel terzo campo.
  • In seguito si ricontrolla la condizione di test e se è vera si prosegue con il blocco tra le graffe, altrimenti si esce dal ciclo.

Stesso esempio di prima:
Codice:
cout << "Preparazione al lancio: ";
for (int i = 3; i > 0; i--) {
    cout << i << ", ";
}
cout << "partenza!";

Ricordo che nel caso in cui l'operazione tra parentesi graffe è una sola le graffe si possono omettere.
 
Ultima modifica:
Se non è stato chiaro(anche se lo è stato molto) basta che lo dici che lo spieghiamo + semplicemente...
Comunque vorrei precisare una cosa, il ciclo for ha la seguente struttura:
Codice:
for(inizializzazione; condizione logica; incremento/decremento;)
{
//codice
}

L'inizializzazione è la creazione di una variabile(che esisterà solo per la durata del for) che verra usata nella condizione logica.
La condizione logica è la stessa di quella del while, cioe finchè è vera si ripete il ciclo.
L'incremento o il decremento(++ --) servono per far cambiare il valore della variabile inizializzata.
Questo è uno standard, poi vengono fatte sembre modifiche.
Le quadre(alt 123, alt 125) vengono usate per specificare l'inizio e la fine di un "blocco di codice" che viene eseguito finchè la condizione del for è vera).

Per un ciclo infinito del for si può fare così:
Codice:
for(;;)
{
//codice
}
in tal caso il codice nel for verrà eseguito all'infinito.

Spero di esser stato chiaro :D
 
No, il C++ non ha niente difficile da capire... magari ci vuole un pò a capire un concetto(soprattutto da autodidatti) ma dopo 1 ora che lo hai capito ti sembrerà un immensa sciocchezza :D
 
Infatti, :)
Ora mi fermo un po' sto studiano da stamattina e ho fatto enormi progressi.. xD
Più tardi inizio con i puntatori, speriamo bene, ho dato un'occhiata e non ci ho capito niente, ma magari dopo che guarderò meglio ci capirò di più :)

--- Aggiornamento Post ---

(una cosa, ma solo a me non mi fa modificare i post? ._. prima lo faceva)
 
Secondo me gli unici post che si possono modificare sono:
1-Il primo del topic.. cioè inq uesto caso quello di spartaculo..
2-L'ultimo messaggio in un topic.. In questo caso il mio.. per ora.

Credo. Non sò se sia cosi'.
 
Stato
Discussione chiusa ad ulteriori risposte.