libri-javascript-python

In questa lezione ci eserciteremo con i cicli for annidati in C, cioè studieremo le iterazioni eseguite dentro un’altra iterazione.

Innanzitutto notiamo che nei cicli annidati, il ciclo più esterno esegue N volte il ciclo più interno. Infatti, al suo primo passo, il ciclo esterno mette in esecuzione quello interno. Questo a sua volta esegue il proprio blocco di codice fino alla conclusione. Dopo, al secondo passo, il ciclo esterno rimette in esecuzione quello interno. Ciò si ripete finché il ciclo esterno non termina.

Facciamo subito degli esempi per capirne il funzionamento.

Primo esempio sui cicli for annidati in C

Nel primo esempio che propongo in questa lezione stamperemo 3 righe e 5 colonne con i seguenti dati:

1 1 1 1 1
2 2 2 2 2
3 3 3 3 3

Il ciclo esterno viene eseguito 3 volte poiché l’indice i va da 0 a 2. Il ciclo interno viene eseguito 5 volte poiché l’indice j va da 0 a 4.

Ogni ciclo esterno scrive una sequenza di 5 numeri sulla stessa riga. Ad esempio, durante la prima iterazione, stampa “1 1 1 1 1”, durante la seconda “2 2 2 2 2”, e così via.

Di seguito è riportato il codice completo:

#include <stdio.h>

int main() {
    int i, j;
    
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 5; j++)  {
            printf("%d ", i + 1);
        }
        printf("\n");
    }
    
    return 0;
}


Secondo esempio sui cicli for annidati in C

In questo secondo esempio, vogliamo stampare numeri da 0 a 100, organizzati in righe e colonne, con 10 numeri per riga e un ritorno a capo ogni 10 numeri.

Utilizzeremo l’espressione i*10 + j per calcolare i numeri e comprendere meglio l’utilizzo degli indici.

 0  1  2  3  4  5  6  7  8  9
10 11....
#include <stdio.h>

int main() {
    int i, j;
    
    for (i = 0; i < 10; i++) {
        for (j = 0; j < 10; j++) {
            printf("%4d ", i * 10 + j);
        }
        printf("\n");
    }
    
    return 0;
}

All’interno del ciclo esterno, l’indice i va da 0 a 9, quindi il ciclo esterno viene eseguito 10 volte. Ogni volta che il ciclo esterno viene eseguito, il ciclo interno viene attivato. All’interno del ciclo interno, l’indice j va da 0 a 9, quindi il ciclo interno viene eseguito anch’esso 10 volte.

Durante ogni iterazione del ciclo esterno, il ciclo interno viene eseguito per intero. Questo significa che i*10+j viene calcolato per ogni valore di j da 0 a 9, producendo i numeri da 0 a 99 all’interno di ciascuna riga.

Il ciclo esterno si ripete fino a quando i raggiunge 9, poiché l’ultimo valore valido di i è 9 (i<10). Questo assicura che tutti i numeri da 0 a 99 vengano stampati correttamente.

Conclusione

In questa lezione abbiamo esaminato l’uso dei cicli for annidati in linguaggio C, che consistono nell’eseguire iterazioni all’interno di altre iterazioni. Abbiamo compreso come il ciclo esterno controlli l’esecuzione del ciclo interno, ripetendo quest’ultimo un numero specificato di volte.

Attraverso due esempi pratici, abbiamo illustrato come utilizzare i cicli for annidati per generare e stampare sequenze di numeri. Nel primo esempio, abbiamo stampato una matrice 3×5 con numeri ripetuti su ciascuna riga. Nel secondo esempio, abbiamo generato e stampato numeri da 0 a 99, organizzati in una matrice 10×10.

È importante notare che il ciclo esterno determina il numero totale di righe e il ciclo interno controlla il numero di colonne in ciascuna riga. Questa struttura ci consente di gestire e manipolare i dati in modo efficace, esplorando diverse configurazioni e schemi di output.

Inoltre, abbiamo approfondito la comprensione del funzionamento dei cicli for annidati attraverso una spiegazione dettagliata di come i valori degli indici cambiano durante l’esecuzione del programma.

Gli esercizi proposti sono solo dei semplici esempi per mostrare l’uso dei cicli for annidati in C. Continueremo ad esercitarci anche nelle prossime lezioni.

Alcuni link utili

Corso linguaggio C

Indice argomenti linguaggio C

Esercitazione sulle struct in C

Realizzare un menù di scelta in C

Strutture complesse in C

Come sommare gli elementi della cornice esterna

Come sommare due matrici

Matrice trasposta

Prodotto tra matrici

Ricerca elementi in una matrice

Tavola pitagorica in C

Array multidimensionali

Quick sort in C

Selection sort in C

Merge sort in C

Insertion Sort in C