Funzioni di input e output per gli script in MATLAB

Nella lezione precedente abbiamo visto come creare e eseguire degli script in MATLAB. Tuttavia gli script che abbiamo creato finora non sono molto utili perché non permettono all'utente di interagire con essi.

In questa lezione vedremo come acquisire valori da tastiera e come mostrare i risultati dello script a schermo. Studieremo le funzioni input, per richiedere valori all'utente, e disp e fprintf, per mostrare i risultati dello script a schermo.

Funzione input

Prendiamo uno script di esempio il cui scopo è quello di calcolare il volume di una sfera.

% Script per calcolare il volume di una sfera

raggio = 5
volume = (4/3) * pi * raggio^3

Il programma funziona correttamente, ma il valore del raggio è fissato a 5. Per rendere lo script più generico dobbiamo trovare il modo di ottenere il valore del raggio dall'utente. A tal proposito possiamo utilizzare la funzione input.

La funzione input permette di acquisire un valore da tastiera e di assegnarlo ad una variabile. Per esempio, se vogliamo acquisire il valore del raggio dall'utente possiamo scrivere:

raggio = input('Inserisci il raggio: ')

La funzione input accetta come argomento una stringa, ossia una sequenza di caratteri, che viene visualizzata a video. Questa stringa rappresenta il prompt o messaggio di input. Lo scopo del messaggio è quello di fornire all'utente delle istruzioni su cosa deve inserire.

Pertanto, possiamo modificare il nostro script in questo modo:

% Script per calcolare il volume di una sfera

raggio = input('Inserisci il raggio: ')
volume = (4/3) * pi * raggio^3

A questo punto, quando eseguiamo lo script, otteniamo il seguente risultato:

>> volume_sfera
Inserisci il raggio: 8
volume =
    2.1447e+03

Come si può notare, la funzione input ha restituito il valore 8, ossia il valore inserito dall'utente. Questo valore è stato assegnato alla variabile raggio e quindi il programma ha calcolato correttamente il volume della sfera.

Definizione

Funzione input

La funzione input permette di acquisire un valore da tastiera e di assegnarlo ad una variabile.

La sintassi è la seguente:

variabile = input('messaggio')

Dettagli sulla funzione input

La funzione input legge e interpreta valori non solo di tipo numerico.

Ad esempio, alla funzione possiamo passare anche variabili. Ritornando al nostro esempio, supponiamo che nel workspace abbiamo definito una variabile r che rappresenta il raggio della nostra sfera:

>> r = 7;

Adesso nel workspace è definita la variabile r con valore 7. Se lanciamo lo script volume_sfera possiamo passare il valore della variabile r come argomento della funzione input:

>> volume_sfera
Inserisci il raggio: r
volume =
    1.4368e+03

Come si può notare, la funzione input ha preso il valore della variabile r e lo ha assegnato alla variabile raggio.

Nel caso in cui la variabile non fosse stata definita, MATLAB avrebbe restituito un errore:

>> volume_sfera
Inserisci il raggio: r
Error using input
Unrecognized function or variable 'r'.

Error in volume_sfera (line 3)
raggio = input('Inserisci il raggio: ')

In generale la funzione input è in grado di prendere in ingresso una qualsiasi espressione MATLAB. Ad esempio, possiamo passare il risultato di un'operazione:

>> volume_sfera
Inserisci il raggio: 5 * 6

raggio =

    30


volume =

   1.1310e+05

Pertanto possiamo usare la funzione input anche per acquisire dei vettori. Ad esempio, possiamo acquisire un vettore di 5 elementi:

>> v = input('Inserisci un vettore di 5 elementi: ')
Inserisci un vettore di 5 elementi: [1 2 3 4 5]

v =

     1     2     3     4     5
Definizione

Funzione input e espressioni

La funzione input è in grado di prendere in ingresso una qualsiasi espressione MATLAB. L'espressione può essere una variabile, un numero, un vettore, una matrice, una funzione, ecc.

