Lezioni di Informatica
"Una volta che abbiate conosciuto il volo, camminerete sulla terra guardando il cielo" [ L. da Vinci ]
Informazioni sul Sito
N. visitatori  000067928  dal 21/01/2007  |   e-mail: ksoft64camera@gmail.com   
Cerca nel sito
Documenti collegati alla pagina
FOR
Per molti linguaggi è detto anche ciclo enumerativo in quanto utilizza una variabile che fa da contatore. In C++ questa affermazione è corretta solo per la forma semplice, come vedremo più avanti.
Viene usato quando si sa in partenza quante volte deve essere eseguito un certo gruppo di istruzioni.
La forma semplice
for (inizializzazione; condizione; incremento/decremento)
	istruzione;
oppure
for (inizializzazione; condizione; incremento/decremento)
{
	istruzione 1;
	istruzione 2;
	...
	istruzione n;
}
Esempio 1: programma che visualizza i primi 100 numeri
#include <iostream>
using namespace std;

int main()
{
	int x;
	for(x=1; x<=100; x++)
		cout << x << "\t";
	
	return 0;
}
Esempio 2: programma che visualizza i numeri e i quadrati dei numeri compresi tra 0 e 99
#include <iostream>
using namespace std;

int main()
{
	int x;
	for(x=0; x<100; x++)
	{
		cout << "Valore di " << x << ": ";
		cout << " e quadrato di " << x << ": " << x*x << "\n";
	}
	
	return 0;
}

Variazioni del ciclo for
Uso di più variabili di controllo: si possono usare più contatori che possono incrementarsi o decrementarsi in modo autonomo; si aprono quindi molte posibilità per la fantasia del programmatore rispetto ad altri linguaggi.
Nell'esempio che segue il ciclo visualizza i numeri da 0 a 98 con passo 2, ovvero 0 2 4 6 8 ... 98.
#include <iostream>
using namespace std;

int main()
{
	int x,y;
	for(x=0, y=0; x+y < 100; x++, y++)
		cout << x+y << " ";
		
	return 0;
}
Per uscire dal ciclo for non è necessario considerare il contatore. Si può interrompere la sua esecuzione anche per altri motivi. Anche questa è una possibiltà offerta dal linguaggio C.
Nel programma che segue osservate la condizione del primo ciclo for (in grassetto).
#include <iostream>
using namespace std;

int main()
{
	int i, j, risposta;
	char fine;
	for (i=1; i<100 && fine!='n'; i++)
	{
		for(j=1; j<10; j++) 
		{
			cout << "quanto fa " << i << "+" << j << "? ";
			cin >> risposta;  
			if (risposta != i+j)
				cout << " sbagliato\n";
			else
				cout << "esatto\n";
		}
		cout << "Ancora (s/n) ? ";
		cin >> fine;
		
		return 0;
	}
}

Casi particolari
L'esempio che segue dimostra come ognuna delle tre parti che compongono l'istruzione for() può consistere in un'espressione
#include <iostream>
using namespace std;

void prompt()
{
	cout << "inserire un intero: ";
}

int leggi()
{
	int t;
	cin >> t;
	return t;
}

void quadrato(int num)
{
	cout << num*num << "\n";
}

int main()
{
	int t;
	for (prompt(); t=leggi(); prompt())
		quadrato(t);
		
		
	return 0;
}
Il programma visualizza un messaggio e rimane in attesa di un numero di cui fa vedere il quadrato. Si esce quando l'utente inserisce il valore zero.
Osservate come viene impostata l'istruzione for: è inizializzata la funzione prompt() anziché un contatore; al posto della condizione di uscita viene posto il risultato di un input (t) tramite la funzione leggi(); l'incremento è ancora il prompt().

Il prossimo esempio dimostra come il for può essere privato dell'incremento:
#include <iostream>
using namespace std;

int main()
{
	int x;
	for (x=0; x!=123;)
	{
		cout << "Inserire un numero (123 per uscire): ";
		cin >> x;
	}
		
	return 0;
}
In pratica, viene richiesto un numero (x) fino a quando non si inserisce il valore 123.

Se si vuole creare un ciclo infinito basta scrivere:
#include <iostream>
using namespace std;

int main()
{
	for ( ; ;)
		cout << "Ciao \n";
		
	return 0;
}
L'esempio visualizza Ciao e va a capo all'infinito. Per interrompere saremo costretti a premere Ctrl-c.

Per uscire prematuramente quando viene inserito, ad esempio, il valore zero in n si utilizzerà l'istruzione break
#include <iostream>
using namespace std;

int main()
{
	int n;
	for ( ; ;)
	{
		cout << "Inserire un numero [0 per uscire]: ";
		cin >> n;
		if (n==0) break;
		cout << "\nQuadrato di " << n << " = " << n*n << "\n";
	}
	return 0;
}