Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Ciclo For | Cicli
Fondamenti di C#

bookCiclo For

Un ciclo permette di eseguire un blocco di codice tante volte quanto desideriamo. Esistono diversi tipi di cicli. In C#, se vogliamo eseguire un blocco di codice un numero specifico di volte, utilizziamo il for loop.

Il modello (sintassi) di un ciclo for è il seguente:

for(initiation; condition; operation) { 
    // code to execute
}


Consideriamo un esempio in cui utilizziamo questa sintassi:

main.cs

main.cs

copy
123456789101112131415
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { // Output "Hello World" ten times. for(int i = 0; i < 10; i++) { Console.WriteLine("Hello World"); } } } }

Nota

i++ è equivalente a i = i + 1. Incrementa il valore della variabile di 1. Allo stesso modo, i-- decrementa il valore di 1.

  • int i = 0 rappresenta la parte di inizializzazione. L'inizializzazione avviene quando il ciclo inizia. All'inizio del ciclo, viene creata una nuova variabile temporanea chiamata i e inizializzata con il valore 0.
  • i < 10 è la condizione. La condizione viene verificata a ogni iterazione (ripetizione) del ciclo. Il ciclo continua a eseguire il blocco di codice racchiuso finché la condizione è vera.
  • i++ è l'operazione da eseguire dopo ogni iterazione. L'operazione è solitamente un incremento o un decremento. Poiché il valore di i viene incrementato dopo ogni iterazione, la condizione i < 10 diventa falsa dopo 10 iterazioni e il ciclo si interrompe.

È importante comprendere che tutti e tre i componenti del ciclo forinitialization, condition e operation — sono opzionali. È possibile ometterne uno qualsiasi, ma ciò potrebbe modificare il comportamento del ciclo.

Anche se non è consigliato, è possibile dichiarare la variabile del ciclo all'esterno del ciclo stesso e lasciare vuota la parte di initialization. In questo modo il ciclo funzionerà comunque, ma è necessario prestare attenzione perché potrebbe portare a risultati imprevisti se non gestito correttamente.

main.cs

main.cs

copy
12345678910111213141516
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { int i = 0; for(; i < 10; i++) { Console.WriteLine("Hello World"); } } } }

Possiamo anche rimuovere la parte di operation e inserirla alla fine del blocco di codice del ciclo. Il ciclo si comporterà come prima, poiché la variabile i viene comunque incrementata dopo ogni iterazione.

main.cs

main.cs

copy
1234567891011121314151617
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { int i = 0; for(; i < 10;) { Console.WriteLine("Hello World"); i++; } } } }

Nota che nel codice sopra abbiamo comunque inserito un punto e virgola (;) nella sintassi del ciclo dove era previsto int i = 0. Questo punto e virgola deve essere sempre presente, sia che si crei o meno una variabile di ciclo.

È anche possibile rimuovere la condizione del ciclo, ma ciò fa sì che il ciclo venga eseguito all'infinito se non viene terminato manualmente (approfondiremo questo aspetto nei capitoli successivi).

main.cs

main.cs

copy
1234567891011121314151617
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { // In this case the variable `i` is useless so we don't create it. // The loop never ends for(;;) { Console.WriteLine("Hello World"); } } } }

Nota

Abbiamo comunque incluso entrambi i punti e virgola nella sintassi del ciclo for(;;), questi sono essenziali altrimenti il compilatore mostrerà errori.

Poiché il valore di i cambia a ogni iterazione, possiamo sfruttarlo a nostro vantaggio. Per comprenderlo, osserviamo un semplice programma che visualizza il valore di i a ogni iterazione:

main.cs

main.cs

copy
123456789101112131415
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 0; i < 10; i++) { Console.WriteLine(i); } } } }

Nota che termina a 9 perché inizia con la cifra 0. Il numero totale di iterazioni è stato dieci. Possiamo modificare l'inizializzazione, la condizione e l'operazione per visualizzare i dieci numeri pari da 2 a 20.

Nota

I numeri pari sono quelli divisibili per 2. Ad esempio 2, 4, 6, 8, 10, ecc. I numeri pari includono anche il numero 0, ma in questi esempi considereremo solo i numeri pari maggiori di 0.

main.cs

main.cs

copy
123456789101112131415
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 2; i <= 20; i += 2) { Console.WriteLine(i); } } } }

Nota

i += 2 è una forma abbreviata per scrivere i = i + 2. Questa sintassi è valida anche per altri operatori, ad esempio i -= 2, i *= 2, i /= 2, i %= 2 ecc.

Il ciclo inizia da 0 e incrementa il valore di i di 2 ad ogni iterazione. Abbiamo modificato la condizione in i <= 20 affinché il ciclo si fermi a 20.

La logica sopra era solo per comprendere il funzionamento del ciclo for. Possiamo utilizzare una logica molto più semplice per stampare i primi dieci numeri pari:

main.cs

main.cs

copy
1234567891011121314
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 1; i <= 10; i++) { Console.WriteLine(i * 2); } } } }

In questo caso la condizione è molto più semplice. Ad esempio, se vogliamo i primi 27 numeri pari, dovremmo sapere qual è il 27° numero pari per poter formare la condizione con il metodo precedente, tuttavia in questo caso basta semplicemente modificare la condizione in i <= 27:

main.cs

main.cs

copy
1234567891011121314
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 1; i <= 27; i++) { Console.WriteLine(i * 2); } } } }
question mark

Quale sarà l'output del seguente programma? Il valore di sum aumenta a ogni iterazione di i, quindi il suo valore durante le prime quattro iterazioni sarà: 1, 3, 6, 10.

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 1

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Awesome!