Funzione disp

Per mostrare il risultato di uno script, finora, abbiamo semplicemente usato una variabile che rappresenta il risultato finale dello script e gli abbiamo assegnato un valore senza usare il punto e virgola. Ad esempio, nel caso del volume della sfera, abbiamo assegnato il risultato alla variabile volume:

% Script per calcolare il volume di una sfera

raggio = input('Inserisci il raggio: ')
volume = (4/3) * pi * raggio^3

In questo modo, MATLAB mostra il risultato della variabile volume a video. Questo è un modo molto semplice per mostrare il risultato di uno script, ma non è il più elegante.

Per mostrare messaggi e risultati a schermo è possibile utilizzare le funzioni di output. La più semplice è la funzione disp.

La funzione disp permette di mostrare a video un valore, sia esso il risultato di un'operazione o un messaggio, ma senza assegnare la variabile ans.

Ad esempio:

>> disp(10 ^ 2)
   100

Come si può notare, la funzione disp ha mostrato a video il risultato dell'operazione 10 ^ 2, ossia 100, ma non ha assegnato il valore 100 alla variabile ans.

disp può essere utilizzata anche per mostrare messaggi a video. Ad esempio:

>> disp('Il volume della sfera è:')
Il volume della sfera è:
>> disp(volume)
   1.1310e+05

Per cui, possiamo modificare il nostro script in questo modo:

% Script per calcolare il volume di una sfera

raggio = input('Inserisci il raggio: ');
volume = (4/3) * pi * raggio^3;

disp('Il volume della sfera è: ');
disp(volume);

Se eseguiamo lo script otteniamo il seguente risultato:

>> volume_sfera
Inserisci il raggio: 7
Il volume della sfera è: 
   1.4368e+03
Definizione

Funzione disp

La funzione disp permette di mostrare a video un valore, sia esso il risultato di un'operazione o un messaggio, ma senza assegnare la variabile ans.

La sintassi è la seguente:

disp(valore)

Funzione fprintf

Sebbene la funzione disp sia molto semplice da usare e vada bene in molti casi, non è sempre la più adatta o la più flessibile. Essa, infatti, accetta un solo argomento, ossia il messaggio o il valore da mostrare a video.

Per tal motivo esiste la funzione fprintf, che permette di mostrare a video un messaggio formattato.

La funzione fprintf è un esempio di funzione che accetta un numero variabile di argomenti. Il primo argomento che la funzione prende in ingresso è la cosiddetta stringa di formato. Questa stringa rappresenta un messaggio da mostrare a video. Ad esempio:

>> fprintf('Il volume della sfera è: ')
Il volume della sfera è: 

In questo caso abbiamo usato una stringa semplice. Tuttavia, se nella stringa di formato è presente un carattere %, allora la funzione fprintf interpreta il carattere successivo come un segnaposto. Il segnaposto indica dove inserire un valore. Tale valore viene preso dagli argomenti successivi della funzione fprintf.

Prendiamo un esempio:

>> fprintf('Il volume della sfera è: %f\n', 5.6)
Il volume della sfera è: 5.600000

In questo esempio la stringa di formato contiene un segnaposto %f. Il segnaposto %f indica che il valore da inserire nella stringa di formato è un numero reale. Il valore da inserire è il secondo argomento della funzione fprintf, ossia 5.6.

Inoltre, nella stringa di formato è presente un'altra sequenza speciale di caratteri: \n. Questa sequenza di caratteri indica un ritorno a capo. Le sequenze di caratteri precedute da \ sono chiamate sequenze di escape e sono utilizzate per rappresentare caratteri speciali.

Prendiamo un altro esempio:

>> fprintf('Il volume della sfera di raggio %d è: %f\n', 5, 5.6)
Il volume della sfera di raggio 5 è: 5.600000

