Tutorial 8 - Le strutture di iterazione for e while e le istruzioni break e continue

« Older   Newer »
 
  Share  
.
  1.     +1   +1   -1
     
    .
    Avatar

    Ricky

    Group
    Eroi
    Posts
    4,930
    Reputation
    +197
    Location
    Tourin (Italy)

    Status
    Anonymous
    In questa guida, saranno spiegati alcuni elementi fondamentali della programmazione che, insieme agli argomenti visti nel "Tutorial 7 - Le strutture di controllo if, if else e gli operatori di relazione e logici", permettono di sviluppare qualsiasi programma. Questi elementi sono: la struttura di iterazione for, la struttura di iterazione while e le istruzioni break e continue.
    Le strutture di iterazione for e while sono dette cicli, perché permettono di eseguire determinate azioni più volte fintanto che una determinata condizione rimane true (vera).


    Cominceremo col ciclo while.

    Il formato generico di un ciclo while è:

    while(condizioneContinuazione)
    {
    Istruzioni;
    }

    Un esempio può essere:

    while(Group("Q_Gruppo1").count < 1)
    {
    SpawnGroup("Q_Gruppo2");
    Q_Gruppo2.AddToGroup("Q_Gruppo1");
    }

    Questo ciclo while fa sì che finché il gruppo Q_Gruppo1 contiene meno di un'unità, viene visualizzato il gruppo Q_Gruppo2 che viene aggiunto al gruppo Q_Gruppo1.

    La parte inserita tra parentesi tonde è la condizione di continuazione del ciclo: fintanto che quel gruppo conta meno di un'unità la condizione sarà true (vera), non appena avrà più di un'unità la condizione diventerà false (falsa) e il ciclo si interromperà.


    Vediamo ora il ciclo for.

    Il formato generico dell'istruzione for è:

    for(inizializzazione; condizioneContinuazione; incremento/decremento)
    {
    istruzioni;
    }

    dove inizializzazione inizializza la variabile di controllo del ciclo, condizioneContinuazione è la condizione di continuazione del ciclo (che tipicamente contiene il valore finale della variabile di controllo) e incremento/decremento incrementa o decrementa la variabile di controllo.

    Un esempio:

    for(x = 1; x <= 10; x += 1)
    {
    pr(x);
    }

    Questo ciclo for inizializza la variabile x a 1 (N.B. Essa deve essere dichiarata all'interno della sequenza), il ciclo si ripeterà fino a che la variabile x sarà minore o uguale a 10, e dopo ogni ripetizione il valore della variabile x aumenterà di 1. Ad ogni ripetizione il ciclo visualizza il valore di x, quindi visualizzerà: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10.

    N.B. Alcuni programmatori inizializzano la variabile a 0, in quel caso la condizione di continuazione dovrà essere, considerando l'esempio suddetto, x < 10.

    Tenete presente che in molti casi un ciclo for può essere sostituito da un ciclo while, ad esempio, usando l'esempio precedente il suo ciclo while corrispondente sarebbe:

    while(x <=10)
    {
    pr(x);
    x +=1;
    }

    Solo che in questo caso l'inizializzazione di x deve essere effettuata fuori dal ciclo.

    N.B. Tenete presente che, sia per quel che riguarda il ciclo while e sia per quel che riguarda il ciclo for, non far diventare la condizione di continuazione falsa causa un ciclo infinito, che può costituire, nella maggior parte dei casi, un errore: la non esecuzione delle istruzioni presenti dopo il ciclo o come il crash durante il cambio di mappa.
    Ad esempio:

    for(x = 2; x >= 2; x += 2)
    {
    pr(x);
    }

    In questo caso, la condizione di continuazione x >= 2 sarà sempre vero, e quindi il ciclo for verrà eseguito all'infinito.

    Anche usare un operatore relazionale sbagliato all'interno del ciclo potrete commettere errori logici chiamati off-by-one, che comportano risultati errati con lo scarto di 1.

    Inoltre, la non terminazione di un ciclo, costituisce ulteriori calcoli che dovrà effettuare l'elaboratore, rispetto a quelli già previsti dal programmatore; il tutto si traduce con un calo esponenziale di frame al secondo (FPS) e, di conseguenza, di un esplicito rallentamento del gioco.

    Vedremo ora le istruzioni break e continue.

    L’istruzione break causa l’uscita immediata dal costrutto, anche se la condizione di continuazione del ciclo è vera. L’esecuzione continua, quindi, dall'istruzione che si trova immediatamente dopo il ciclo.
    Esempio:

    while(y <= 10)
    {
    if(y == 6)
    {
    break;
    }
    pr(y);
    y += 1;
    }

    In questo caso, il ciclo while visualizza i valori di y fino a quando y è uguale a 5.


    Invece, l’istruzione continue salta le istruzioni restanti del corpo e continua il ciclo dall'iterazione successiva. Nel costrutto while la condizione di continuazione del ciclo viene valutata immediatamente dopo l’esecuzione di continue, mentre nel costrutto for viene eseguito prima l’incremento.
    Esempio:

    while(y <= 10)
    {
    if(y == 6)
    {
    y = 7;
    continue;
    }
    pr(y);
    y += 1;
    }

    In questo caso il ciclo while visualizza tutti i valori di y tranne il 6. N.B. Osservate che in questo esempio è stato assegnato il valore 7 all'integer y prima dell'istruzione continue. Ciò è stato fatto perché altrimenti l'incremento della variabile non sarebbe mai stato eseguito, poiché come suddetto, nei cicli while l'incremento viene considerato dopo continue e quindi ci sarebbe stato un ciclo infinito. Ovviamente non è sempre necessario fare ciò. Dovete regolarvi in base a ciò che il vostro while deve fare.

    Naturalmente, è possibile sostituire le istruzioni break e continue con alcune tecniche di programmazione strutturata, per questo molti programmatori sono contrari al loro utilizzo all'interno dei programmi.


    Tutti gli esempi riportati nel tutorial sono molto semplici e non rappresentano appieno la potenza e l'utilità dei costrutti. Ma con l'esperienza scoprirete che potrete fare grandi cose usandoli.
    Per conoscenza personale, sappiate che esiste anche la struttura iterativa do/while, che non è stata menzionata perché se ne può fare a meno.


    Così termina l'ottavo tutorial. Spero sia stato chiaro. Per ulteriori chiarimenti chiedete pure, ma nella apposita sezione!


    Buona permanenza sul forum! :)

    Edited by Ricky1996 - 17/2/2014, 18:02
     
    .
0 replies since 16/2/2014, 17:39   166 views
  Share  
.