You are on page 1of 8

Cicli con contatore

La struttura ciclica con contatore


Questa struttura usata esclusivamente quando noto a priori il numero di ripetizioni da eseguire; indichiamo con N il numero di ripetizioni. Per poter eseguire un numero N di ripetizioni, necessario utilizzare una variabile che funga da contatore di ripetizioni: ad ogni ciclo, tale variabile deve essere incrementata di 1. Indichiamo, in modo del tutto arbitrario, la variabile contatore con cont. La struttura ciclica con contatore pu essere rappresentata graficamente nel modo seguente:

cont= 1

inizializzazione del contatore condizione di terminazione del ciclo

cont <= N
vero

falso

Istruzioni del ciclo

cont= cont+1

incremento del contatore

Come potete osservare dalla figura, le azioni fondamentali da compiere sono: 1. Stabilire il valore iniziale del contatore Il valore iniziale del contatore deve essere assegnato prima di entrare nel ciclo e pu essere un qualunque numero intero positivo. Per il momento utilizzeremo 1 come valore iniziale del contatore. 2. Imporre la condizione di terminazione (uscita) del ciclo Un ciclo deve terminare, prima o poi. In caso contrario si incorre in un problema che viene chiamato loop infinito. Un loop infinito un ciclo che non termina mai, perch la condizione di uscita da esso rimane sempre vera. Questa situazione assolutamente da evitare. Come condizione di terminazione useremo per il momento la seguente: cont<=N.
Autore: Cinzia Bocchi Ultimo aggiornamento: 20/09/11

Iniziando con un contatore pari a 1 e imponendo la condizione cont<=N si ottengono esattamente N ripetizioni, come desiderato. Fate attenzione, per, perch se il valore iniziale del contatore diverso, questa regola non vale pi, ma necessario fare il seguente calcolo: N = numero_di_cicli + cont_iniziale -1 Vediamo - se - se - se alcuni esempi: numero_di_cicli 10 e cont_iniziale vale 1, allora N deve valere 10 numero_di _cicli 10 e cont_iniziale vale 0, allora N deve valere 9 numero_di_cicli 10 e cont_iniziale vale 8, allora N deve valere 17

3. Determinare esattamente quali istruzioni devono essere ripetute 4. Incrementare il contatore dopo lesecuzione di ciascun ciclo Con il termine incremento si intende laumento di 1 unit.

Un esempio
Il seguente diagramma di flusso rappresenta lalgoritmo per risolvere il problema: dati 5 numeri interi calcolarne la somma. ID
num somma cont

Descrizione

TABELLA DATI I/O/L/C


I O L

Valore Iniz.

Tipo
intero intero intero

Vincoli

Contiene i numeri inseriti di volta in volta Contiene le somme parziali e la somma totale Contatore del ciclo

FLOW CHART
Start somma= 0 cont= 1 1 2

3 cont<=5 Vero 4 5 6 input(num)

Falso

somma= somma+num cont= cont+1

output(somma)

End

Autore: Cinzia Bocchi Ultimo aggiornamento: 20/09/11

TABELLA DI SIMULAZIONE Supponiamo che i 5 numeri inseriti siano: 1 5 2 0 3. Loutput atteso 11. ciclo istruz 1 2 3 4 5 6 3 4 5 6 3 4 5 6 3 4 5 6 3 4 5 6 3 7 num somma 0 cont 1 Vera 1 1 2 Vera 5 6 3 2 8 4 Vera 0 8 5 Vera 3 11 6 Falsa 11 Vera condizione output

Il risultato ottenuto uguale a quello atteso: lalgoritmo corretto.

La struttura con contatore in Java


La struttura ciclica con contatore viene realizzata in Java utilizzando lo statement FOR, la cui sintassi for (inizializzazione; condizione; aggiornamento) { istruzioni del ciclo }

Inizializzazione comprende la dichiarazione e linizializzazione del contatore o La dichiarazione necessaria solo se il contatore non stato dichiarato in precedenza. o Se la variabile contatore dichiarata allinterno del FOR, essa visibile solo allinterno del blocco. es. int cont = 1 oppure, se cont gi stato dichiarato cont = 1

Autore: Cinzia Bocchi Ultimo aggiornamento: 20/09/11

Condizione unespressione booleana contenente la variabile contatore es. cont<=n, dove n il numero di volte che si desidera eseguire le istruzioni del ciclo.

Aggiornamento contiene lincremento del contatore es. cont = cont+1 Nota : Java consente di usare anche forme abbreviate per lincremento ; queste sono cont += 1 e cont ++

Le istruzioni del ciclo vengono eseguite mentre la condizione vera. Si esce dal ciclo quando la condizione diventa falsa.

