L’algoritmo non è soltanto un insieme di istruzioni; una componente fondamentale dell’algoritmo è costituita dai dati; quindi una fase essenziale della stesura dell’algoritmo è la scelta dei dati da utilizzare.
Per poter stabilire quali dati utilizzare è importante conoscere:
-
la differenza tra dati di input, di output e di lavoro;
-
la differenza tra costanti e variabili;
-
i tipi di dati disponibili.
Dati di input e di output
I dati permettono la comunicazione tra l’utente del programma e l’esecutore.
L’esecutore applica l’algoritmo ai dati iniziali forniti dall’utente e produce dei risultati da restituire all’utente stesso (il programma viene realizzato proprio allo scopo di ottenere tali risultati).
I dati necessari alla soluzione di un problema si possono suddividere in dati di input e dati di output.
La suddivisione viene fatta in base al verso di comunicazione dei dati tra utente ed esecutore, in riferimento all’esecutore (o in modo più impreciso al programma).
I dati di input sono i dati che l’utente deve fornire al programma per l’esecuzione.
I dati di input devono essere noti al momento dell’esecuzione; non ha invece importanza conoscerli al momento della descrizione dell’algoritmo, anzi l’algoritmo non si deve basare sul caso particolare dei valori noti ma deve essere generale, cioè valido per qualsiasi altro insieme di valori di input.
I dati di output sono il risultato dell’elaborazione, cioè i dati che il programma restituisce all’utente.
I dati di output costituiscono lo scopo del programma.
Alcuni dati possono essere sia di input che di output (per esempio un testo modificato in un elaboratore di testi).
I dati interni o di lavoro sono altri dati, utilizzati all’interno dell’algoritmo, predisposti dal programmatore, ma di nessuna importanza per l’utente del programma.
I dati di lavoro non sono visibili all’esterno ma sono usati solo per l’elaborazione (sono trasparenti per l’utente).
Costanti e variabili
I dati che descrivono un problema si possono suddividere in costanti e variabili.
I dati possono essere costanti o variabili in base alla possibilità di cambiare o meno valore nel tempo.
I dati costanti sono dati che hanno un valore predefinito, che non cambia.
I dati variabili possono cambiare valore.
Calcolo del perimetro di un quadrato.
I dati necessari sono la misura del lato e il numero dei lati.
Il numero dei lati è 4 ed è una costante, non cambia mai, per tutti i quadrati.
La misura del lato è variabile e cambia da un quadrato all’altro.
Calcolo del perimetro di un poligono.
Anche in questo caso i dati necessari sono la misura del lato e il numero dei lati.
In questo problema però anche il numero dei lati è variabile, perché si possono considerare poligoni con numero di lati diverso.
Una variabile è un dato che viene modificato durante l’elaborazione o da un’elaborazione ad un’altra.
In qualche caso si può considerare costante anche un valore che non cambia durante l’elaborazione, anche se può cambiare per elaborazioni diverse.
Per esempio le aliquote IVA si possono considerare costanti, anche se possono variare da un anno all’altro in base a variazioni di legge.
I valori che possono essere assegnati a costanti e variabili dipendono dal tipo di dati a cui appartengono.
Tipi di dati
I tipi di dati utilizzabili dipendono dal paradigma di programmazione.
Nella programmazione orientata agli oggetti i dati sono sempre rappresentati da oggetti.
Nel paradigma logico i dati sono fatti.
Nel paradigma funzionale i dati sono liste di simboli.
Nel paradigma imperativo i dati possono essere di molti tipi diversi; si possono suddividere in dati semplici (come dati numerici, alfanumerici o booleani) e strutture di dati.
I tipi di dati semplici standard (cioè quelli normalmente disponibili) sono:
-
numerico: un dato è numerico se è formato soltanto dalle cifre decimali, il segno e la virgola decimale (o il punto decimale secondo la notazione usata); sui dati numerici sono definite tutte le operazioni aritmetiche ed operazioni di confronto; i dati numerici di solito si distinguono in numeri interi e numeri reali;
-
alfanumerico: un dato alfanumerico può contenere cifre, caratteri alfabetici o caratteri speciali; i caratteri disponibili dipendono dal tipo di codifica usata per la memorizzazione e possono essere confrontati in base al codice corrispondente;
-
in particolare spesso sono disponibili le stringhe di caratteri alfanumerici; per le stringhe sono solitamente definite operazioni di concatenazione o estrazione di parti e le operazioni di confronto;
-
booleano: un dato booleano può assumere solamente i valori vero o falso; sui dati booleani sono definite le operazioni logiche not, and e or.
Non tutti i linguaggi permettono l’utilizzo di dati booleani.
Normalmente non tutti i valori di un tipo di dati sono utilizzabili in un algoritmo.
La rappresentazione di un tipo di dati è finita, quindi è possibile utilizzare solo un intervallo limitato di dati.
Inoltre, in base al problema, potrebbe essere ammissibile solo un certo insieme di valori, dominio del problema.
In un algoritmo per la media dei prezzi il dominio dei prezzi è costituito da numeri reali positivi con due cifre decimali.
Per la media dei voti presi da uno studente il dominio dei voti è costituito dai voti da 1 a 10.
Il dominio può essere costituito da un intervallo dei valori di un tipo (subrange) o da un elenco di valori (enumerazione dei valori del dominio).
Per un algoritmo che lavora su stringhe il dominio potrebbe essere costituito da tutte le stringhe con un certo numero di caratteri o solo da determinate stringhe (per esempio i nomi dei mesi).
In alcuni casi è necessario stabilire dei vincoli ulteriori.
In una data il numero massimo del giorno dipende dal mese considerato.
È importante definire il dominio esatto dei dati e i relativi vincoli in modo che si possano effettuare dei controlli sull’inserimento dei dati o sui valori che i dati assumono durante l’elaborazione.