Le strutture di controllo del C++, La breve guida di Metal H sul C++ - Capitolo II

« Older   Newer »
  Share  
Metal H
view post Posted on 30/12/2005, 11:18




Bene: while.
Allora, la sintassi è questa:
CODICE
while ( condizione )
{
   istruzioni da eseguire
}

In pratica, funziona come un costrutto if: se la condizione tra parentesi è vera, verranno eseguite le istruzioni del corpo del costrutto, altrimenti no.
Cosa c'è di diverso, allora? Se la condizione è vera, il programma esegue il corpo di while, e poi verifica di nuovo la condizione di while. Se è di nuovo vera, esegue di nuovo il corpo, e poi verifica la condizione, e si va avanti così. Se la condizione, a un certo punto diventa falsa, il costrutto termina e il programma salta alla prima istruzione dopo di esso e fuori dal suo corpo.
Forse è meglio un esempio:
CODICE
int contatore = 1;

while ( contatore <= 10 )
{
   cout << contatore << "\n";
   contatore = contatore + 1;
}

Questo è un pezzo di programma, che stampa sul monitor i numeri da 1 a 10, servendosi di un costrutto while.
La condizione è vera fino a quando contatore non supera 10.
State attenti, però, a utilizzare il costrutto while: ci sono infatti due errori che potete commettere abbastanza facilmente: il ciclo infinito e l'errore off-by-one (fuori di uno). Non ritengo necessario spiegarvi quest'ultimo errore adesso, ma mi sembra fondamentale illustrarvi l'errore del ciclo infinito.
In pratica, l'errore del ciclo infinito si ha quando un costrutto while, che è un ciclo, appunto, non termina mai, cioè quando la sua condizione è sempre vera.
Se dimenticate di includere nel corpo un'istruzione che modifica una parte della condizione, infatti il vostro programma non terminerà mai, come in questo caso:
CODICE
int contatore = 1;

while ( contatore <= 10 )
{
   cout << contatore << "\n";
}

Ok?
 
Top
Metal H
view post Posted on 30/12/2005, 11:28




Bene, do/while funziona in modo simile:
CODICE
do {
istruzioni da eseguire
} while ( condizione );

Si tratta sempre di un ciclo, solo che prima esegue le istruzioni del corpo, e poi verifica la condizione.
Basta questo da dire sui costrutti while e do/while, più due cose:
1 - vi permettono di scrivere decine di righe di codice in meno, perché possono ripetere un'operazione più volte senza doverla riscrivere
2 - nel costrutto do/while, non dimenticate il punto e virgola alla fine!
Ok smile.gif?
 
Top
Metal H
view post Posted on 1/1/2006, 02:24




Bene, adesso facciamo una piccola pausa prima di for.
Vediamo gli operatori di incremento e decremento.
(++ variabile) incrementa la variabile di 1 prima di restituirla
(variabile ++) restituisce la variabile e la incrementa di 1
(-- variabile) decrementa la variabile di 1 prima di restituirla
(variabile --) restituisce la variabile e la decrementa di 1

Esempio:
CODICE
#include <iostream>

using namespace std;

int main ( )
{
   int x = 4;
   cout << "x: " << x << "\n";
   cout << "x++: " << x++ << "\n";
   cout << "x after x++: "<< x <<"\n";
   cout << "++x: " << ++x << "\n";
   system ("pause");
   return 0;
}


è spiegato 1 po' da cane... cmq noterete che con x++ si visualizza 4 e poi la variabile viene incrementata... con ++x, invece, si visualizza subito 6. La stessa cosa vale per --.
Ok?
 
Top
Metal H
view post Posted on 2/1/2006, 19:02




Bene, giusto perché adesso c'è anche Python che ci fa concorrenza facciamo subito anche il costrutto for.
CODICE
// sintassi del costrutto for

for ( dichiarazione; condizione; operaz. finale )
{
   istruzioni_da_eseguire
}

Nella prima parte, quella fra ( e ), ci sono tre blocchi, separati da ;.
Nella prima parte, dichiarazione, dichiariamo una variabile, se ne abbiamo bisogno, e la inizializziamo. La variabile verrà distrutta terminato il ciclo for.
La seconda parte, condizione, è la condizione per terminare il ciclo for.
La terza parte, operazione finale, indica l'operazione da compiere a ogni ripetizione del ciclo.
Ecco un esempio. Noterete che non è diversissimo da while.
CODICE
#include <iostream>
using namespace std;

int main ( )
{
   cout << "Questo programma calcola la media di 10 numeri\n\n";
   double numero = 0;
   double totale = 0;
 
   for ( int contatore = 1; contatore <= 10; contatore ++ )
   {
       cout << "Inserire il numero " << contatore << ": ";
       cin >> numero;
       totale = totale + numero;
   }

   cout << "\nMedia = " << ( totale / 10 ) << "\n";
   system ("pause");
   return 0;
}

Tutto ok?

 
Top
Metal H
view post Posted on 5/1/2006, 16:23




Prima di vedere la switch, l'ultima struttura, faccio una pausa, e apro un topic intitolato "Il gioco d'azzardo e il C++: le funzioni rand e srand". Si tratta di una breve lezione che terrò sulla randomizzazione dei dati, ed è facoltativa. Non è necessario sapere quello che verrà scritto lì, ma il mio manuale tratta quest'argomento e ho deciso di trattarlo anch'io.
Non posterò in questa discussione fino alla fine della lezione facoltativa.
 
Top
Metal H
view post Posted on 1/2/2006, 14:03




Ok, eccoci pronti per ricominciare.
Ricapitolando: abbiamo trattato le strutture if, if/else, while, do/while e for, quindi ci manca la struttura di selezione switch.
Sintassi:
CODICE
switch ( espressione )
{
   case valore:
       istruzioni_da_eseguire
   default:
       istruzioni_da_eseguire
}

In pratica, si pone tra le parentesi tonde un valore da analizzare. Successivamente, si pone una serie di condizioni case che confrontano il valore con altri valori dello stesso tipo. Infine si pone un'opzionale condizione di default, che indica cosa fare nel caso nessuna case sia stata soddisfatta.
Vediamo ora un esempio:
CODICE
#include <iostream>
using namespace std;

int main ( void )
{
   cout << "Voto studente? ";
   int voto = 0;
   cin >> voto;
   
   switch ( voto )
   {
       case 0:
       case 1:
       case 2:
       case 3:
       case 4:
       case 5:
           cout << "\nBocciato\n";
           break;
       case 6:
       case 7:
       case 8:
       case 9:
       case 10:
           cout << "\nPromosso\n";
           break;
       default:
           cout << "\vValore inserito non valido\n";
   }

   system ( "pause" )
   return 0;
}

Come avrete intuito, il costrutto switch qui sopra serve a determinare il voto di uno studente. Notare che sono state scritte più clausole case di fila, si può fare.
Nel caso ( voto < 0 || voto > 10 ), si attiva la clausola default.
L'istruzione break si può usare nei cicli switch, while, do/while e for, e serve per interrompere il ciclo all'istante. Simile è l'istruzione continue, che interrompe il ciclo (sia esso un while, un do/while o un for), e lo riprende dall'iterazione successiva.
Tutto ok wink.gif?
 
Top
20 replies since 8/12/2005, 19:31   1894 views
  Share