In questo caso la stringa di formato contiene due segnaposti: %d e %f. Il segnaposto %d indica che il valore da inserire nella stringa di formato è un numero intero. Il valore da inserire è il secondo argomento della funzione fprintf, ossia 5. Il segnaposto %f indica che il valore da inserire nella stringa di formato è un numero reale. Il valore da inserire è il terzo argomento della funzione fprintf, ossia 5.6.

In generale, ogniqualvolta la funzione incontra un segnaposto, al suo posto inserisce il valore successivo nella lista degli argomenti.

Esistono vari specificatori di formato per i segnaposti. Nella tabella che segue sono riportati quelli più comuni:

Specificatore di formato Descrizione
%d Numero intero
%f Numero reale
%s Stringa di caratteri
%c Carattere
Tabella 1: Principali specificatori di formato per la funzione fprintf
Definizione

Funzione fprintf

La funzione fprintf permette di mostrare a video un messaggio formattato.

La sintassi è la seguente:

fprintf(stringa_di_formato, valore1, valore2, ...)

La stringa di formato può contenere segnaposti. Ogni segnaposto specifica il formato del valore da inserire nella stringa di formato. Ad ogni segnaposto viene sostituito un valore della lista degli argomenti in ordine di apparizione.

Specificatori di formato e larghezza del campo

I segnaposti inseriti nella funzione fprintf possono anche specificare il numero di cifre o caratteri da mostrare a video. Per fare ciò è necessario specificare la larghezza del campo.

Ad esempio, se vogliamo mostrare un numero intero usando 5 caratteri, possiamo usare il seguente segnaposto:

>> fprintf('Il numero intero è: %5d\n', 5)
Il numero intero è:     5

In questo caso il segnaposto %5d indica che il valore da inserire nella stringa di formato è un numero intero e che deve essere mostrato usando 5 caratteri. Nel caso in cui il numero intero abbia meno di 5 cifre, allora il numero viene mostrato aggiungendo degli spazi a sinistra come nell'esempio di sopra.

Viceversa, se il numero intero ha più di 5 cifre, allora il numero viene mostrato nella sua interezza occupando più di 5 caratteri.

Possiamo anche specificare la precisione, ossia il numero di cifre decimali da mostrare a video. Prendiamo un esempio in cui mostriamo un numero occupando 7 caratteri e con 3 cifre decimali:

>> fprintf('Il numero reale è: %7.3f\n', 5.6)
Il numero reale è:  5.600

In questo caso il segnaposto %7.3f indica che il valore da inserire nella stringa di formato è un numero reale e che deve essere mostrato usando 7 caratteri, di cui 3 per le cifre decimali.

Definizione

Larghezza del campo e precisione

La larghezza del campo e la precisione sono due caratteristiche che possono essere specificate per i segnaposti della funzione fprintf.

La larghezza del campo indica il numero di caratteri da mostrare a video. La precisione indica il numero di cifre decimali da mostrare a video.

La sintassi per specificare la larghezza del campo e la precisione è la seguente:

%[larghezza_campo].[precisione]specificatore_di_formato

Quando il numero di cifre decimali di un numero reale è maggiore della precisione specificata, allora il numero viene arrotondato. Prendiamo un esempio:

>> fprintf('Il numero reale è: %7.3f\n', 5.6789)
Il numero reale è:  5.679

In questo caso il numero reale 5.6789 viene arrotondato a 5.679 perché la precisione specificata è 3.

In Sintesi

In questa lezione abbiamo visto come rendere i nostri script interattivi leggendo dati da tastiera e mostrando messaggi a video.

In particolare abbiamo visto che per richiedere dati all'utente possiamo usare la funzione input. Mentre per mostrare messaggi a video possiamo usare la funzione disp o la funzione fprintf.

La funzione fprintf è molto più potente della funzione disp perché permette di mostrare messaggi formattati utilizzando segnaposti e specificatori di formato.