Conclusa l’analisi e l’uso dei metodi, ci accingiamo ad analizzare alcune strutture dati molo utili nella programmazione: i vettori e le matrici.

I vettori

I vettori (o array) sono delle particolari strutture che consentono di memorizzare valori dello stesso tipo richiamabili tramite un nome ed un indice.

A prima vista tale definizione è un po’ forviante ma come vedremo, in pratica, il concetto risulta più semplice di quanto si pensi. Faccio subito un esempio.

Prendiamo come modello il registro di un insegnante; come sappiamo c’è l’elenco dei nominativi, per esempio, della classe 4° A ordinati alfabeticamente e numerati in ordine crescente:

Classe 4° A

1

Cabrini Antonio

2

Costacurta Billy

3

Maradona Diego

...

... ... ...

25

Rossi Paolo

non c’è dubbio è una bella classe, ma, a parte gli illustri alunni, possiamo, guardando la tabella, trarre delle considerazioni:

  1. la tabella ha un nome: Classe 4° A
  2. contiene un elenco di nominativi dello stesso tipo: cognome e nome
  3. un numero univoco (indice) che individua tali nominativi all’interno dell’elenco.

Queste tre considerazioni ci consentono di creare una struttura dati che può essere gestita da codice C#, tramite cioè un vettore.

Vediamo per prima cosa come si dichiara un vettore in C#, questa è la sintassi:

tipo[] nome_vettore = new tipo[dim];

dove:

tipo[]

rappresenta il tipo di dato che il vettore deve contenere seguito da due parentesi quadre che indicano al compilatore che trattasi di un vettore (array)

nome_vettore

è il nome che si vuole dare al vettore

new tipo[dim];

è il costrutto che crea (alloca memoria) realmente il vettore contenente un numero di elementi pari a dim.

Alla luce di quanto detto, possiamo strutturare il nostro array relativo all’esempio della classe 4°A. Per prima cosa bisogna definire il tipo di dati che il nostro array deve contenere. In questo caso si può affermare che l’array dovrà contenere delle stringhe che rappresenteranno il cognome ed il nome dell’alunno, quindi di tipo string. La seconda questione è dare un nome all’array e potremmo dare il nome Classe_4A.

A questo punto il nostro array è parzialmente definito e nulla ci vieta di suddividere la dichiarazione in due parti distinte, la prima parte:

string[] Classe_4A;

dichiara un array di tipo string chiamato Classe_4A e rappresenta una dichiarazione ma non crea nessun array perché è necessario l’operatore new.

Prima di procedere con la seconda parte, è necessario stabilire quanti elementi deve contenere, in questo esempio, la dimensione è 25. Quindi adesso si può passare alla seconda parte la quale crea letteralmente l’array cioè, predispone una quantità idonea di memoria del PC affinché possa contenere i nostri dati (alunni); in codice:

Classe_4A = new string[25];

ora il vettore esiste e lo possiamo utilizzare all’interno del nostro programma.

E’ d’obbligo una precisazione riguardo all’indice.

Nel registro di un insegnante, la numerazione degli alunni parte, come è ovvio, dal numero 1 per poi proseguire fino a fine elenco. Nei vettori le cose stanno un po’ diversamente nel senso che la numerazione degli elementi in esso contenuti inizia da 0 cioè, gli elementi sono "numerati" da 0 a dim-1. Nell’esempio del vettore Classe_4A, gli elementi sono numerati da 0 a 24, quindi se vogliamo fare riferimento all’elemento che si trova nella 5° posizione, dovremo indicarlo con la posizione 4 (che rappresenta appunto il 5° elemento).

E’ bene ora mettere mano al codice per vedere in funzione il nostro array.

Con un semplice programmino faremo in modo che l’array venga popolato (caricato) con i nominativi della nostra classe. Ci limiteremo ad inserire solo i primi cinque e successivamente li visualizzeremo sul monitor. Questo è il codice:

N.R.

CODICE Alunni.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

using System;
// inizio
public class Alunni
{
   public static void Main()
      {
          // dichiaro la variabile di tipo string
          string alunno;

          // dichiaro l'array
          string[] Classe_4A;

          // creo l'array
          Classe_4A = new string[5];

          // leggo ed assegno i nominativi al vettore	
          for (int i=0; i<5; i++)
             {
                 // stampa messaggio di inserimento
                 Console.Write("\nInserisci il {0}° nominativo > ",i+1);
                 alunno = Console.ReadLine();
                 Classe_4A[i]=alunno;
             }

          Console.WriteLine("\nLa classe 4°A è composta da:\n");           
           
           // visualizzo il contenuto del vettore
           for(int i=0; i<5; i++)
                Console.WriteLine("\t{0}) {1}",i+1,Classe_4A[i]);
                
                // attende che si prema un tasto
                Console.ReadLine();
      }
}

e questa una prova di esecuzione:

Prova di esecuzione

Analisi del codice

Alla riga 8 viene dichiarata una variabile stringa alunno che conterrà il nominativo dell’alunno che via via verrà inserito nel vettore.

Alla riga 11 compare la dichiarazione del vettore chiamato Classe_4A. Ricordo che la dichiarazione non crea il vettore ma dichiara solo la variabile adibita al suo contenuto. Alla riga 14 viene effettivamente creato il vettore tramite l’operatore new e che conterrà al massimo 5 elementi di tipo stringa. Alla riga 17 è stato impostato un ciclo for che ci consente di inserire i 5 nominativi tramite l’istruzione di riga 21, alla riga 22 tale nominativo viene effettivamente inserito nel vettore indicizzato dall’indice i del ciclo. Quindi ad ogni iterazione, il vettore viene popolato con il nominativo inserito a partire dalla posizione 0 fino alla 4. Al termine dell’inserimento, alla riga 28, sempre tramite un ciclo for identico al precedente, viene stampato ogni elemento del vettore a partire sempre dalla posizione 0 fino alla 4. Si noti che, nel secondo ciclo for, non compaiono le parentesi graffe che delimitano il blocco di codice perché il costrutto for è composto da un'unica istruzione che rende superfluo l’uso delle parentesi.

Il programmino precedente non ha molta utilità pratica se non quella di mostrare come viene dichiarato ed utilizzato un semplice array di stringhe. Nella prossima lezione, "giocheremo" con un vettore in un programmino che ci permetterà di generare una sequenza casuale di numeri per il SuperEnalotto.


Pagina precedente - Pagina successiva