Strutture di variabili (array monodimensionali o vettori)

Immaginiamo di voler gestire i tempi ottenuti durante la competizione dai partecipanti alla maratona di New York. Utilizzando solo i tipi fondamentali di dato studiati sinora, avremmo bisogno di una variabile destinata a contenere il tempo di ogni partecipante. Per semplificarci la vita (o le pratiche di programmazione) decidiamo di utilizzare variabili con nomi simili distinguendole con un numero progressivo. Prepariamoci dunque a dichiarare e poi gestire le variabili

tempo1, tempo, tempo3, tempo4 ........ tempo1000, tempo 1001, tempo 1001, tempo 1002.... tempo 12001, tempo 12002 , fino ad arrivare anche a tempo 30001, tempo30002.... (l'edizione del 2006 ha contato 36000 partecipanti)

è evidente che questa soluzione è improponibile (immaginate di doverle dichiarare tutte e poi di scrivere tutte le istruzioni per l'acquisizione dei valori) .

Per fortuna, esistono nella programmazione delle tecniche che risolvono questo genere di problemi. L'uso degli array (schiere) di valori, ad esempio, riprende la stessa logica dell'esempio che abbiamo portato per la nostra improponibile soluzione, ma la rende praticabile.

La soluzione è nel dichiarare una sola variabile per far riferimento a tutti i valori (è quindi una struttura di variabili) e di associarle un indice numerico per indicarne uno in particolare tra gli altri.

Il problema dei tempi ottenuti dai maratoneti di New York si risolve quindi dichiarando una variabile tempi in questo modo:

int tempi[36000];
da questo momento in poi, scrivendo
tempi[1] si indica il tempo nella prima posizione dell'array
tempi[i] si indica l'iesimo tempo nella posizione dell'array
a = tempi[4] si copia in a il valore del tempo nella posizione 4
scanf("%d",&tempi[1000]); si legge un valore e lo si mette alla posizione 1000 dell'array
printf("%2d",tempi[15778]); si visualizza il valore alla posizione 15778.

La possibilità di utilizzare una variabile come indice dell'array ci permette di scrivere istruzioni in grado di elaborare con un codice compatto anche tutto l'array.

L'acquisizione dei tempi di tutti i partecipanti alla maratona di New York si riduce, ad esempio, alle istruzioni:

printf("Inserisci il numero di partecipanti: "); scanf("%d",&n);

for (i=1;i<=n;i++)
	{   	printf("Inserisci il tempo del partecipante n. %2d:  ",i); 
		scanf("%d",&tempi[i]); 
	}

Un esempio completo della manipolazione di un array di valori è quello seguente. Il programma legge una serie di n valori mettendoli in un array di nome vet e, dopo averli disposti in ordine crescente, visualizza il contenuto dell'array.

#include 
#include 

int main()
{     int i, j, n, temp;
      int vet[10];

      // Acquisizione dell'array
      printf("Inserisci il numero di elementi: "); scanf("%d",&n);
      for (i=1;i<=n;i++)
      {   printf("Inserisci il %2d elemento: ",i); scanf("%d",&vet[i]); }

      // Ordinamento
      printf("\nEffettuo l'ordinamento \n\n");
      for (i=1;i<=n-1;i++)
          for (j=i+1;j<=n;j++)
              if (vet[i]>vet[j])
              {  temp = vet[i];
                 vet[i] = vet[j];
                 vet[j] = temp;
              }
      
      // Visualizzazione dei risultati
      for (i=1;i<=n;i++) 
          printf("%2d elemento: %2d\n",i, vet[i]); 
      
      
      system("PAUSE");
      return 0;
}

Scrivi email per il tutor dei corsi
Scrivi email per l'amministratore del sito

Torna all'indice del corso
Ultima modifica: 06/04/2010