Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Controllo: iterazioni

Precedente
SUPERIORE
Successiva

Ripetere più volte l'esecuzione di una sequenza

do
{
   istr1;
   istr2;
   ...
}
while(A > 0);

Dopo aver eseguito le istruzioni istr1 e istr2 decide se ripetere la loro esecuzione o continuare con le istruzioni successive (la sequenza controllata è stata eseguita comunque una volta).

Osservazione: le istruzioni controllate devono necessariamente provocare una modifica di A, altrimenti l'iterazione non avrebbe mai termine.

Se si controlla l'esecuzione di una sola istruzione

do
   istr1;
while(A > 0);

Si può prevedere la possibilità che la sequenza non venga eseguita per nulla, allora è necessaria una decisione ulteriore in testa

if(A > 0)
   do
   {
      istr1;
      istr2;
      ...
   }
   while(A > 0);

Decide (selezione singola) se eseguire o meno il blocco costituito da una ripetizione (con decisione in coda).

Il codice può essere semplificato riorganizzando il tutto

while(A > 0)
{
   istr1;
   istr2;
   ...
}

Decide se eseguire le istruzioni istr1 e istr2 o proseguire con le successive; in caso di risposta affermativa ritornerà a ripetere il test.

Se viene controllata l'esecuzione di una sola istruzione

while(A > 0)
   istr1;

Il ciclo con controllo in testa assume spesso una forma "standardizzata"

i=1;
while(i <= N)
{
   istr1;
   istr2;
   ...
   i++;
}

dove

bulletuna variabile intera, i, è utilizzata come indice all'interno della sequenza
bulletil valore iniziale della variabile, 1, è assegnato prima del ciclo
bulletil valore della variabile è modificato, i++, ad ogni passo
bulletla ripetizione termina se la variabile supera un certo valore fissato, N

In questi casi tutta la scrittura è convenientemente riassunta nella struttura di controllo for

for(i=1; i <= N; i++)
{
   istr1;
   istr2;
   ...
}

Se il valore della variabile è decrementato

for(i=N; i >= 1; i--)
{
   istr1;
   istr2;
   ...
}

I linguaggi C-like offrono una grande flessibilità all'interno delle parentesi tonde

bullet
for(int i=0; ...; ...)    // dichiara e inizializza
bullet
for(i=0, j=10; ...; ...)  // inizializza due indici
bullet
for(...; ...; i++, j--)   // modifica due indici
bullet
for( ; ...; ...)          // non inizializza
bullet
for(...; ...; )           // non modifica
bullet
for( ; ; )                // vuoto...
bullet
...

utilizzata anche a sproposito...

Controllo: iterazioni - ApPuNtIdIuNiNfOrMaTiCo

Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Precedente
SUPERIORE
Successiva