next up previous contents index
Next: Vettori e funzioni Up: Vettori Previous: Vettori   Indice   Indice analitico

Definizione di un array

Si sarà certamente notato che abbiamo sempre parlato di dichiarazione per gli array, mai di definizione, per due motivi: la definizione di un array è una operazione poco comune, inoltre essa prevede una sintassi particolare. Non è cosìper le variabili, la cui definizione (anche detta inizializzazione) è una operazione semplice da effettuare e consigliata. Ricordiamo brevemente perché; se abbiamo

int a = 7;
int b;
la variabile a è stata definita (inizializzata), mentre b è stata solo dichiarata; se per qualche motivo ``dimentichiamo'' di assegnare a b un valore e tentiamo di usare tale variabile, scopriamo che essa contiene un valore arbitrario; errori del genere, provare per credere, non sono facili da eliminare, anche in un programma di dimensioni medio-piccole (200-300 righe). Si è consigliato per questo di creare variabili al momento opportuno, in maniera tale da poterle inizializzare. Il discorso per gli array è però diverso: come si può creare un array ``al momento opportuno'': di solito gli elementi di un array vengono assegnati con dei valori, in momenti diversi del programma mentre la definizione prevede che i valori di tutti gli elementi di un array siano dati nello stesso statement. La soluzione è unica: non definire gli array, piuttosto dichiararli e, immediatamente dopo, mettere a zero tutti gli elementi. In questa maniera ci si copre le spalle nei confronti di un eventuale utilizzo di un elemento senza che esso sia stato assegnato; il procedimento, semplicissimo, è il seguente:

int array[100];
for (int i = 0; i < 100; i++)
  array[i] = 0;
Comunque, potrebbe capitare anche di volere inizializzare un array con dei valori iniziali; in tal caso la sintassi è la seguente:
tipo nome_array[N] = { val1, val2, ..., valN-1 };
È possibile anche inizializzare solo una parte dell'array, ma questa pratica è calorosamente sconsigliata, perché induce evidentemente in errore il programmatore, il quale non può aspettarsi che l'array sia stato inizializzato solo parzialmente ed è tentato di usare anche gli elementi non inizializzati, come se lo fossero6.1. Un esempio di inizializzazione di un vettore è il seguente:

// ex6_1_5
#include <iostream.h>
void main() {
  double a[5] = {0, 2.0, 4.0, 6.0, 8.0};
  int b[] = {1, 3, 5, 7, 9};
  for (int i = 0; i < 5; i++)
    cout << a[i] << "\t" << b[i] << "\n";
}

output:
 0 1
 2 3
 4 5
 6 7
 8 9

Si noti che, nel caso si inizializzi un array, non è necessario specificare il numero degli elementi (tanto il compilatore li sa contare ...). Così come per le variabili, anche gli array possono essere dichiarati costanti, ed in tal caso vanno inizializzati, il che è ovvio: visto che l'operazione di assegnamento non è permessa per variabili costanti (e anche per array costanti, essendo essi un insieme di variabili costanti), se non lo si inizializza, come potremmmo mai utilizzare un oggetto di tale tipo? Vediamo un esempio.


// ex6_1_6.cpp
#include <iostream.h>
void main() {
  const int pot2[] = {1, 2, 4, 8, 16, 32,
                      64, 128, 256, 512, 1024};
  int esponente;
  cout << "calcola le potenze intere di due\n"
    "esponente (max 10)? ";
  cin >> esponente;
  if ( (esponente >= 0) && (esponente <= 10) )
    cout << pot2[esponente];
}

esempio di output:
calcola le potenze intere di due
esponente (max 10)? 7
128

Abbiamo presentato in questo esempio un metodo molto veloce per calcolare le poteze di due; certo utilizzare lo stesso metodo per tutte le possibili basi (anche solo quelle intere) sarebbe una via del tutto impraticabile.

ex-2
si scriva un programma che accetti cinque numeri interi, li raddoppi e li stampi;
ex-3
si scriva un programma che accetti cinque numeri interi, sommi a ciascuno il successivo (all'ultimo si sommi il valore del primo) e li stampi;
ex-4
si scriva un programma che calcoli la media geometrica di dieci numeri;
ex-5
si scriva un programma che accetti dodici temperature (una per ogni mese dell'anno a partire da Gennaio) e stampi il nome6.2 dei mesi nei quali si ha la minima temperatura e la massima;


next up previous contents index
Next: Vettori e funzioni Up: Vettori Previous: Vettori   Indice   Indice analitico
Claudio Cicconetti
2000-09-06