CORSO DI LABORATORIO DI INFORMATICA Corso di Laurea Triennale in Ingegneria Elettrica a.a. 2015/2016 Docente: Ing. Domenico Amalfitano Dipartimento di Ingegneria Elettrica e delle Tecnologie dell Informazione (DIETI) Università degli Studi di Napoli Federico II. Via Claudio 21, 4 Piano Laboratorio 4.04
Programmazione Strutturata
MATLAB come linguaggio di programmazione MATLAB permette di creare veri e propri programmi o funzioni che possono aggiungersi alle funzioni base offerte. Usare il linguaggio MATLAB
Strutture fondamentali Un qualsiasi algoritmo può essere codificato in un linguaggio di programmazione se dispone delle tre strutture fondamentali: Sequenza Selezione Iterazione
Sequenza Una sequenza in MATLAB è ottenuta dalla sequenza lessicografica delle istruzioni. Le istruzioni devono terminare con un ;
Selezione if-then-else if condizione istruzioni; elseif condizione istruzioni; else istruzioni; switch - case switch variabile case valore1 istruzioni case valore2 otherwise istruzioni; istruzioni;
Esempio if then else if n==k x(1)=10; else x(1)=100;
Iterazione 1/2 Costrutto while while condizione istruzioni;
Esempio while n=0; k=5; while n<=k n=n+1; disp(n);
Iterazione 2/2 Costrutto for NON USARE i e j perché in MATLAB sono unità IMMAGINARIE! for ind=inizio:[passo]:n istruzioni;
Esempio for innestati for k=1:n for m=1:n A(k,m)=1;
Script file Uno Script file è una procedure MATLAB e contenente un insieme di istruzioni da eseguire quando il file è chiamato da MATLAB MATLAB dispone di un suo editor che fornisce molte funzionalità comprese quelle di debugging Di default uno script file ha estensione.m Per questo motivo è anche detto M-file Uno script file opera direttamente su variabili attualmente in memoria Workspace Non consentono l uso di variabili locali.
Script file Scrivere uno script file equivale a scrivere un insieme di istruzioni MATLAB al di fuori dell ambiente interattivo per poi farle eseguire in blocco in tale ambiente. La History Window ci permette di selezionare i comandi eseguiti per inserirli in uno script.
Per eseguire l ambiente di editing Click
Esempio
Per eseguire lo script Usare il pulsante run dell editor Risultati visibili nell ambiente MATLAB Oppure, salvare lo script in una cartella. In MATLAB far puntare la Current Folder a tale cartella Ora è possibile eseguire da linea di comando tutti gli script contenuti nella Current Folder. MATLAB restituisce errore se si prova ad eseguire uno script utente che non si trova nella Current Folder. Il tasto TAB può essere utile per selezionare velocemente gli script da eseguire a linea di comando
Esempio di esecuzione
Inserire input utente In uno script file si possono inserire dati da tastiera. Tramite il comando input(prompt) x = input(prompt); str = input(prompt,'s');
Esempio di script con input utente Digitare il seguente codice per il calcolo del fattoriale di un numero. Salvare lo script con il nome fattoriale e richiamarlo da linea di comando in MATLAB n=input('calcola il fattoriale di '); k=n; fatt=k; while k>2 k=k-1; fatt=fatt*k; disp('fattoriale'); disp(fatt);
Esercizio #1 Creare uno script file che calcoli e mostri a video la somma degli elementi di un vettore x. Salvare lo script con il nome calcolasomma somma=0; for k=1:length(x) somma=somma+x(k); disp(somma);
Esercizio #2 Creare uno script file per la ricerca di un elemento in un vettore x. Salvare lo script come ricercaelemento e richiamarlo da riga di comando Precondizione: il vettore x esiste già nel Workspace L utente deve inserire il valore da cercare elemento=input('quale elemento cercare? '); k=0; found=0; while k<length(x) && found==0 k=k+1; if elemento==x(k) found=1; if (found==1) disp ('elemento trovato in posizione'); disp(k); else disp ('elemento non trovato');
Esempio #3 Creare uno script che calcoli e mostri a video la somma degli elementi di un vettore x presente nel workspace. Riusare lo script calcolasomma dell Esempio #1. calcolasomma; media=somma/length(x); disp('la media degli elementi è:'); disp(media);
Funzioni Una function si crea in MATLAB in maniera analoga ad uno script. Ha di diverso solo l intestazione che deve essere function [ou1, ou2, ] = nome(in1, in2, ) nome= nome della function uguale al nome del file.m che la contiene ou1, ou2 = parametri di output in1, in2, = parametri di input Le variabili interne sono tutte locali e quindi dopo l esecuzione della function non restano nello spazio di lavoro.
Esempio Vogliamo scrivere una funzione che dato un vettore in ingresso restituisca nelle sue variabili di output le occorrenze degli zeri, dei numeri negativi e di quelli positivi. function [zeros, neg, pos] = valutasegno(x) zeros=0; neg=0; pos=0; for k=1: length(x) if (x(k)==0) zeros=zeros+1; elseif (x(k)>0) pos=pos+1; else neg=neg+1;
Richiamare una function Salvare la function come valutasegno Digitare in Command Window: x = [0, 3, -1, -1, 0, 0, 8, 8, 8]; valutasegno(x); a = valutasegno(x); [a, b] = valutasegno(x); [a, b, c] = valutasegno(x); Osservazioni???? Quali riguardo il Workspace????
Funzioni locali È possibile usare function locali Sono utilizzate solo da altre function e non sono disponibili dalla Command Window. Le function locali vanno scritte in coda alla function principale.
Esempio di funzioni locali function [avg, med] = mystats(x) n = length(x); avg = mymean(x,n); med = mymedian(x,n); function a = mymean(v,n) % MYMEAN Example of a local function. a = sum(v)/n; function m = mymedian(v,n) % MYMEDIAN Another example of a local function. w = sort(v); if rem(n,2) == 1 m = w((n + 1)/2); else m = (w(n/2) + w(n/2 + 1))/2;