• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

9. Istruzioni iterative

By IgnazioC | on 20 Aprile 2011 | 57 Comments
Corso completo di C

corso-completo-c-istruzioni-iterative-00 In questa nona lezione del nostro corso completo di programmazione in C affronteremo un argomento piuttosto simpatico, parleremo delle istruzioni iterative.
Queste istruzioni permettono di ripetere una porzione di codice fino a quando non risulta vera una determinata condizione e, sebbene non indispensabili, sono alla base della programmazione.

Istruzione while

L’istruzione while è la più semplice tra le istruzioni iterative, il suo compito è quello di ripetere la porzione tra le parentesi graffe mentre una data condizione è vera, quando la condizione cesserà di essere vera il programma terminerà il ciclo e riprenderà la sua normale esecuzione.

La sintassi dell’istruzione while è la seguente:

while (espressione) {

        ...istruzioni...

        ...istruzioni...

}

Come nel caso del costrutto if come espressione possiamo utilizzare qualsiasi cosa che possa essere vera o falsa. Ad esempio potremmo scrivere:

while (3 < 5 ) {

        printf("tre è minore di cinque!!");

}

Ma cos'ha di strano il codice che ho scritto? Che la sua esecuzione non terminerà mai! l'espressione "(3 < 5)" verrà valutata ad ogni iterazione e ad ogni iterazione risulterà invariabilmente vera, quindi il codice entrerà in un loop dal quale non riuscirà mai ad uscire. Bisogna quindi prestare attenzione che all'interno delle istruzioni del ciclo while ci siano sempre delle istruzioni in grado di rendere falsa l'espressione, solo così si potrà essere sicuri di uscire dal ciclo, come in questo esempio.

int a = 1;

while (a < 10) {

        printf("a vale: %d\n", a);

        a = a + 1;

}

l'output di questo programma sarà:


a vale: 1
a vale: 2
a vale: 3
a vale: 4
a vale: 5
a vale: 6
a vale: 7
a vale: 8
a vale: 9

L'output si ferma a nove, perché alla nona iterazione il valore di a, all'istruzione "a = a + 1" diventa 10, ma all'iterazione successiva l'espressione "a < 10" non è più vera quindi il programma esce dal while e riprende la sua normale esecuzione.

Notare che nel while se l'espressione è già falsa, le istruzioni contenute all'interno del blocco non vengono eseguite neanche una volta.

In un diagramma di flusso il while verrebbe così rappresentato:


corso-completo-c-istruzioni-iterative-01

Istruzione Do...while

Esiste una istruzione simile al while, ma che può risultare più utile in certi casi, si chiama do...while ed ha la seguente sintassi:

do {

        ...istruzioni...

        ...istruzioni...

} while (espressione);

Io oserei definirei speculare il suo comportamento rispetto all'istruzione while, infatti il do...while valuta l'espressione dopo aver eseguito le istruzioni contenute nel blocco e, se l'espressione risulta vera, torna all'inizio del ciclo e lo riesegue, se invece è falsa termina il ciclo.

Poiché quindi le istruzioni del blocco in questo caso vengono eseguite almeno una volta, anche se l'espressione è falsa, si usa il do...while quando si ha necessità di questo comportamento.

Ecco la rappresentazione in un diagramma di flusso del do...while:


corso-completo-c-istruzioni-iterative-02

Istruzione for

Ho lasciato per ultima l'istruzione iterativa più versatile e più complessa del linguaggio C. Qualcuno storcerà il naso dicendo "il for è una istruzione complessa??" beh, ma magari non proprio complessa, ma a volerne sfruttare tutte le capacità è abbastana tricky.

La sintassi base del for è la seguente:

for (istruzioni di inizializzazione;
       condizione di ripetizione del ciclo;
       istruzioni di aggiornamento) {  
   ...istruzione...;
   ...istruzione...;
   ...
  ...istruzione...;
}