Continuiamo, a questo punto, con la soluzione del problema posto inizialmente. Scrittura del programma Java 01 class CicloSomma 02 { 03 public static void main(String args[]) 04 { 05 ConsoleReader c= new ConsoleReader(System.in); 06 { 07 //dichiarazioni di variabili 08 int num,somma,cont; 09 //istruzione 1 10 somma=0; 11 //istruzioni 2, 3 e 6 12 for(cont=1;cont<=5;cont++) 13 { 14 //istruzione 4 15 System.out.println("Immetti il numero intero"); 16 num= c.readInt(); 17 //istruzione 5 18 somma= somma+num; 19 } 20 //istruzione 7 21 System.out.println("La somma totale e' "+somma); 22 } 23 } 24 }

Autore: Cinzia Bocchi Ultimo aggiornamento: 20/09/11

Alcune varianti
Inizializzare somma durante la dichiarazione ID
num somma cont

Descrizione

TABELLA DATI I/O/L/C


I O L

Valore Iniz.
0

Tipo
intero intero intero

Vincoli

Contiene i numeri inseriti di volta in volta Contiene le somme parziali e la somma totale Contatore del ciclo

FLOW CHART
Start cont= 1 2

3 cont<=5 Vero 4 5 6 input(num)

Falso

somma= somma+num cont= cont+1

output(somma)

End

01 class CicloSomma 02 { 03 public static void main(String args[]) 04 { 05 ConsoleReader c= new ConsoleReader(System.in); 06 { 07 //dichiarazioni di variabili 08 int num,somma=0,cont; 09 //istruzione 1 10 somma=0; 11 //istruzioni 2, 3 e 6 12 for(cont=1;cont<=5;cont++) 13 { 14 //istruzione 4 15 System.out.println("Immetti il numero intero"); 16 num= c.readInt();
Autore: Cinzia Bocchi Ultimo aggiornamento: 20/09/11

17 18 19 20 21 22 23 24 }

//istruzione 5 somma= somma+num; } //istruzione 7 System.out.println("La somma totale e' "+somma);

} }

Utilizzare una costante simbolica, anzich esplicita, per indicare il numero di cicli (consigliato) Invece di utilizzare la costante numerica 5 possiamo definire una costante simbolica N di valore 5. TABELLA DATI ID Descrizione I/O/L/C Valore Tipo Vincoli Iniz.

num somma cont N

Contiene i numeri inseriti di volta in volta Contiene le somme parziali e la somma totale Contatore del ciclo Numero di cicli

I O L C 0

intero intero intero intero

FLOW CHART
Start cont= 1 2

3 cont<=N Vero 4 5 6 input(num)

Falso

somma= somma+num cont= cont+1

output(somma)

End

Autore: Cinzia Bocchi Ultimo aggiornamento: 20/09/11

01 class CicloSomma 02 { 03 public static void main(String args[]) 04 { 05 ConsoleReader c= new ConsoleReader(System.in); 06 { 07 //dichiarazioni di costanti 08 final int N=5; 09 //dichiarazioni di variabili 10 int num,somma=0,cont; 11 //istruzioni 2, 3 e 6 12 for(cont=1;cont<=N;cont++) 13 { 14 //istruzione 4 15 System.out.println("Immetti il numero intero"); 16 num= c.readInt(); 17 //istruzione 5 18 somma= somma+num; 19 } 20 //istruzione 7 21 System.out.println("La somma totale e' "+somma); 22 } 23 } 24 }

Codifica con il WHILE


E importante osservare che un ciclo con contatore pu essere codificato in Java anche utilizzando lo statement WHILE (il viceversa non sempre valido). Il codice che otteniamo, a partire dallultimo flow chart il seguente. 01 class CicloSomma 02 { 03 public static void main(String args[]) 04 { 05 ConsoleReader c= new ConsoleReader(System.in); 06 { 07 //dichiarazioni di costanti 08 final int N=5; 09 //dichiarazioni di variabili 10 int num,somma=0,cont; 11 //istruzione 2 12 cont=1; 13 //istruzione 3 14 while(cont<=N) 15 { 16 //istruzione 4 17 System.out.println("Immetti il numero intero"); 18 num= c.readInt(); 19 //istruzione 5
Autore: Cinzia Bocchi Ultimo aggiornamento: 20/09/11

20 21 22 23 24 25 26 27 28 }

} //istruzione 7 System.out.println("La somma totale e' "+somma); } }

somma= somma+num; //istruzione 6 cont= cont+1;

Quest'opera stata rilasciata con licenza Creative Commons Attribution-ShareAlike 3.0 Unported. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-sa/3.0/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.

Autore: Cinzia Bocchi Ultimo aggiornamento: 20/09/11

You might also like