122
BLoCCo teMatICo a
Tecniche di programmazione
errorI CoMunI neLL’uso deI datI strutturatI
ANTIVIRUS
1
Accesso agli array
Se nel nostro pseudolinguaggio V[0]
rappresenta il primo elemento dell’array V
di 100 elementi interi, quali delle seguenti
pseudo istruzioni accedono a porzioni di
memoria che non contengono elementi
dell’array V?
X
←
v[0]
X
←
v[1]
X
←
v[99]
X
←
v[100]
X
←
v[101]
tIPo dI errore
eseMPIo
doVe
IMPatto
Accesso al primo o
all’ultimo elemento di
un array.
In molti linguaggi: A[0] è il
primo elemento, A[1] è il
secondo elemento.
Se l’array ha 20 elementi:
A[19] è l’ultimo elemento.
Durante la normale
codifica di un
programma per
accedere al primo o
all’ultimo elemento
dell’array.
Si accede al secondo elemento
pensando che sia il primo oppure si
può facilmente cercare di accedere
a un elemento che non esiste (oltre il
valore massimo dell’indice). Infatti, se
l’array ha 20 elementi, per errore si può
tentare di accedere all’elemento A[20],
che non esiste perché l’indice va da 0
a 19 (valore massimo).
Modifica della
lunghezza di un array
La lunghezza di un array
A passa da 40 a 45.
Durante la normale
codifica di un
programma nella
parte dichiarativa
delle variabili.
Occorre modificare la lunghezza in
tutti i punti dove si fa riferimento alla
lunghezza massima dell’array.
In alcuni linguaggi di
programmazione, un
errore tipico è quello
di scrivere le variabili di
ciclo (formate da una
sola lettera) maiuscole
invece che minuscole
(o viceversa).
Lettera I (i maiuscola)
invece di i (minuscola).
Durante la normale
codifica di un
programma nei cicli
che coinvolgono
operazioni su array.
L’errore non si riesce a trovare
facilmente perché la variabile è sempre
i (come nell’esempio), ma una volta
è scritta in maiuscolo e un’altra in
minuscolo.
2
Dimensione massima dell’array
Come andrebbe modificato il seguente
frammento di pseudocodice per poter
liberamente cambiare la dimensione massima
dell’array senza fare altre modifiche?
i:
Intero
tIPo
a =
array
[
100
]
di
Intero
...
Per
i
←
1
a
100
eseGuI
LeGGI
(a
[
i
]
)
FInePer