Prima di entrare dentro il ciclo FOR vengono eseguite le istruzioni di inizializzazione, poi inizia il ciclo e per ogni iterazione viene valutata (se presente) la condizione di ripetizione del ciclo, se tale espressione risulta vera allora vengono eseguite tutte le operazioni contenute all'interno del blocco, e al termine vengono eseguite le istruzioni di aggiornamento e ricomincia il ciclo.

Facciamo un esempio classico:

int i;

for (i = 0; i < 10; i = i + 1) {

        printf("Valore di i: %d",i);

}

In questo esempio subito dopo aver dichiarato la variabile i il programma esegue l'istruzione di inizializzazione (i = 0) che ha l'effetto di impostare a zero il valore della variabile i. Poi viene valutata la condizione di ripetizione (i < 10) che risulta essere vera, quindi viene eseguita l'istruzione all'interno del blocco: printf("Valore di i: %d",i); Terminate le istruzioni all'interno del blocco viene eseguita l'istruzione di aggiornamento (i = i + 1); Quello che rende particolarmente versatile il costrutto for è che tutti e tre i parametri sono opzionali e possono essere costituiti da più di una singola istruzione. Questo può portare ad avere cicli for molto complessi come questi:

for ( ; ; ) {

        ...istruzioni...

}
Ciclo infinito, non ci sono istruzioni di aggiornemento,equivale ad un "while (true) { }"
for (printf("Start ciclo for"), i = 0;

   i < 100, printf("Valore di i %d\n",i); i = i + 1); {

...nessuna istruzione...

}
l'output è il seguente


Valore di i 1
Valore di i 2
Valore di i 3
Valore di i 4
Valore di i 5
Valore di i 6
Valore di i 7
Valore di i 8
Valore di i 9

ma è stato ottenuto utilizzando esclusivamente le istruzioni di inizializzazione a aggiornamento.

for (i = 0, j = 1;

   j < 10000;

   printf("%d %d\n",i,j) , i = i + j , j = i + j) {

  ...nessuna istruzione...

 }
Come calcolare i numeri di fibonacci minori di 10000 utilizzando apparentemente solo un ciclo for :)

For di questo genere sono vivamente sconsigliati, rendono impossibile la lettura del codice, li ho scritti qui e non mi aspetto che vi siano subito chiari, ma li ho inseriti solo per darvi l'idea di quanto il costrutto for può essere "denaturato" fino a farci stare dentro un intero programma.

Adesso che conoscete il costrutto for eccovi una vignetta da veri geek:


corso-completo-c-istruzioni-iterative-03

Questa volta vorrei lasciarvi con un paio di esercizi, siamo già alla nona lezione ed è proprio il momento che iniziate a picchiare sulla tastiera! Io sono un teorico come indole, ma se poi vogliamo programmare davvero bisognerà iniziare a sporcarsi le mani!

Gli esercizi sono questi:

1) Far stampare a schermo un rettangolo composto da asterischi come quello qui in basso, il lato deve essere di 10 per 5 asterischi:

**********
**********
**********
**********
**********

2) Far stampare a schermo un triangolo composto da asterischi come quello qui in basso:

*
**
***
****
*****
******
*******
********
*********

3) Far stampare a schermo un triangolo composto da asterischi come quello qui in basso:

**********
*********
********
*******
******
*****
****
***
**
*

Vi do un piccolo aiuto, provate ad utilizzare due cicli for, uno dentro l'altro.

Alla prossima!!

Letture consigliate:

C-Corso-Completo-di-Programmazione-kernighan-ritchie-devAPP Il linguaggio C. Principi di programmazione e manuale di riferimento (Accademica)
Brian W. Kernighan - Dennis M. Ritchie
Editore: Pearson | Lingua: Italiano | Brossura: 313 pagine
Prezzo Listino: EUR 27,00
Prezzo Promozione: EUR 22,95 con Spedizione gratuita

