vuoi
o PayPal
tutte le volte che vuoi
Cap. 4: Start Programming
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.
•
Cap. 4: Start Programming
Cap. 4: Start Programming
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
Cap. 4: Start Programming
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
for i=1:nargin-1 considerazione solo i
Numero_elem= Numero_elem+length(varargin{i}); valori 4, 10, 8.
Somma_elem= Somma_elem+sum(varargin{i});
end
med= Somma_elem/Numero_elem; >> media(2,4,10,8)
function[med]= media(x,varargin) ans =
Numero_elem= 1; 6
Somma_elem= x;
for i=1:nargin-1 % nargin-1 è necessario; se
Numero_elem= Numero_elem+length(varargin{i}); avessimo messo i=1:nargin
Somma_elem= Somma_elem+sum(varargin{i}); darebbe errore perché si
end supererebbe la lunghezza di
med= Somma_elem/Numero_elem; varargin.
Cap. 4: Start Programming
Esempio: creare una funzione media_vect che abbia come input un qualsiasi numero di interi
o vettori di interi, e che calcoli la media totale di tutti gli input.
function[media]=media2(varargin)
Numero_elem= 0;
Somma_elem= 0; % media di una sequenza di vettori in ingresso
sprintf('Numero di inputs: %d\n', nargin)
if nargin== 0
disp('Inserisci almeno un elemento')
else for index= 1:nargin % per accedere a tutti gli ingressi
Numero_elem= Numero_elem+ length (varargin{index});
Somma_elem= Somma_elem+ sum (varargin{index});
end
media= Somma_elem/Numero_elem; >>x1=[2,3,1,2]; x2=[3,9]; x3=8;
end >> media2(x1, 8, x2, x3)
end Numero di inputs: 4
ans= 4,5
% è la media degli inputs:
(2+3+1+2+8+3+9+8)/8= 36/8= 4,5
Cap. 4: Start Programming
Esempio: calcola il massimo e il minimo (2 output diversi) di una sequenza di numeri
(o vettori di numeri) passati come argomenti di una funzione.
>> [a b]= minmax(x, y, x)
function[min,max]=minmax(v1,varargin)
if nargin==1 argomenti errati
v=v1;
elseif nargin==2 a =
v=[v1,varargin{1}]; 0
else disp('argomenti errati'); b =
v=[0]; 0
end
max=v(1);
min=v(1);
for i=2:length(v) >> [a b]= minmax(100, 2)
if v(i)>max a =
max=v(i); 2
end
if v(i)<min
min=v(i); b =
end 100
end
Cap. 4: Start Programming
Manipolazione dei file: gestire file (creare, salvare, aggiornare)
La filosofia che sta dietro queste azioni comporta l'uso di un puntatore intero variabile
(handler), cioè un numero che tiene traccia dell'ultimo simbolo esaminato del file.
L’handler viene creato automaticamente con un nome (x), associato ad un file, che
viene creato/si sta leggendo/su cui si sta lavorando, e lo scorre riga dopo riga.
L'ultimo simbolo di un file è chiamato eof (End of File).
Per interagire con un file, esso deve essere:
aperto (il puntatore è impostato nella sua prima posizione);
letto (il puntatore aumenta il suo valore di una o più posizioni);
aggiornato (un simbolo di una riga può essere cambiato o possono essere aggiunte o
sovrascritte nuove righe);
chiuso (la variabile puntatore viene cestinata dopo il suo utilizzo).
Ogni azione ha ovviamente il suo comando per essere eseguita.
Per elencare il contenuto di un file utilizzare il comando type(nomefile).
Cap. 4: Start Programming
Opzioni fopen
Il comando x= fopen(filename,’option’) apre il file e mette l’handler x nella sua prima
posizione e presenta comportamenti diversi a seconda dell'opzione:
‘r’ apre il file per la lettura, senza poterlo modificare
‘w’ apre/crea un nuovo file per la scrittura e elimina il contenuto del file, se esiste.
‘a’ apre/crea un nuovo file di scrittura e aggiunge nuovo contenuto (‘append’) alla
fine del file (il puntatore si trova già nella posizione eof).
‘r+’ apre un file per lettura/scrittura
‘w+’ apre/crea un nuovo file per la lettura/scrittura ed elimina il contenuto, se esiste.
‘a+’ apre/crea un nuovo file per la lettura/scrittura e aggiunge elementi alla fine del file.
Cap. 4: Start Programming
Esempio di Script: leggere un file, se esiste, altrimenti dire "non esiste"
function readfile(inputArg1) % apre il file in modalità lettura e imposta l’handler x alla sua
x= fopen(‘inputArg1.txt’,'r'); prima posizione
if x== -1 % il comando fopen restituisce -1 se il file non viene
sprintf('%s not exists!',’inputArg1’) trovato o si verificano problemi nella sua apertura.
else % feof(x) controlla se x ha raggiunto l'ultima posizione del file (eof).
while ~(feof(x))
line=fgetl(x); % fgetl(x) scorre/legge l’intera riga del file dove si trova il puntatore
disp(line); % mostra la linea dove si trova l’handler
end
fclose(x); % distrugge il puntatore x
end