PROGRAMMIAMO
C++ - Istruzioni break e continue
Cicli infiniti

Un ciclo si dice infinito quando si ripete senza mai terminare. In C++ per realizzare un ciclo infinito basta far sì che la condizione di ripetizione del ciclo sia sempre vera. Per esempio:

while (7==7)
    {
   cout<<"Dammi un numero: ";
   cin>>num;
   ...
    }

Discuteremo fra poco di quale senso possa avere un ciclo del genere che prosegue all'infinito e non termina mai (a meno che il programma non venga forzato a terminare in qualche modo). Per adesso occupiamoci di altri modi, più eleganti del precedente, con i quali in C è possibile realizzare un ciclo infinito. Il primo modo è il seguente, che fa uso di un while con la costante 1 come condizione di ripetizione del ciclo:

while (1)
    {
   cout<<"Dammi un numero: ";
   cin>>num;
   ...
    }

Per convenzione 1 significa "condizione sempre vera" (infatti, come abbiamo gi visto, qualsiasi valore diverso da zero in C equivale a true): pertanto il ciclo precedente si ripete all'infinito.

Un altro modo di realizzare un ciclo infinito fa uso dell'istruzione for ed è il seguente:

for ( ; ; )
    {
   cout<<"Dammi un numero: " ;
   cin>>num;
   ...
    }

Per realizzare un for infinito la cosa importante è omettere la condizione di ripetizione del ciclo (lo spazio vuoto fra i due punti e virgola). Le altre operazioni del for (inizializzazione e incremento/decremento) possono esserci anche in un ciclo infinito.

Terminare un ciclo infinito: l'istruzione break

L'idea di "terminare un ciclo infinito" può sembrare una sorta di contraddizioni in termini. Infatti è evidente che, se un ciclo può essere terminato, non ha più molto senso, a rigori, parlare di "ciclo infinito".

Tuttavia, lasciando da parte le discussioni filosofiche, possiamo dire che un ciclo è infinito quando la sua condizione di ripetizione è sempre vera. Tuttavia, anche se la condizione è sempre vera, un ciclo può essere terminato ugualmente, usando l'istruzione break. Si osservi a questo proposito l'esempio seguente:

while (1)
    {
   cout<<"Dammi un numero: ";
   cin>>num;
   if (num<0)
      break;
    }

Si osservi la funzione dell'istruzione if all'interno del ciclo: se la condizione dell'if è vera (cioè se viene fornito un numero negativo), viene eseguita l'istruzione break. L'istruzione break, come suggerisce il nome, ha lo scopo appunto di interrompere l'esecuzione di un ciclo (indipendentemente dal fatto che la condizione di ripetizione sia vera oppure no).

Alcune osservazioni importanti sull'istruzione break:

Come esempio di istruzione break usata in un ciclo non infinito, si consideri il ciclo seguente che verifica se numero contiene un numero primo oppure no:

divisore=2;

while (divisore<numero)
    {
   resto = numero%divisore;

   if (resto==0)
      {
      cout<<"Il numero "<<numero<<" non è primo\n";
      break;
      }

   divisore = divisore+1;
    }

if (divisore == numero)
   cout<<"Il numero "<<numero<<" è primo\n";

 

Cicli infiniti e break per tradurre in C cicli non standard

L'uso del break insieme a un ciclo infinito fornisce una semplice maniera per realizzare in C un ciclo non standard, cioè un ciclo in cui la condizione di ripetizione non si trovi all'inizio del ciclo.

Si consideri per esempio il seguente ciclo (già da noi esaminato precedentemente):

Usando un ciclo infinito e l'istruzione break la traduzione del diagramma di flusso è semplice e immediata e non richiede particolari aggiustamenti del diagramma stesso (tranne il fatto che la condizione del test dev'essere invertita): 

for (tot = 0 ; ; )
    {
   cout<<"Dammi un valore: " ;
   cin>>val;
   if (val<=0)
      break;
   tot = tot + val;
    }


Non bisogna abusare di questa soluzione, che non è considerata da tutti un buono stile di programmazione. In particolare se è possibile una realizzazione alternativa semplice del ciclo che non usa il break, di solito questa è preferibile perché fornisce un ciclo più leggibile e chiaro. Tuttavia resta il fatto che in molte situazione l'uso del break insieme ai cicli infiniti, consente di realizzare rapidamente qualsiasi ciclo.

Istruzione continue

L'istruzione continue in qualche modo simile all'istruzione break ma, a differenza di questa, non interrompe il ciclo: essa invece provoca il "salto" (skip) di tutte le istruzioni seguenti nel ciclo e la ripetizione dello stesso (se la condizione di ripetizione verificata).

Vediamo subito un esempio:

for(i=0,prodotto=1;i<10;i++)
{
cout<<"Dammi un numero: ";
cin>>num;

if(num==0)
    continue;

prodotto= prodotto * num;
}

Se il numero num vale zero viene eseguita l'istruzione continue, la quale fa saltare l'esecuzione dell'istruzione successiva: il contatore i viene incrementato, viene controllata la condizione di ripetizione e, se questa vera, il ciclo viene nuovamente ripetuto.

 

 

link precedente - successiva link

Sito realizzato in base al template offerto da

http://www.graphixmania.it