C-Corso-Completo-di-Programmazione-Deitel-Deitel-devAPP C. Corso completo di programmazione
Paul J. Deitel - Harvey M. Deitel
Editore: Apogeo | Lingua: Italiano | Brossura: 640 pagine
Prezzo Listino: EUR 39,00
Prezzo Promozione: EUR 33,15 con Spedizione gratuita



Share this story:
  • tweet

Tags: ciclo for Ccorso completo di Ccorso di Cdo while CIgnazio Calòistruzioni iterative Cwhile C

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • iSketch: la lavagna magica di Ignazio Calò disponibile GRATUITAMENTE in App Store

    29 Agosto 2011 - 2 Comments
  • 17. La gestione dei file in C

    22 Agosto 2011 - 4 Comments
  • Uno sguardo a Unit test: impariamo a prevenire ore e ore di debug durante lo sviluppo di Applicazioni iOS

    8 Agosto 2011 - 2 Comments

Author Description

57 Responses to “9. Istruzioni iterative”

  1. 8 Novembre 2011

    paperoduck

    // soluzione secondo esercizio

    #include

    int main()

    {
    int altezzaTriangolo;
    int numeroAsterischi;
    for (altezzaTriangolo = 0; altezzaTriangolo < 10; altezzaTriangolo = altezzaTriangolo + 1) {
    for (numeroAsterischi = 1; numeroAsterischi <= altezzaTriangolo; numeroAsterischi = numeroAsterischi + 1) {
    printf ("*");
    }
    printf("\n");
    }
    return 0;
    }

    // soluzione terzo esercizio

    #include

    int main()

    {
    int altezzaTriangolo;
    int numeroAsterischi;
    for (altezzaTriangolo = 0; altezzaTriangolo = altezzaTriangolo; numeroAsterischi = numeroAsterischi – 1) {
    printf (“*”);
    }
    printf(“\n”);
    }
    return 0;
    }

  2. 8 Novembre 2011

    paperoduck

    scusate c’è un errore di formattazione del testo al terzo esercizio che incollo di nuovo qui:

    #include

    int main()

    {
    int altezzaTriangolo;
    int numeroAsterischi;
    for (altezzaTriangolo = 0; altezzaTriangolo = altezzaTriangolo; numeroAsterischi = numeroAsterischi – 1) {
    printf (“*”);
    }
    printf(“\n”);
    }
    return 0;
    }

  3. 8 Novembre 2011

    paperoduck

    niente da fare, lo scrivo qui:

    #include

    int main()

    {
    int altezzaTriangolo;
    int numeroAsterischi;
    for (altezzaTriangolo = 0; altezzaTriangolo = altezzaTriangolo;
    numeroAsterischi – 1) {
    printf (“*”);
    }
    printf (“\n”);
    }
    return 0
    }

    /* sono andato accapo nello scrivere gli argomenti di for per non rischiare errori di formattazione testo */

  4. 8 Novembre 2011

    paperoduck

    faccio preghiera al moderatore di cancellare i miei post, non capisco perché mi si mangiano le righe. Gulp! Incollo o scrivo una cosa e me ne pubblica un’altra…

  5. 8 Novembre 2011

    paperoduck

    …e chiedo scusa perche ho letto il commento di ignazioc solo dopo.
    Grazie!

  6. 16 Maggio 2013

    Alessandro

    Ciao a tutti quando provo a scrivere gli esercizi, dopo aver corretto tutti gli errori, mi si blocca la compilazione su un errore

    [ERRORE SU SHELL]
    c:\Users\Alessandro\Desktop>gcc triangolo.c

    triangolo.c:2:1: error: expected identifier or ‘(‘ before ‘{‘ token
    [/ERRORE SU SHELL]

    [CODE]
    #include
    {
    int *;
    int a;
    for(a=1;a<=9;a+1)
    {
    printf("%a/n");
    return 0;
    }
    }
    [/CODE]

  7. 17 Maggio 2013

    Ignazioc

    Scrivi sul forum dove il codice si legge meglio. Non si se sia colpa dell’html ma manca qualcosa dopo #include e dopo int *

« Older Comments

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO