DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sottoprogrammi Marco D. Santambrogio – Ver. aggiornata al 14 Dicembre 2015.

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array, matrici Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
Procedure e funzioni A. Ferrari.
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Dipartimento di Matematica
Algoritmi e Programmazione
Fondamenti di Informatica I a.a Il linguaggio C Il preprocessore La sostituzione di macro Le compilazioni condizionali Linclusione di file C.
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Iterazione enumerativa (for)
Funzioni definite dall’utente
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
Process synchronization
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 15 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 6 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab m-file m-file script script Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali.
MATLAB.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Indipendenza lineare,
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
Creazione di matrici Delimititatore di riga Delimititatore di matrice
Introduzione alla programmazione ll
Le funzioni.
FUNZIONI: IL MODELLO APPLICATIVO 1) Valutazione, nellenvironment corrente, del simbolo che denota il nome della funzione; 2) Valutazione, nellenvironment.
FUNZIONI... Una funzione permette di dare un nome a una espressione rendendola parametrica float f(){ return * sin(0.75); } float f1(int x) { return.
INTRODUZIONE A MATLAB.
Università degli Studi di Bari Laurea in Chimica Di spense di Informatica - Dott. F. Mavelli Programmare in Matlab Funzioni di Libreria Funzioni definite.
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 6 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
Diagrammi 2D e 3D Funzioni di ordine superiore
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Script 1 Marco D. Santambrogio – Ver. aggiornata al 2 Dicembre 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sottoprogrammi Marco D. Santambrogio – Ver. aggiornata al 20 Dicembre 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e stringhe Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Strutture di controllo Marco D. Santambrogio – Ver. aggiornata al 16 Dicembre 2013.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
2000 Prentice Hall, Inc. All rights reserved. Attivazione di funzioni La chiamata/attivazione di funzione viene indicata citando il nome della funzione.
File e Funzioni Si possono distinguere tre tipi di file che vengono utilizzati in MATLAB: M-file: hanno estensione .m e in essi vengono memorizzati i.
- prof. V. Riboldi - SOTTOPROGRAMMI IN TPASCAL METODO TOP DOWN.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 6 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
Introduzione a Javascript
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 3 Aprile 2015.
La ricorsione.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Ottobre 2014.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Allievi Elettrici - AA Le funzioni ricorsive in C
Sottoprogrammi e funzioni
1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( )
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Marzo 2014.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 5 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 8 Aprile 2015.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 26 Marzo 2014.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
INTRODUZIONE A MATLAB LEZIONE 2 Sara Poltronieri.
Copyright © Istituto Italiano Edizioni Atlas
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 14 Marzo 204.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 28 Ottobre 2014.
Eprogram informatica V anno. Introduzione a PHP Introduzione La diffusione di PHP ha avuto un notevole incremento dalla fine degli anni Novanta a oggi,
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 5 – Info B Marco D. Santambrogio – Matteo Ferroni –
“ Pseudocodice ” Un programma per computer lavorerà su in insieme di “ variabili ” contenenti i dati del problema, soluzioni intermedie, soluzioni finali.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – Ver. aggiornata al 24 Agosto 2015.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 5 – Info B Marco D. Santambrogio – Matteo Ferroni –
1 Metodo I metodi sono uno strumento che i programmatori usano per strutturare i programmi, sia per renderli più facili da capire che per permettere il.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Strutture di controllo Marco D. Santambrogio – Ver. aggiornata al 24 Agosto 2015.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 6 – Info B Marco D. Santambrogio – Matteo Ferroni –
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sottoprogrammi Marco D. Santambrogio – Ver. aggiornata al 24 Agosto 2015.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 6 – Info B Marco D. Santambrogio – Matteo Ferroni –
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Diagrammi 2D e 3D Funzioni di ordine superiore Marco D. Santambrogio – Ver. aggiornata.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 4 Aprile 2016.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
Process synchronization
Process synchronization
Transcript della presentazione:

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sottoprogrammi Marco D. Santambrogio – Ver. aggiornata al 14 Dicembre 2015

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 15 Dicembre 2015: -1 2

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 15 Dicembre 2015: -1 Altro aggiungere io non devo… 3

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 4

Il ciclo for for indice = espressione istruzioni end Il ciclo for usa un array per assegnare valori alla variabile di conteggio  Questo array può essere generato “al volo” con un’espressione del tipo “init:delta:fin”  Se l’array è una matrice alla variabile di conteggio vengono assegnate in sequenza le sua colonne Esempio: leggi 7 numeri e mettili in un vettore di nome number for n = 1:7 number(n) = input('enter value '); end 5

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Esempio matrice: cicli Data una matrice a, si calcoli la matrice risultante avente per tutti i valori a(h,k) maggiori di 5, la radice del valore stesso, gli altri rimangono invariati 6

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Esempio matrice: cicli Data una matrice a, si calcoli la matrice risultante avente per tutti i valori a(h,k) maggiori di 5, la radice del valore stesso, gli altri rimangono invariati [r, c]=size(a); %usata in questo modo size dà righe e colonne di una matrice for h = 1:r for k = 1:c if a(h, k)>5 a(h, k)=sqrt(a(h, k)); end 7

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Vettorizzazione (1) In molti casi è possibile sostituire un for con l’uso di un opportuno vettore. Esempio %calcolo del quadrato degli interi tra 1 e 100 for ii=1:100 square(ii)=ii^2; End %frammento di codice equivalente: vettorizzazione ii=1:100; square=ii.^2; La versione con il for può essere fino a 15 volte più lenta della versione con la vettorizzazione! NB: bisogna usare la versione ‘.^’che opera elemento per elemento 8

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Esempio matrice: vettorizzazione [r, c]=size(a); %usata in questo modo size dà righe e colonne di una matrice for h = 1:r for k = 1:c if a(h, k)>5 a(h, k)=sqrt(a(h, k)); end 9

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Esempio matrice: vettorizzazione [r, c]=size(a); %usata in questo modo size dà righe e colonne di una matrice for h = 1:r for k = 1:c if a(h, k)>5 a(h, k)=sqrt(a(h, k)); end b = a>5 sqrt(a(b)) a(b)=sqrt(a(b)) 10

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Strutture (e array di strutture) Una struttura è un tipo di dato composto da elementi eterogenei Ogni elemento individuale è chiamato campo e ha un nome Come con gli scalari, si può passare da un elemento singolo (matrice 1  1) a un vettore (matrice 1  n) Ci sono due modi per creare una struttura:  Campo per campo mediante assegnamento  Tutto in una volta mediante la funzione struct 11

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Creazione di una struttura campo per campo Esempio: la struttura studente  studente.nome = ‘Giovanni Rossi’;  studente.indirizzo = ‘Via Roma 23’;  studente.citta = ‘Cosenza’;  studente.media = 25;  whos studente Name Size Bytes Class Attributes studente 1x1 568 struct  %aggiungo un nuovo studente… -> array 1x2  studente(2).nome = ‘Giulia Gatti’;  studente(2).media = 30; Nota: quando un elemento viene definito, tutti i suoi campi sono creati e inizializzati a valore nullo (vettore vuoto []) 12

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Creazione di una struttura mediante la funzione struct Consente di preallocare una struttura o un array di strutture  str_array = struct(‘campo1’, val1, ‘campo2’, val2, …) Esempio >> rilievoAltimetrico=struct('latitudine',20,'longitudine',30, 'altitudine', 1300) rilievoAltimetrico = latitudine: 20 longitudine: 30 altitudine:

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array vuoto. Attenzione: se si Inserisce un valore (es. 20), questo viene assunto dal campo longitudine dell’elemento 1000, ma non dallo stesso campo degli altri elementi dell’array Creazione di array di strutture Se si allunga un array assegnando un valore a una componente di indice > dimensione corrente i nuovi elementi, in posizione precendente a quello inserito esplicitamente, vengono inizializzati al solito valore ‘nullo’ [] Esempio rilieviAltimetrici(1000)=struct('latitudine',80,'longitudine',[], 'altitudine', 1450) rilieviAltimetrici = 1x1000 struct array with fields: latitudine longitudine altitudine 14

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Aggiunta di campi Aggiunta di un campo: facciamo riferimento alla definizione di studente delle slide precedenti  studente(2).esami = [ ]; Il campo esami viene aggiunto a tutte le strutture che fanno parte di studente  Avrà un valore iniziale per studente(2). Sarà vuoto per tutti gli altri elementi dell’array 15

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array di strutture innestati Un campo di un array di strutture può essere di qualsiasi tipo (come in C) E` quindi possibile avere un campo che è, di nuovo, una struttura. Esempio  studente(1).corso(1).nome=‘InformaticaB’;  studente(1).corso(1).docente=‘Von Neumann’;  studente(1).corso(2).nome=‘Matematica’;  studente(1).corso(2).docente=‘Eulero’; 16

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEObiettivi Sottoprogrammi/funzioni Come invocare una funzione Passaggio dei dati Funzioni vs Scripts 17

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sottoprogrammi: perché Riusabilità  scrivere una sola volta codice usato più volte Astrazione  esprimere in modo sintetico operazioni complesse Estendibilità del linguaggio  non tutte operazioni incluse come predefinite 18

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sottoprogrammi: come Per un sottoprogramma deve essere definito quale operazione astratta realizza come può essere identificato dal programma principale quali parametri coinvolge dati in ingresso come punto di partenza dei calcoli valori restituiti ai programmi che lo usano Un sottoprogramma definito può essere utilizzato dal programma principale L’utilizzo è detto chiamata (o invocazione) del sottoprogramma In MATLAB i sottoprogrammi hanno la forma di funzioni  dominio corrisponde a operandi/dati  codominio corrisponde a valori calcolati 19

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Testata + corpo Funzione fact per il calcolo del fattoriale function [f]=fact(n) f=1; for k=1:n f=f*k; end testata corpo: è la parte eseguibile 20

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sintassi della definizione di funzione: testata + corpo La testata contiene informazioni rilevanti per l’uso corretto del sottoprogramma  lista dei risultati, tra parentesi quadre, separati da ‘,’ matematicamente, il codominio della funzione  identificatore del sottoprogramma  lista degli argomenti, tra parentesi tonde, separati da ‘,’ matematicamente, il dominio della funzione Argomenti e risultati detti  parametri formali se considerati dal punto di vista della funzione  parametri attuali se considerati dal punto di vista del programma chiamante 21

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzione usata invocandola >> x=fact(4) x =24 Sintassi dell’invocazione ispirata a notazione matematica  una funzione, applicata a suoi argomenti, fornisce un valore del suo codominio  nei programmi i valori denotati da espressioni chiamata di funzione sintatticamente è un’espressione >> x=fact(2)+fact(3) x = 8 >> fact(fact(3)) ans = 720 Equivalente a >> y=fact(3); fact(y) ans =

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sintassi dell’invocazione Identificatore della funzione Lista dei parametri attuali racchiusa fra parentesi tonde  parametri attuali valori degli argomenti ai quali applicata funzione ogni parametro è un’espressione qualsiasi (di tipo appropriato…) –può essere una chiamata di funzione NB: parametri possono essere di tipo qualsiasi (senza alcuna restrizione) Se ci sono più parametri, corrispondenza tra formali e attuali determinata dall’ordine  primo formale  primo attuale  secondo formale  secondo attualeetc. Numero parametri attuali = numero parametri formali  ovviamente, tipo dei parametri attuali compatibile con tipo dei formali Nel caso di più parametri in uscita, risultati “raccolti” usando la notazione dei vettori >> [x,y]=sumProd(4,5) x = 9 y = 20 function [s,p]=sumProd(a,b) s=a+b; p=a*b; 23

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Dove si definisce (scrive) una funzione? In un m-file di tipo particolare detto “file di funzione” Ha estensione “.m” come i file di script File di funzione deve  avere stesso nome della funzione che contiene  iniziare con la definizione della funzione NB: parola function va in minuscolo ciò distingue da file di script  trovarsi in una cartella nel PATH di MATLAB Per evitare conflitti di nomi usare exist(‘nomeFunzione’)  restituisce 0 se la funzione non esiste, ≠0 altrimenti es. ‘sin’ è una funzione predefinita (built-in) >> exist('sin') ans = 5 24

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Esecuzione delle funzioni e passaggio dei parametri Comportamento dell’interprete MATLAB durante esecuzione funzioni Consideriamo esempio >> r=12; s=42; [h,k]=MCDmcm(r, s) h = 6 k = 84 Descrizione esecuzione fa uso di metafora delle macchine astratte  una macchina principale per esecuzione programma chiamante  una “asservita” per esecuzione funzione entrambe dotate di proprio insieme di variabili  detto ambiente o stato di esecuzione function [M, m]=MCDmcm(a, b) x=a; y=b; while x ~= y if x>y x=x-y; else y=y-x; end; M=x; m=a*b/M; 25

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEAmbiente Ambiente macchina principale contiene  due variabili r e s, argomenti della chiamata (parametri attuali di ingresso)  due variabili h e k cui sono assegnati i risultati (parametri attuali di uscita) Ambiente della macchina asservita (ambiente locale della funzione) contiene  i quattro parametri formali, due di ingresso, a e b, e due di uscita, M ed m sono a tutti gli effetti delle variabili locali alla funzione –visibili solo al suo interno –esistono indipendentemente da altre variabili anche omonime esterne  altre due variabili locali x e y 26

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Effetto dell’esecuzione di [h,k] = MCDmcm(r, s) 27

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Effetto dell’esecuzione di [h,k] = MCDmcm(r, s) Macchina principale valuta espressione a destra dell’assegnamento ‘=‘  calcolato il valore dei parametri attuali di ingresso  creata macchina asservita  passaggio dei parametri copiatura valore parametri attuali in ingresso (r ed s) nei corrispondenti parametri formali a e b  ceduto il controllo alla macchina asservita (esecuzione macchina principale sospesa)  esecuzione del corpo della funzione  alla fine variabili M ed m hanno valore risultante dall’esecuzione nell’ambiente locale  passaggio dei parametri copiatura all’indietro dei parametri formali di uscita (M ed m) nei parametri attuali h e k  controllo restituito a macchina principale, macchina asservita (con tutto il suo ambiente) “distrutta” 28

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sequenza dell’esecuzione di [h,k] = MCDmcm(r, s) Sequenza dell’esecuzione di [h,k] = MCDmcm(r, s) r:12s:42 h:…k:… principale (1) 29

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sequenza dell’esecuzione di [h,k] = MCDmcm(r, s) Sequenza dell’esecuzione di [h,k] = MCDmcm(r, s) r:12s:42 h:…k:… principale r:12 h:…k:… principale a:…b:… M:..m:… MCDmcm (1) (2) x:… y:… s:42 30

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sequenza dell’esecuzione di [h,k] = MCDmcm(r, s) Sequenza dell’esecuzione di [h,k] = MCDmcm(r, s) r:12s:42 h:…k:… principale r:12 h:…k:… principale r:12s:42 h:…k:… principale a:…b:… M:..m:… MCDmcm a:12b:42 M:m: MCDmcm (1) (2) (3) x:… y:… x:… y:… s:42 31

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sequenza dell’esecuzione di [h,k] = MCDmcm(r, s) Sequenza dell’esecuzione di [h,k] = MCDmcm(r, s) r:12s:42 h:…k:… principale r:12 h:…k:… principale r:12s:42 h:…k:… principale a:…b:… M:..m:… MCDmcm a:12b:42 M:m: MCDmcm (1) (2) (3) r:12s:42 h:…k:… principale a:12b:42 M:6m:84 MCDmcm (4) x:… y:… x:… y:… x: 6 y: 6 s:42 32

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sequenza dell’esecuzione di [h,k] = MCDmcm(r, s) Sequenza dell’esecuzione di [h,k] = MCDmcm(r, s) r:12s:42 h:…k:… principale r:12 h:…k:… principale r:12s:42 h:…k:… principale a:…b:… M:..m:… MCDmcm a:12b:42 M:m: MCDmcm (1) (2) (3) r:12s:42 h:…k:… principale a:12b:42 M:6m:84 MCDmcm (4) r:12s:42 h:6k:84 principale M:12m:42 M:6m:84 MCDmcm (5) x:… y:… x:… y:… x: 6 y: 6 x: 6 y: 6 s:42 33

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sequenza dell’esecuzione di [h,k] = MCDmcm(r, s) Sequenza dell’esecuzione di [h,k] = MCDmcm(r, s) r:12s:42 h:…k:… principale r:12 h:…k:… principale r:12s:42 h:…k:… principale a:…b:… M:..m:… MCDmcm a:12b:42 M:m: MCDmcm (1) (2) (3) r:12s:42 h:…k:… principale a:12b:42 M:6m:84 MCDmcm (4) r:12s:42 h:6k:84 principale M:12m:42 M:6m:84 MCDmcm (5) r:12s:42 h:6k:84 principale M:12m:42 M:6m:84 MCDmcm (6) x:… y:… x:… y:… x: 6 y: 6 x: 6 y: 6 x: 6 y: 6 s:42 34

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Scope delle variabili Ambienti della macchina principale e di quella asservita sono disgiunti  comunicano attraverso i parametri  possono contenere variabili omonime, che rimangono distinte  NB: dopo esecuzione di una funzione non rimane traccia del suo ambiente Es.: variabili x e y locali a MCDmcm distinte da quelle dell’ambiente principale, variabilea indefinita fuori da MDDmcm >> x=12;y=42;[h,k]=MCDmcm(x,y) h = 6 k = 84 >> [x,y] ans = >> a ??? Undefined function or variable 'a'. Es.: nessun pericolo di confusione tra variabili omonime nei due ambienti, comunicazione avviene mediante copiatura >> M=12;m=42;[a,b]=MCDmcm(M,m) a = 6 b = 84 >> Meglio comunque in generale evitare omonimie come queste, che creano confusione function [M, m]=MCDmcm(a, b) x=a; y=b; while x ~= y if x>y x=x-y; else y=y-x; end; M=x; m=a*b/M; 35

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Parametri di tipo array Parametri di tipo array possibili in ingresso e anche in uscita  occorre conoscere le dimensioni dell’array in ingresso funzione predefinita length(v) fornisce il numero degli elementi di v  l’array in uscita può essere costruito incrementalmente Esempio: function [pres, pos]=cerca(x, v) cerca lo scalare x nell’array v se x è presente pres=1 altrimenti pres=0 pos è un vettore con indici di tutti elementi di v uguali a x 36

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Parametri di tipo array Parametri di tipo array possibili in ingresso e anche in uscita  occorre conoscere le dimensioni dell’array in ingresso funzione predefinita length(v) fornisce il numero degli elementi di v  l’array in uscita può essere costruito incrementalmente Esempio: function [pres, pos]=cerca(x, v) cerca lo scalare x nell’array v se x è presente pres=1 altrimenti pres=0 pos è un vettore con indici di tutti elementi di v uguali a x >> A=[1, 2, 3, 4, 3, 4, 5, 4, 5, 6] A = >> [p, i]=cerca(4,A) p = 1 i = >> 37

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Parametri di tipo array Parametri di tipo array possibili in ingresso e anche in uscita  occorre conoscere le dimensioni dell’array in ingresso funzione predefinita length(v) fornisce il numero degli elementi di v  l’array in uscita può essere costruito incrementalmente Esempio: function [pres, pos]=cerca(x, v) cerca lo scalare x nell’array v se x è presente pres=1 altrimenti pres=0 pos è un vettore con indici di tutti elementi di v uguali a x function [pres, pos]=cerca(x, v) p=0; pos=[]; for i=1:length(v) if v(i)==x p=p+1; pos(p)=i; end pres=p>0; >> A=[1, 2, 3, 4, 3, 4, 5, 4, 5, 6] A = >> [p, i]=cerca(4,A) p = 1 i = >> 38

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Parametri di tipo Matrice Parametri di tipo matrice (o array a n dimensioni) possibili in ingresso e anche in uscita  occorre conoscere le dimensioni del parametro in ingresso funzione predefinita ndims(v) dà numero n delle dimensioni di v funzione predefinita size(v) dà array con n valori: le dimensioni di v e.g., [R,C]=size(m) dà, in R e in C, num. righe e colonne della matrice m Esempio: function [t]=trasposta(m)  crea matrice t con righe e colonne scambiate rispetto a ingresso m 39

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Parametri di tipo Matrice Parametri di tipo matrice (o array a n dimensioni) possibili in ingresso e anche in uscita  occorre conoscere le dimensioni del parametro in ingresso funzione predefinita ndims(v) dà numero n delle dimensioni di v funzione predefinita size(v) dà array con n valori: le dimensioni di v e.g., [R,C]=size(m) dà, in R e in C, num. righe e colonne della matrice m Esempio: function [t]=trasposta(m)  crea matrice t con righe e colonne scambiate rispetto a ingresso m >> m=[1,2,3,4;5,6,7,8;9,10,11,12] m = >> trasposta(m) ans =

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Parametri di tipo Matrice Parametri di tipo matrice (o array a n dimensioni) possibili in ingresso e anche in uscita  occorre conoscere le dimensioni del parametro in ingresso funzione predefinita ndims(v) dà numero n delle dimensioni di v funzione predefinita size(v) dà array con n valori: le dimensioni di v e.g., [R,C]=size(m) dà, in R e in C, num. righe e colonne della matrice m Esempio: function [t]=trasposta(m)  crea matrice t con righe e colonne scambiate rispetto a ingresso m function [t]=trasposta(m) [R,C]=size(m); for r=1:R for c=1:C t(c,r)=m(r,c); end; end >> m=[1,2,3,4;5,6,7,8;9,10,11,12] m = >> trasposta(m) ans =

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Parametri di tipo struct Parametri di tipo struct (ovviamente) ammessi: ma non c’è (ahimè) controllo di tipi  attezione a corrispondenza parametri attuali-formali, specie in ingresso 42

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Parametri di tipo struct Parametri di tipo struct (ovviamente) ammessi: ma non c’è (ahimè) controllo di tipi  attezione a corrispondenza parametri attuali-formali, specie in ingresso Esempio: function [c]=polar2cart(p) da rappresentazione polare di punto nel piano a quella cartesiana   P x y P 43

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Parametri di tipo struct Parametri di tipo struct (ovviamente) ammessi: ma non c’è (ahimè) controllo di tipi  attezione a corrispondenza parametri attuali-formali, specie in ingresso Esempio: function [c]=polar2cart(p) da rappresentazione polare di punto nel piano a quella cartesiana   P x y P >> P.ro=1; P.teta=pi/3 P = ro: 1 teta: >> Q=polar2cart(P) Q = x: y:

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Parametri di tipo struct Parametri di tipo struct (ovviamente) ammessi: ma non c’è (ahimè) controllo di tipi  attezione a corrispondenza parametri attuali-formali, specie in ingresso Esempio: function [c]=polar2cart(p) da rappresentazione polare di punto nel piano a quella cartesiana function [c]=polar2cart(p) c.x=p.ro*cos(p.teta); c.y=p.ro*sin(p.teta);   P x y P >> P.ro=1; P.teta=pi/3 P = ro: 1 teta: >> Q=polar2cart(P) Q = x: y:

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Parametri di tipo struct Parametri di tipo struct (ovviamente) ammessi: ma non c’è (ahimè) controllo di tipi  attezione a corrispondenza parametri attuali-formali, specie in ingresso Esempio: function [c]=polar2cart(p) da rappresentazione polare di punto nel piano a quella cartesiana function [c]=polar2cart(p) c.x=p.ro*cos(p.teta); c.y=p.ro*sin(p.teta);   P x y P >> P.ro=1; P.teta=pi/3 P = ro: 1 teta: >> Q=polar2cart(P) Q = x: y: >> R.to=1; R.teta=pi/3 R = to: 1 teta: >> Q=polar2cart(R) ??? Reference to non-existent field 'ro'. Error in ==> polar2cart at 2 c.x=p.ro*cos(p.teta); NB!! 46

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE istruzione return Termina l’esecuzione della funzione e restituisce il controllo al programma chiamante (usualmente questo avviene dopo l’esecuzione dell’ultima istruzione della funzione) Esempio d’uso: funzione cercaMultiplo cerca un multiplo di un numero v (assunto  0) in un array a, restituisce posizione p e valore m del multiplo se trovato (o coppia di zeri altrimenti)  NB: se nell’array ci sono più multipli se ne può restituire uno qualsiasi 47

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE istruzione return Termina l’esecuzione della funzione e restituisce il controllo al programma chiamante (usualmente questo avviene dopo l’esecuzione dell’ultima istruzione della funzione) Esempio d’uso: funzione cercaMultiplo cerca un multiplo di un numero v (assunto  0) in un array a, restituisce posizione p e valore m del multiplo se trovato (o coppia di zeri altrimenti)  NB: se nell’array ci sono più multipli se ne può restituire uno qualsiasi %versione senza istruzione return function [p,m]=cercaMultiploNR(v, a) trovato=0; k=1; while k <= length(a) && ~trovato if mod(a(k),v)==0 p=k; m=a(k); trovato=1; end; k=k+1; end; if ~trovato p=0; m=0; end; 48

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE istruzione return Termina l’esecuzione della funzione e restituisce il controllo al programma chiamante (usualmente questo avviene dopo l’esecuzione dell’ultima istruzione della funzione) Esempio d’uso: funzione cercaMultiplo cerca un multiplo di un numero v (assunto  0) in un array a, restituisce posizione p e valore m del multiplo se trovato (o coppia di zeri altrimenti)  NB: se nell’array ci sono più multipli se ne può restituire uno qualsiasi  NB: l’istruzione return non è indispensabile si può sostituire con combinazioni di altre istruzioni, usando eventualmente variabili aggiuntive permette però di scrivere funzioni più compatte e leggibili function [p,m]=cercaMultiplo(v, a) for k=1:length(a) if mod(a(k),v)==0 p=k; m=a(k); return; %si restituisce il primo multiplo incontrato % evita ulteriori inutili calcoli end; p=0; m=0; %eseguite solo se non trovato alcun multiplo %versione senza istruzione return function [p,m]=cercaMultiploNR(v, a) trovato=0; k=1; while k <= length(a) && ~trovato if mod(a(k),v)==0 p=k; m=a(k); trovato=1; end; k=k+1; end; if ~trovato p=0; m=0; end; 49

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni che chiamano funzioni Finora assunto funzioni invocate dal programma cosiddetto “chiamante” o “principale” linea di comando script alternativa: istruzione di chiamata inclusa in una (altra) funzione caso molto interessante. con sviluppi importantissimi (ricorsione) 50

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni che chiamano funzioni Finora assunto funzioni invocate dal programma cosiddetto “chiamante” o “principale” linea di comando script alternativa: istruzione di chiamata inclusa in una (altra) funzione caso molto interessante. con sviluppi importantissimi (ricorsione) Esempio semplice: calcolo del coefficiente binomiale usiamo funzione fact(n) per il fattoriale definita in precedenza (NB: nessun conflitto tra parametro n di fact e parametro n di coefBin) 51

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni che chiamano funzioni Finora assunto funzioni invocate dal programma cosiddetto “chiamante” o “principale” linea di comando script alternativa: istruzione di chiamata inclusa in una (altra) funzione caso molto interessante. con sviluppi importantissimi (ricorsione) Esempio semplice: calcolo del coefficiente binomiale usiamo funzione fact(n) per il fattoriale definita in precedenza (NB: nessun conflitto tra parametro n di fact e parametro n di coefBin) 52 function [c]=coefBin(n, k) f1=fact(n); f2=fact(k); f3=fact(n-k); c=f1/(f2*f3);

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Esecuzione di coefBin(6,2) Si generano più macchine astratte asservite. che  esistono simultaneamente  solo quella creata per ultima è attiva  ordine di terminazione delle macchine inverso a quello di inizio (gestione LIFO, Last In First Out) interprete comandi (1) coefBin(6,2) interprete comandi (2) interprete comandi coefBin(6,2) fact(6) (3) interprete comandi coefBin(6,2) (4) interprete comandi coefBin(6,2) fact(2) (5) interprete comandi coefBin(6,2) (6) interprete comandi coefBin(6,2) fact(4) (7) interprete comandi coefBin(6,2) (8) interprete comandi (9) 53

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Confronto Funzioni vs. Script 1/3 Hanno un proprio ambiente di esecuzione  variabili locali distinte da quelle del chiamante  variabili locali cessano di esistere al ritorno Comunicazione mediante copiatura parametri Adatte a sviluppo sistematico di applicazioni complesse  Unità di programma con alta coesione interna e interfacce minimali e chiaramente identificate FUNZIONI SCRIP T NON hanno un proprio ambiente di esecuzione –variabili dello script sono le stesse del chiamante –variabili create nello script continuano a esistere Comunicazione mediante scrittura/lettura variabili comuni Adatti a sviluppo esplorativo e prototipale 54

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Confronto Funzioni vs. Script 2/3 Esempio: calcolo distanza tra due punti in piano cartesiano mediante script o funzione % script: file distScript.m dx = x2 – x1; dy = y2 –y1; d = sqrt(dx^2 + dy^2); function [d] = distFunz(x1,y1,x2,y2) dx = x2 – x1; dy = y2 –y1; d= sqrt(dx^2 + dy^2); quattro punti: a(1,1), b(1,2), c(3,2) e d(3,4); calcolata distanza tra a e b (=1) e tra c e d (=2 ) >> ax = 1; ay = 1; bx = 1; by = 2; >> cx = 3; cy = 2; dx = 3; dy = 4; variabili usate per comunicare con lo script: - x1, y1, x2, y2 per trasmettere allo script i punti di cui calcolare la distanza - d per restituire al chiamante il risultato 55

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Confronto Funzioni vs. Script 2/3 Esempio: calcolo distanza tra due punti in piano cartesiano mediante script o funzione % script: file distScript.m dx = x2 – x1; dy = y2 –y1; d = sqrt(dx^2 + dy^2); function [d] = distFunz(x1,y1,x2,y2) dx = x2 – x1; dy = y2 –y1; d= sqrt(dx^2 + dy^2); quattro punti: a(1,1), b(1,2), c(3,2) e d(3,4); calcolata distanza tra a e b (=1) e tra c e d (=2 ) >> ax = 1; ay = 1; bx = 1; by = 2; >> cx = 3; cy = 2; dx = 3; dy = 4; >> Dab=distFunz(ax,ay,bx,by) Dab = 1 >> Dcd=distFunz(cx,cy,dx,dy) Dcd = 2 CORRETT O variabili usate per comunicare con lo script: - x1, y1, x2, y2 per trasmettere allo script i punti di cui calcolare la distanza - d per restituire al chiamante il risultato 56

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Confronto Funzioni vs. Script 2/3 Esempio: calcolo distanza tra due punti in piano cartesiano mediante script o funzione % script: file distScript.m dx = x2 – x1; dy = y2 –y1; d = sqrt(dx^2 + dy^2); function [d] = distFunz(x1,y1,x2,y2) dx = x2 – x1; dy = y2 –y1; d= sqrt(dx^2 + dy^2); quattro punti: a(1,1), b(1,2), c(3,2) e d(3,4); calcolata distanza tra a e b (=1) e tra c e d (=2 ) >> ax = 1; ay = 1; bx = 1; by = 2; >> cx = 3; cy = 2; dx = 3; dy = 4; >> x1=ax; y1=ay; x2=bx; y2=by; >> distScript >> Dab = d Dab = 1 >> x1=cx; y1=cy; x2=dx; y2=dy; >> distScript >> Dcd = d Dcd = ERRATO variabili usate per comunicare con lo script: - x1, y1, x2, y2 per trasmettere allo script i punti di cui calcolare la distanza - d per restituire al chiamante il risultato 57 >> Dab=distFunz(ax,ay,bx,by) Dab = 1 >> Dcd=distFunz(cx,cy,dx,dy) Dcd = 2 CORRETT O

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Confronto Funzioni vs. Script 3/3 Codice che usa la funzione è molto più conciso: incorpora parte di passaggio parametri Perchè lo script dà un risultato errato? Problema con variabili dx e dy: hanno due ruoli  nel chiamante rappresentano coordinate del punto d  nello script differenze delle ascisse e delle ordinate dei due punti Prima esucuzione dello script modifica coordinate dx e dy del punto d: diventa d(0,1) Seconda calcola distanza tra il punto c(3,2) e quello erroneo d(0,1): viene NB: l’errore passa inosservato se non si controlla il risultato Morale: script e suo programma chiamante non possono essere definiti indipendentemente  occorre individuare variabili usate da entrambi script e chiamante per la comunicazione  le altre variabili devono essere usate da uno solo dei due 58

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Fonti per lo studio + Credits Fonti per lo studio  Introduzione alla programmazione in MATLAB, A.Campi, E.Di Nitto, D.Loiacono, A.Morzenti, P.Spoletini, Ed.Esculapio Capitolo 4 Credits  Prof. A. Morzenti 59

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Esempio con ingresso array di strutture Esempio: function [dm]=distMedia(a)  distanza media dall’origine dei punti (strutture con campi x e y) contenuti nell’array a Una comoda possibilità per le funzioni con più risultati (parametri in uscita): Esempio: function [s,p]=sumProd(a,b), invocata con >>[x,y]=sumProd(4,5) Possibile restituire solo il primo dei valori (l’altro viene perso) assegnando il risultato a uno scalare >> x=sumProd(4,5) x = 9 function [dm]=distMedia(a) s=0; for k=1:length(a) s=s+sqrt(a(k).x^2+a(k).y^2); end; dm=s/length(a); >> a.x=1;a.y=0;b.x=0;b.y=2; >> v=[a,b]; >> distMedia(v) ans =