Molto spesso, quando scriviamo del codice, vogliamo poter eseguire uno stesso blocco di codice un certo numero di volte. In questi casi si possono utilizzare le istruzioni di loop (ciclo). In Visual Basic .Net abbiamo le seguenti sette istruzioni di ciclo:
Esiste infine una serie di comandi Exit che consentono di uscire dai cicli.
Consente di eseguire un’azione finché una condizione è vera
While (condizione)
azioni
End While
L’esempio in basso consente di trovare la più piccola potenza di 3 maggiore di 100, il ciclo while permette di effettuare il prodotto per 3 finchè il risultato non supera 100.
Module modPotenza
Sub Main()
Dim prodotto As Integer = 3
While ( prodotto <= 100 )
Console.writeLine("Prodotto: " & prodotto)
Prodotto = prodotto*3
End While
Console.Writeline("La più piccola potenza di 3 maggiore di 100 è: " & prodotto)
End Sub
End Module
Funziona come il while, la sintassi è la seguente:
Do While (condizione)
Azioni
Loop
Le azioni del ciclo vengono eseguite finché la condizione resta falsa. Rivediamo l’esempio
Module modPotenza
Sub Main()
Dim prodotto As Integer = 3
Do Until ( prodotto > 100 )
Console.writeLine("Prodotto: " & prodotto)
Prodotto = prodotto*3
Loop
Console.Writeline("La più piccola potenza di 3 maggiore di 100 è: " & prodotto)
End Sub
End Module
La condizione viene verificata a fine ciclo, per cui siamo sicuri che il ciclo sarà eseguito almeno una volta.
Module modDoWhile
Sub Main()
Dim contatore As Integer = 1
Do
Console.writeLine("Contatore: " & contatore)
contatore += 1
Loop While contatore <= 5
End Sub
End Module
La condizione è verificata a fine ciclo, e le azioni del ciclo vengono eseguite finché la condizione resta falsa.
Module modDoUntil
Sub Main()
Dim contatore As Integer = 1
Do
Console.writeLine("Contatore: " & contatore)
contatore += 1
Loop Until contatore <= 5
End Sub
End Module
Gestisce un’iterazione controllata da contatore. Usato quando conosciamo a priori il numero di iterazioni che andremo ad eseguire
For contatore = valoreIniziale To valoreFinale [Step incremento]
Azioni
Next
Module modContare
Sub Main()
Dim i As Integer
For i = 1 To 30 Step 3
Console.WriteLine("i = " & i)
Next
End Sub
End Module
La parola chiave Step, può essere un intero (positivo o negativo) e rappresenta il valore di incremento della variabile di controllo del ciclo. Se omessa vale 1. 1 e 30 sono il valore iniziale e finale, e possono anche essere delle espressioni.
Possiamo utilizzare la struttura For Each.. Next per iterare i valor di una collection
For Each variabile In Oggetto
istruzioni
Next
Vediamo un esempio in cui stampiamo l’elemento più grande di un array
Module modArray
Sub Main()
Dim massimo As Integer = 0
Dim valore As Integer
Dim myArray As Integer() = New Integer() {2, 4, 5, 6, 43, 432, 3, 94, 2}
For Each valore In myArray
If valore > massimo Then
massimo = valore
End If
Next
Console.WriteLine("Il valore più grande è: " & massimo)
End Sub
End Module
I comandi
Provocano l’uscita immediata dai rispettivi cicli.
Module modTestExit
Sub Main()
Dim output As String = ""
Dim contatore As Integer
For contatore = 1 To 10
If contatore = 5 Then
Exit For
End If
Next
Console.WriteLine("Uscito da for: contatore = " & contatore)
Do Until contatore > 10
If contatore = 8 Then
Exit Do
Contatore += 1
Loop
Console.WriteLine("Uscito da do: contatore = " & contatore)
End Sub
End Module
Abbiamo due modi per controllare l’uscita de dei cicli:
Un contatore è una variabile che viene incrementate ad ogni iterazione e che quando raggiunge un determinato valore provoca l’uscita dal ciclo.
Un valore sentinella è una variabile, che serve da controllo per la terminazione del ciclo. Viene utilizzata quando non si conosce a priori il numero di iterazione che si dovranno effettuare.
Vediamo due esempi: nel primo calcoliamo la media di 5 numeri inseriti, e controlliamo l’iterazione mediante un contatore; nel secondo invece calcoliamo la media di un numero variabile di valori, che verranno inseriti finché non si digita -1 per uscire.
Module calcolaMedia
Sub Main()
Dim Totale As Integer = 0
Dim contatore As Integer = 1
Do While (contatore <= 5)
Console.Write("Numero: ")
Numero = Console.ReadLine()
Totale += numero
Loop
Console.WriteLine("La media è: " & Totale/5)
End Sub
End Module
Module calcolaMedia
Sub Main()
Dim Totale As Integer = 0
Dim contatore As Integer = 0
Dim media As Integer
Console.Write("Digita -1 per uscire")
Totale = numero
Do While (numero <> -1)
Console.Write("Numero: ")
Numero = Console.ReadLine()
Totale += numero
contatore += 1
Loop
If (contatore <> 1) Then
Console.WriteLine("La media è: " & Totale / (contatore - 1) )
Else
Console.WriteLine("Non hai inserito nessun valore")
End If
End Sub
End Module