AD

Come invertire gli elementi di un array in C

Nella seguente pagina viene mostrato come creare un programma nel linguaggio C in grado di invertire l’ordine degli elementi di un array, o vettore.

Innanzitutto abbiamo bisogno di un array contenente dei valori, per questo motivo dichiariamo ed inizializziamo, sulla stessa riga, un array di interi denominato val di dimensione massima MAX, pari a 10.

int val[MAX] = {0, 1, 2, 3, 4, 5 , 6, 7, 8, 9};

Nota: l’array può essere di qualsiasi tipo, non deve essere per forza costituito da valori numerici interi.

Per poter invertire l’ordine degli elementi dell’array creato, abbiamo bisogno di una variabile temporanea che dovrà possedere lo stesso tipo di dato degli elementi contenuti all’interno dell’array, nel nostro caso int temp;.

L’idea di fondo, per invertire l’ordine degli elementi dell’array, è quella di utilizzare un ciclo for per scorrere metà dell’array (cioè MAX / 2) ed ad ogni iterazione scambiare tra di loro i valori esterni, fino a raggiungere il centro dell’array.

In particolare ad ogni iterazione immagazziniamo il valore nella posizione dell’indice i all’interno della variabile temp, mentre immagazziniamo all’interno dell’array nella posizione i il valore che si trova nella posizione MAX - 1 - i e infine immagazziniamo nell’array in posizione MAX - 1 - i il valore contenuto nella variabile temp, ovvero quello che precedentemente si trovava nell’array in posizione i.

Il motivo per cui viene usato MAX - 1 -i è che l'array parte dall’indice 0 quindi dalla dimensione dell’array dobbiamo sottrarre 1, mentre l'indice i ci permette di scorrere all’indietro l’array, infatti ad ogni iterazione i cresce, quindi ci troveremo nella cella i-volte prima rispetto alla fine dell’array.

Al termine del ciclo for, gli elementi dell’array originario saranno invertiti. Per visualizzare meglio l’ordine degli elementi dell’array, nel codice, prima di effettuare l’inversione e anche dopo averla eseguita, stampiamo a schermo tutti gli elementi dell’array.

#include <stdio.h> #define MAX 10 int main(){     int val[MAX] = {0, 1, 2, 3, 4, 5 , 6, 7, 8, 9};     int temp;     for(int i = 0; i < MAX; i++){         printf("%d ", val[i]);     }     printf("\n\n");     for(int i = 0; i < MAX / 2; i++){         temp = val[i];         val[i] = val[MAX - 1 - i];         val[MAX - 1 - i] = temp;     }     for(int i = 0; i < MAX; i++){         printf("%d ", val[i]);     }     return 0; } /* Output: 0 1 2 3 4 5 6 7 8 9  9 8 7 6 5 4 3 2 1 0 */