Array

La notazione funzionale si è rivelata molto flessibile per il riutilizzo del codice della funzione Max2(X, Y), infatti

Max3:= Max2(Max2(X1, X2), X3);
Max4:= Max2(Max2(Max2(X1, X2), X3), X4);
...
MaxN:=(Max2(...(Max2(Max2(X1, X2), X3), ...), XN);

ma non comoda se bisogna riscrivere l’espressione a seconda del numero di variabili.

L’algoritmo sottostante è invece

(X1, X2)? --> M --> (M, X2)? --> M --> (M, X3)? --> M --> (M, X4)? --> M ...

cioè iterativo…

Un altro esempio è

Media2:=(X1 + X2)/2;
Media3:=(X1 + X2 + X3)/3;
...
MediaN:=(X1 + X2 + ... + XN)/N;

Sarebbe utile poter realizzare del codice che lavorasse con un pacchetto, di dimensione a piacere ma ragionevole, di variabili:

function MaxV(P: "Pacchetto di Reali"): Real;

Il Pascal permette di dichiarare vettori di dimensione costante, cioè la memoria allocata rimane costante anche se si utilizza solo una parte della capacità del vettore.

Una dichiarazione di vettore è la seguente

Var V: Array[1..10] of Real;

dove

  • V, il nome della variabile definita subito dopo i due punti
  • Array, indica che si tratta di un vettore (sequenza, pacchetto, raggruppamento, blocco) di elementi più semplici
  • [ ], le parentesi quadre indicano l’elenco dei soprannomi per ciascun elemento nel vettore, in modo da poterli distinguere univocamente
  • 1..10, il primo e l’ultimo soprannome e tutti quelli compresi nell’intervallo da 1 a 10 (..)
  • of, (seguito da un tipo: real, integer, boolean, …) indica il tipo comune degli elementi raggruppati nel vettore

Il primo indice (soprannome) è, quasi sempre, 1 mentre l’ultimo indice è un intero qualsiasi maggiore del primo (10), di conseguenza da quest’ultimo dipende la dimensione del vettore.

Conviene dichiarare la dimensione, una volta per tutte, all’inizio del programma con

Const DIM = 10;

rendendo più semplice la modificabilità del codice.

I singoli elementi del vettore sono raggiungibili per operazioni di lettura o scrittura con una scrittura del tipo V[E] dove E è una espressione che dà come risultato un valore compreso nell’intervallo di definizione del vettore.

Esempi

V[1]:=V[2];
V[5]:=3*V[10];
ReadLn(V[i]);
Write(V[3*i]:10:5);

i e 3*i sono espressioni intere con valore nell’intervallo [1..DIM].

I vettori diventano a tutti gli effetti delle risorse (come variabili, costanti) e quindi compariranno anche come parametri per eventuali sottoprogrammi, allora la dichiarazione di funzione precedente potrebbe essere del tipo

Function MaxN(V: Array[1..DIM] of Real): Real;

ma il TurboPascal non accetta dichiarazioni di tipo complesso nell’elenco dei parametri quindi dobbiamo riassumere con una dichiarazione di tipo

Type Vettore: Array[1..DIM] of Real;

(il nome scelto è libero…) e la dichiarazione del vettore diventa

Var V: Vettore;

e la funzione diventa

Function MaxV(V: Vettore): Real;