Completion rate improved to 1.59

bookCiclo For

Scorri per mostrare il menu

Un ciclo permette di eseguire un blocco di codice tante volte quanto desideriamo. Esistono diversi tipi di cicli. In C#, se vogliamo eseguire un blocco di codice un numero specifico di volte, utilizziamo il for loop.

Il modello (sintassi) di un ciclo for è il seguente:

for(initiation; condition; operation) { 
    // code to execute
}


Consideriamo un esempio in cui utilizziamo questa sintassi:

main.cs

main.cs

copy
123456789101112131415
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { // Output "Hello World" ten times. for(int i = 0; i < 10; i++) { Console.WriteLine("Hello World"); } } } }

Nota

i++ è equivalente a i = i + 1. Incrementa il valore della variabile di 1. Allo stesso modo, i-- decrementa il valore di 1.

  • int i = 0 rappresenta la parte di inizializzazione. L'inizializzazione avviene quando il ciclo inizia. All'inizio del ciclo, viene creata una nuova variabile temporanea chiamata i e inizializzata con il valore 0.
  • i < 10 è la condizione. La condizione viene verificata a ogni iterazione (ripetizione) del ciclo. Il ciclo continua a eseguire il blocco di codice racchiuso finché la condizione è vera.
  • i++ è l'operazione da eseguire dopo ogni iterazione. L'operazione è solitamente un incremento o un decremento. Poiché il valore di i viene incrementato dopo ogni iterazione, la condizione i < 10 diventa falsa dopo 10 iterazioni e il ciclo si interrompe.

È importante comprendere che tutti e tre i componenti del ciclo forinitialization, condition e operation — sono opzionali. È possibile ometterne uno qualsiasi, ma ciò potrebbe modificare il comportamento del ciclo.

Anche se non è consigliato, è possibile dichiarare la variabile del ciclo all'esterno del ciclo stesso e lasciare vuota la parte di initialization. In questo modo il ciclo funzionerà comunque, ma è necessario prestare attenzione perché potrebbe portare a risultati imprevisti se non gestito correttamente.

main.cs

main.cs

copy
12345678910111213141516
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { int i = 0; for(; i < 10; i++) { Console.WriteLine("Hello World"); } } } }

Possiamo anche rimuovere la parte di operation e inserirla alla fine del blocco di codice del ciclo. Il ciclo si comporterà come prima, poiché la variabile i viene comunque incrementata dopo ogni iterazione.

main.cs

main.cs

copy
1234567891011121314151617
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { int i = 0; for(; i < 10;) { Console.WriteLine("Hello World"); i++; } } } }

Nota che nel codice sopra abbiamo comunque inserito un punto e virgola (;) nella sintassi del ciclo dove era previsto int i = 0. Questo punto e virgola deve essere sempre presente, sia che si crei o meno una variabile di ciclo.

È anche possibile rimuovere la condizione del ciclo, ma ciò fa sì che il ciclo venga eseguito all'infinito se non viene terminato manualmente (approfondiremo questo aspetto nei capitoli successivi).

main.cs

main.cs

copy
1234567891011121314151617
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { // In this case the variable `i` is useless so we don't create it. // The loop never ends for(;;) { Console.WriteLine("Hello World"); } } } }

Nota

Abbiamo comunque incluso entrambi i punti e virgola nella sintassi del ciclo for(;;), questi sono essenziali altrimenti il compilatore mostrerà errori.

Poiché il valore di i cambia a ogni iterazione, possiamo sfruttarlo a nostro vantaggio. Per comprenderlo, osserviamo un semplice programma che visualizza il valore di i a ogni iterazione:

main.cs

main.cs

copy
123456789101112131415
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 0; i < 10; i++) { Console.WriteLine(i); } } } }

Nota che termina a 9 perché inizia con la cifra 0. Il numero totale di iterazioni è stato dieci. Possiamo modificare l'inizializzazione, la condizione e l'operazione per visualizzare i dieci numeri pari da 2 a 20.

Nota

I numeri pari sono quelli divisibili per 2. Ad esempio 2, 4, 6, 8, 10, ecc. I numeri pari includono anche il numero 0, ma in questi esempi considereremo solo i numeri pari maggiori di 0.

main.cs

main.cs

copy
123456789101112131415
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 2; i <= 20; i += 2) { Console.WriteLine(i); } } } }

Nota

i += 2 è una forma abbreviata per scrivere i = i + 2. Questa sintassi è valida anche per altri operatori, ad esempio i -= 2, i *= 2, i /= 2, i %= 2 ecc.

Il ciclo inizia da 0 e incrementa il valore di i di 2 ad ogni iterazione. Abbiamo modificato la condizione in i <= 20 affinché il ciclo si fermi a 20.

La logica sopra era solo per comprendere il funzionamento del ciclo for. Possiamo utilizzare una logica molto più semplice per stampare i primi dieci numeri pari:

main.cs

main.cs

copy
1234567891011121314
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 1; i <= 10; i++) { Console.WriteLine(i * 2); } } } }

In questo caso la condizione è molto più semplice. Ad esempio, se vogliamo i primi 27 numeri pari, dovremmo sapere qual è il 27° numero pari per poter formare la condizione con il metodo precedente, tuttavia in questo caso basta semplicemente modificare la condizione in i <= 27:

main.cs

main.cs

copy
1234567891011121314
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 1; i <= 27; i++) { Console.WriteLine(i * 2); } } } }
question mark

Quale sarà l'output del seguente programma? Il valore di sum aumenta a ogni iterazione di i, quindi il suo valore durante le prime quattro iterazioni sarà: 1, 3, 6, 10.

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 1
some-alt