11: Array (Operazioni)

Bentornati miei cari lettori , con oggi concluderemo la parte sugli array che sono di fondamentale importanza per memorizzare più dati insieme e usarli a loro volta per svolgere delle operazioni, quindi teneteli bene a mente. Ricordiamo che un array o vettore è un gruppo di posizioni di memoria correlate dal fatto che tutte hanno lo stesso nome e tipo di dato. Per fare riferimento a una particolare posizione o elemento all’interno del vettore, specificheremo il nome dello stesso e il numero di posizione di quel particolare elemento del vettore. Ribadita questa premessa comincio subito a illustrarvi alcuni esempi di operazioni che si possono compiere con i vettori.

 

Inizializzare i vettori con un ciclo

Come avete già visto nell’articolo precedente, possiamo inizializzare gli array per mezzo di una lista di inizializzazione. Nel caso gli elementi dell’array avessero delle proprietà, per esempio se volessimo indicare i multipli di un numero o, nel nostro caso, i primi numeri pari in un vettore di dimensione 10 , è opportuno usare un ciclo for per facilitarci i compiti.

#include<stdio.h>
#define MAX 20
int main (void)
{
int vettore[MAX];
int i;    // contatore

for( i=0 ; i< MAX ; i++) {
vettore[i]= 2 + 2 * i ;   } /* a ogni elemento dell'array verrà assegnato il valore 
del contatore moltiplicato per 2, più 2*/
// stampo cosa ho messo nel vettore
printf("%s%13s\n", "ELEMENTO" , "VALORE"); // %s è il comando per inserire una stringa
for(i=0;i<MAX; i++) {
printf("%7d%13d\n", i, vettore[i]);    }/*i numeri prima della d, stanno per gli spazi che 
il compilatore dovrà lasciare prima distampare i numeri di i e vettore[i].*/
return 0;
}

 

Sommare gli elementi di un Array

#include<stdio.h>
#define MAX 12
int vettore[MAX] = {1 ,3 ,5 ,7 ,8 ,9 ,15 ,47 ,56 ,61 ,78 ,99 };
int main (void) {
int i; //contatore
int somma= 0;
for(i=0;i<MAX;i++) {
somma = somma + vettore[i];    }       // oppure somma+=vettore[i];
printf("Il risultato finale della somma di tutti gli elementi dell'array e' %d", somma);
return 0;
}

 

Frequenza elementi nel vettore

#include<stdio.h>
#define MAX 20
#define FREQ 6
int vettore[MAX] = {1,1,5,2,1,2,2,4,1,5,3,1,3,4,1,1,2,3,4,5 };
int main (void) {
int i; // contatore per iterare sui 20 elementi
int rating; //contatore per iterare sulle frequenze 1-5
int frequenze[FREQ] = {0};
for(i=0;i<MAX;i++) {
++frequenze[vettore[i] ];   }

printf("%s%17s\n", "Rating" , "Frequenza");
for(rating =1 ; rating<FREQ; rating++) {
printf("%6d%17d\n", rating, frequenze[rating]);    }
return 0;
}

 

Ordinamento degli elementi del vettore 

Useremo una tecnica chiamata bubble sort(ordinamento a bolle), perché i valori più piccoli “risalgono” gradualmente a galla sino in cima al vettore (la prima posizione), proprio come nell’acqua le bolle d’aria risalgono in superficie, mentre i valori più grandi sprofondano verso il fondo del vettore (ultima posizione). La tecnica prevede diversi passaggi sul vettore. In ognuno di essi sarà confrontata ogni coppia di elementi adiacenti. Lasceremo i valori così come li avremo trovati, qualora una coppia sia già in ordine decrescente (o nel caso siano identici). I loro valori saranno invece scambiati di posizione all’interno del vettore, qualora una coppia sia in ordine decrescente.

#include<stdio.h>
#define SIZE 10
int main (void) {
int a[SIZE] = {2,6,9,12,4,85,35,77,36,1};
int pass;
int i;
int hold;
printf("I dati sono stati immessi secondo l'ordine originale\n");
for(i=0;i<SIZE;i++) { printf("%4d", a[i]);   } 
for(pass=1;pass<SIZE; pass++)   
{ for(i=0;i<SIZE;i++)  { if (a[i] > a[i+1]) {
hold= a[i];
a[i]= a[i+1];
a[i+1]= hold ; }
}
}

printf("\nI dati secondo l'ordine crescente\n");
for(i=0;i<SIZE;i++) {
printf("%4d", a[i]);   }
return 0;  }

 

La ricerca nei vettori
Vi troverete spesso a lavorare con una grande quantità di dati immagazzinati nei vettori e, a volte, potrà essere necessario determinare se un vettore contenda un elemento che corrisponda a un dato valore chiave. Il processo di ritrovamento di un particolare elemento si chiamo ricerca (fate attenzione perchè faremo uso di una funzione, argomento che verrà trattato nei prossimi articoli).

#include<stdio.h>
#define MAX 100
int ricerca(const int vettore[], int chiave, int lunghezza);
int main (void)  {
int a[MAX];    //creo il vettore a
int x;            // contatore per inizializzare il vettore a
int chiavedacercare;    //valore da trovare nel vettore a
int elemento;     //variabile per memorizzare la posizione di chiavedacercare

for(x=0;x<MAX;x++)  {
a[x]= 2*x;  }
printf("Immettere la chiave da cercare\n");
scanf("%d", &chiavedacercare);

elemento = ricerca(a, chiavedacercare, MAX);
if (elemento != -1)  {
printf("Valore trovato nella posizione %d\n", elemento);   }

else {
printf("Valore non trovato\n");  }
return 0;  }

int ricerca(const int vettore[], int chiave, int lunghezza)  {    //funzione
int n;
for(n=0;n<lunghezza;++n)  {
if(vettore[n] == chiave)  {
return n;  }             //restitutisce il valore della chiave
}
return -1;     }

Questa guida è terminata. Nella prossima vedremo come definire un nuovo tipo gestito dall’utente. Spero di essere stato chiaro, ma nel caso aveste dei dubbi, fatecelo sapere. Alla prossima!

Please follow and like us: