- Programmare in C++ (5 lezione) - |
|||
COSA SERVE PER QUESTO TUTORIAL | |||
Download | Chiedi sul FORUM | Glossario | Qualche conoscenza nell'ambito della programmazione semplice - conoscenze matematiche di base - un compilatore (Borland o Microsoft) - il codice sorgente della lezione. | ||
Istruzioni del C++ atte ad eseguire azioni più volte fino al verificarsi di una condizione | |||
LE ISTRUZIONI CICLICHE Che cosa sono e a cosa servono i cicli in un programma C++ Le istruzioni cicliche permettono, come dice il nome stesso, l'esecuzione di una determinata serie di azioni in modo ciclico (ovvero dall'inizio alla fine più volte consecutivamente) fino al verificarsi di una o più condizione prestabilite (queste ultime sanciscono insomma la fine della ripetizione). Per comprendere l'utilità di questi importantissimi componenti del C++ passiamo ad un secondo esempio teorico: //ESEMPIO TEORICO DI UN CICLO //Immaginiamo di voler stampare banalmente //su schermo tutti i numeri da 1 a 12 //Ecco quindi il nostro ciclo: ////// IMPOSTIAMO IL CICLO //// PARTE 1 //////////////////////////////////////////////////////////////////// //SITUAZIONE DI PARTENZA: la variabile A è uguale a 1 -> SITUAZIONE INIZIALE DELLA VARIABILE-CONTATORE //LIMITE: procedi fino a quando A è minore di 13 ------> LA CONDIZIONE CHE DEVE ESSERE VERIFICATA AFFINCHE' // LE ISTRUZIONI INTERNE AL CICLO VENGANO ESEGUITE //INCREMENTO: ad esempio A uguale ad A più 1 ----------> QUANTO AGGIUNGERE AL CONTATORE DOPO OGNI CICLO //////////////////////////////////////////////////////////////////////////////////////////////////////////// ////// ISTRUZIONI INTERNE AL CICLO //// PARTE 2 //////////////////////////////////////////////////////////// //AZIONE: stampiamo su schermo il valore di A ---------> DA ESEGUIRE OGNI VOLTA CHE DOPO L'INCREMENTO // LA CONDIZIONE-LIMITE E' VERIFICATA //////////////////////////////////////////////////////////////////////////////////////////////////////////// ////// FINE //// PARTE 3 /////////////////////////////////////////////////////////////////////////////////// //FINE del ciclo: -------------------------------------> INCREMENTO E CONSEGUENTE VERIFICA DEL CONTATORE // (SE IL LIMITE NON E' STATO SUPERATO IL // CICLO RICOMINCIA) //////////////////////////////////////////////////////////////////////////////////////////////////////////// Se l'esempio non ha ancora chiarificato del tutto il meccanismo delle istruzioni ciclo, proviamo a passare alle rappresentazioni pratiche, più rigorose ma forse più intuitive. L'ISTRUZIONE CICLICA FOR // |-> SITUAZIONE INIZIALE -------------------------------------->| | // | |--------> LIMITE -------------------------->| IMPOSTAZIONE CICLO | // | | |-> INCREMENTO ----------->| | // | | | for (int var_contatore=1; var_contatore < 13; var_contatore++) { cout << "Nel ciclo numero " << var_contatore << " la variabile var_contatore è uguale a " << var_contatore << "\n"; } Eseguendo questo semplice codice si avrà come risultato, uno sotto l'altro, tutti i numeri da 1 a 12. Per comprendere meglio prendiamo in analisi singolarmente ciascuna porzione del codice proposto:
L'ISTRUZIONE CICLICA WHILE Compreso il funzionamento di "for" sarà adesso più intuitiva l'assimilazione dell'istruzione "while", diamo quindi un'occhiata al seguente listato (tenendo sempre presente il primo esempio teorico): // SITUAZIONE INIZIALE int var_uno = 1; // LIMITE while (var_uno < 13) { // AZIONE cout << "Nel ciclo numero " << var_uno << " la variabile var_uno è uguale a " << var_uno << "\n"; // INCREMENTO var_uno++; } Il listato appena mostrato esegue, come è facile capire, esattamente ciò che aveva fatto il ciclo for precedentemente trattato, la differenza fondamentale sta difatti nelle modalità. Ma vediamone nel dettaglio la struttura:
L'ISTRUZIONE DO WHILE // SITUAZIONE INIZIALE int var_uno = 1; // DO ESEGUE L'AZIONE PRIMA DI VERIFICARE LA CONDIZIONE LIMITE do { // AZIONE cout << "Nel ciclo numero " << var_uno << " la variabile var_uno è uguale a " << var_uno << "\n"; // INCREMENTO var_uno++; } // LIMITE while (var_uno < 13); "do" è molto simile a "while", ma la differenza che balza immediatamente all'occhio sta nel fatto che questa istruzione, invece di valutare la condizione prima di eseguire le azioni interne, esegue le azioni una volta e solo allora mette in atto la verifica. Analizziamo rapidamente che cosa accade in questi frangenti:
UN RISCHIO FREQUENTE: I CICLI
INFINITI Soprattutto con while e do while può capitare erroneamente di impostare le condizioni limite del ciclo in modo tale da rendere sempre falso il caso limite; in questo modo si giunge così ad una ripetizione "eterna" delle istruzioni previste con conseguente (ed eventuale) blocco del sistema. Per ovviare a questo genere di errori è sempre meglio, prima di compilare il programma, cercare di immaginare l'evoluzione passo passo del flusso. Oltre a tutto ciò, in taluni casi, è possibile aiutarsi con: break, continue e goto.
// ESEMPI DI CICLI INFINITI // Si prega di NON eseguire questo codice // ESEMPIO 1 while (3) { cout << "Non dovevi farlo!"; } // ESEMPIO 2 for (int n=1; ; n++) { cout << n; } BREAK, CONTINUE E GOTO Vediamo in dettaglio queste tre parole chiave:
La teoria di queste parole chiavi è molto più macchinosa della loro effettiva messa in pratica:
// ESEMPIO DI BREAK E CONTINUE for (int n=1; n < 13; n++) { if (n==3) { cout << "Il numero 3 non deve essere pronunciato! Vado al giro successivo!\n"; continue; } if (n==6) { cout << "Il numero 6 non mi piace! Esco dal ciclo!"; break; } cout << "Nel ciclo numero " << n << " la variabile n è uguale a " << n << "\n"; } //----------------------------------------------------------------------------- // ESEMPIO DI GOTO cout << "\n\nAdesso faccio un salto!\n"; // Punto di partenza (con indicazione di arrivo) goto puntoAtterraggio; // Parte esclusa cout << "\nOSTACOLO (questa cosa verrà saltata e quindi mai stampata...)\n"; // Punto di arrivo del goto puntoAtterraggio: cout << "\nSono arrivato! Ho evitato l'ostacolo!\n"; RIASSUNTO DELLA LEZIONE, ESEMPI E CHIARIMENTI Ciascuna delle strutture trattate in questa lezione può essere usata liberamente per fare svariate operazioni anche se talvolta una di esse può risultare più efficace di un'altra. Ecco di seguito le istruzione che abbiamo imparato affiancate da una breve descrizione sul "quando usarle" (non si tratta di regole fisse):
Prendiamo in considerazione adesso alcune particolarità:
Concludiamo la lezione con un esempio chiarificatore delle istruzioni appena apprese:
// ESEMPIO DI CICLO WHILE CON BREAK int c1 = 0; while(c1 < 5) { cout << c1*2 << "\n"; if (c1==3) { break; } c1++; } // ESEMPIO DI CICLO DO WHILE CON CONTINUE int c2 = 0; do { cout << c2*2 << "\n"; c2++; }while(c2 < 5); // ESEMPIO DI CICLO FOR for (int c3=0; c3<11; c3+=2) { cout << c3 << "\n"; if (c2==3) { continue; } } |
|||
<< INDIETRO | by aFiGoZ |