Pattern di programmazione
Un pattern è un modo standard per risolvere un problema comuni. I principali pattern di programmazione con i cicli sono i seguenti:
Ciclo determinato (Si ripete qualcosa un numero conosciuto di volte)
Cicolo indeterminato (Si ripete qualcosa un numero di volte non conosciuto a priori)
Inserimento finché (ripeto qualcosa finché non si verifica una condizione)
Contatore (conto quante volte ripeto una cosa)
Sommatore (sommo una serie di valori)
Ciclo determinato (Si ripete qualcosa un numero conosciuto di volte)
Quando si deve ripetere qualcosa e si conosce il numero delle volte che questa cosa deve essere ripetuta in genere si utilizza il for.
// i è una variabile intera
for i:=1 to n do begin // da 1 a n significa ripeti n volte
// fai qualcosa
end;
Ciclo indeterminato (Non si conosce il numero delle volte che sarà eseguito)
Quando non si conosce il numero delle volte che qualcosa viene ripetuto si usa il ciclo while o il ciclo repeat until.
Se la condizione deve essere verificata prima di entrare nel ciclo uso while, altrimenti uso repeat until.
while (condizione) do begin
// qualcosa da ripetere
// modifica la condizione all'interno altrimenti va avanti all'infinito
end;
Esempio: Dividi un numero per 5 e stampalo finché è maggiore di 5
readln(num); // l'utente inserisce un num intero
while (num>5) do begin
num := num div 5;
end;
Inserimento finché
Il problema che questo pattern risolve è "Inserisci un valore finché non succede qualcosa" e si scrive così:
repeat
// quello che vuoi ripetere
until (condizione) // repeat resta nel ciclo finché la condizione è falsa
Esempio. Ripeti l'inserimento finché il numero non è positivo
repeat
readln(num); // num è una variabile di tipo intero
until (num>=0)
Contatore
Il pattern contatore viene utilizzato tutte le volte che si deve contare quante volte viene effettuata una certa operazione ed è del tipo:
contatore:=0; // uso una variabile intera come contatore e la inizializzo a zero
repeat
// fai qualcosa
until (condizione);
Esempio: L'utente deve inserire numeri finché non inserisce lo zero. Conta quante volte inserisce i numeri.
contatore:=0; // uso una variabile intera come contatore e la inizializzo a zero
repeat
readln(num);
contatore := contatore + 1; // Incremento il contatore di uno d ogni ciclo
until (num=0);
writeln('Hai inserto ', contatore, ' numeri');
Sommatore
Il pattern sommatore viene utilizzato per tutti i problemi del tipo "fare la somma di N numeri, somma i primi numeri naturali, ecc..."
somma := 0; // Serve sempre una variabile per la somma che viene messa a zero
while (condizione) do begin // un ciclo
// qualcosa da fare
somma := somma + (un valore);
end;
Esempio: L'utente inserisce 10 numeri e calcolane la somma
somma:=0; // Imposto la somma a zero
for i:=1 to 10 do begin
writeln('Inserisci il numero ', i);
readln(num); // L'utente inserisce un numero
somma := somma + num; // Aggiungo alla somma il numero inserito
end;