Cap. 4: Start programming
Cambiare il numero di ingressi e uscite
Quando ho un numero di argomenti in ingresso di cui non conosco il numero (potenzialmente infinito), ho bisogno di due variabili:
-
Varargin (variabili in input): variabile predefinita che contiene la lista di tutte le variabili in ingresso dopo la prima. È una variabile cella, cioè un array di diversi tipi di variabili (numeri, vettori, matrici, stringhe, booleani, ecc.) fornite come input alla funzione. Per accedere all'i-esimo elemento di varargin si usa la sintassi
varargin{i}. - Varargout (variabili in uscita).
Il numero di elementi in ingresso e in uscita è memorizzato nelle variabili:
- Nargin (numero di argomenti in input) è un intero e indica quanto è lungo il vettore.
- Nargout (numero di argomenti in uscita). Non trattati qui.
Funzioni e procedure
Quando si parla di funzioni, le cose da ricordare sono:
- Come si gestiscono le variabili: le variabili dentro una funzione nascono e muoiono con quella.
-
La funzione non è una procedura: la procedura è semplicemente un pezzo di codice dentro il workspace, mentre la funzione è un qualcosa che ha un ingresso (input) e restituisce qualcosa (output). Quello che restituisce viene scritto all’inizio, dopo la parola function.
function [min, max] = minmax(v1, varargin)
Uscite (outputs), Nome del file, Ingressi (inputs):
- Se l’ingresso è composto da uno o due elementi si scrive semplicemente il nome del vettore.
- Nel caso in cui si tratti di 2 o più ingressi si scrive varargin.
Esempio: somma di una sequenza di numeri interi in ingresso
function [out1] = sum_integers(x, varargin)
sprintf('Number of inputs: %d\n', nargin)
sprintf('Number of inputs in varargin: %d\n', length(varargin))
Selem = x; % Memorizza la somma parziale degli interi in ingresso
for i = 1:nargin-1
Selem = Selem + varargin{i};
end
out1 = Selem;
end
>> x1 = 6; x2 = 7; x3 = 1;
>> [y] = sum_integers(x1, x2, x3)
ans = 'Number of inputs: 3'
ans = 'Number of inputs in varargin: 2'
y = 14
Esempio: calcolare la media degli elementi passati in ingresso
>> media(2,4,10,8)
function [med]= media(x, varargin)
ans = Numero_elem = 0; 7.3333
Somma_elem = 0; % sbagliato, prende in considerazione solo i valori 4, 10, 8.
for i = 1:nargin-1
Numero_elem = Numero_elem + length(varargin{i});
Somma_elem = Somma_elem + sum(varargin{i});
end
med = Somma_elem / Numero_elem;
>> media(2,4,10,8)
function [med] = media(x, varargin)