prof. Nunzio Brugaletta
C++: programmazione e oggetti

EnneBi - Programmazione
Avanti - Indietro - Inizio

Cicli e costrutto for

L’istruzione for viene utilizzata tradizionalmente per codificare cicli a contatore: istruzioni cicliche cioè che devono essere ripetute un numero definito di volte. Il formato del costrutto for è il seguente:

for(esp1; esp2; esp3) 
  istruzione

Il ciclo inizia con l'esecuzione di esp1 (inizializzazione del ciclo) la quale non verrà più eseguita. Quindi viene esaminata esp2 (condizione di controllo del ciclo). Se esp2 risulta vera, viene eseguita istruzione, altrimenti il ciclo non viene percorso neppure una volta. Conclusa l'esecuzione di istruzione viene eseguita esp3 (aggiornamento) e di nuovo valutata esp2 che se risulta essere vera dà luogo ad una nuova esecuzione di istruzione. Il processo si ripete finché esp2 risulta essere falsa.

Conoscendo la quantità di valori numerici da elaborare, il programma precedente di elaborazione dei numeri pari di una sequenza, potrebbe essere codificato:

#include <iostream>
using namespace std;

int main()
{
  int vn,conta,somma;
  int qn,i;	/*1*/

  // inizializzazione accumulatori

  cout << "Conteggio e somma dei numeri pari\n\n";
  cout << "Quanti numeri devono essere elaborati? ";
  cin >> qn;	/*2*/

  conta = somma = 0;

  // esame dei numeri

  for(i=1;i<=qn;i++){	/*3*/
  
    cout << "Inserire numero positivo ";
    cin >> vn;

    // verifica se, numero inserito, pari

    if(!(vn%2)){
      conta++;
      somma += vn;
    }
  }

  // risultati elaborazione

  cout << "Nella sequenza c\'erano " 
       << conta << " numeri pari" << endl;
  cout << "La loro somma e\' " << somma << endl;

  return 0;
}

Vengono aggiunte nella 1 due nuove variabili per la quantità dei numeri da elaborare e il contatore del ciclo.

Viene effettuato nella 2 l'input della quantità dei numeri da elaborare che, con il ciclo che inizia da 3, vengono elaborati.

Il programma per prima cosa assegna il valore 1 alla variabile i (la prima espressione del for), si controlla se il valore di i è non superiore a qn (la seconda espressione) e poiché l’espressione risulta vera verranno eseguite le istruzioni inserite nel ciclo. Terminate le istruzioni che compongono il ciclo si esegue l’aggiornamento di i così come risulta dalla terza espressione contenuta nel for, si ripete il controllo contenuto nella seconda espressione e si continua come prima finché il valore di i non rende falsa la condizione.

Questo modo di agire del ciclo for è quello comune a tutti i cicli di questo tipo messi a disposizione dai compilatori di diversi linguaggi di programmazione. Il linguaggio C++, considerando le tre parti del costrutto come espressioni generiche, espande abbondantemente le potenzialità del for generalizzandolo in maniera tale da comprendere, per esempio, come caso particolare il ciclo while. La prima versione del programma, nella parte del ciclo di elaborazione, potrebbe essere codificata:

...
for(conta=somma=0;vn>0;){

  // verifica se, numero inserito, pari

  if(!(vn%2)){	
    conta++;	
    somma += vn;	
  }

  // prossimo numero da elaborare

  cout << "Inserire numero positivo ";
  cin >> vn;
}
...

Il ciclo esegue l’azzeramento di conta e somma (che verrà eseguito una sola volta) e subito dopo il controllo se il valore di vn è positivo e, in questo caso, verranno eseguite le istruzioni del ciclo. Terminate le istruzioni, poiché manca la terza espressione del for, viene ripetuto il controllo su vn.

Le inizializzazioni di conta e somma avrebbero potuto essere svolte fuori dal for: in tal caso sarebbe mancata anche la prima espressione.



Avanti - Indietro - Inizio

http://ennebi.solira.org
ennebi@solira.org