Anteprima
Vedrai una selezione di 4 pagine su 13
Informatica, programmazione Pag. 1 Informatica, programmazione Pag. 2
Anteprima di 4 pagg. su 13.
Scarica il documento per vederlo tutto.
Informatica, programmazione Pag. 6
Anteprima di 4 pagg. su 13.
Scarica il documento per vederlo tutto.
Informatica, programmazione Pag. 11
1 su 13
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

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

Dettagli
Publisher
A.A. 2022-2023
13 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Kevinzerilli di informazioni apprese con la frequenza delle lezioni di Conoscenze informatiche e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Firenze o del prof Williams Louise.