limbaje 11.ppt

16
Limbaje de programare inginereşti Tema 10 MATLAB. Elemente de programare

Upload: codrinamagda

Post on 17-Jan-2016

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Limbaje 11.ppt

Limbaje de programare inginereşti

Tema 10

MATLAB. Elemente de programare

Page 2: Limbaje 11.ppt

PROGRAME M-FILE

In limbajul MATLAB se poate lucra nu numai prin linii de comanda individuale, dar si cu programe scrise in fisiere.Fisierele care contin instructiuni MATLAB se numesc fisiere M sau M-files, intrucat au extensia .m. Un fisier M poate fi de doua tipuri, script sau functie. Ambele tipuri de fisiere sunt scrise in format ASCII. Sintactic, singura diferenta dintre cele doua tipuri de fisiere este aceea ca fisierele de tip functie au o prima linie care declara numele functiei.Aceste tipuri de fisiere M permit crearea unor noi functii care le pot completa pe cele existente. Astfel MATLAB poate fi extins, permitand abordarea anumitor aplicatii specifice din stiinta si inginerie. Pentru creare lor se poate utiliza orice editor de texte. Se recomanda editorul MATLAB care are niste facilitati proprii pentru programele MATLAB.

Page 3: Limbaje 11.ppt

INCLUDEREA COMENTARIILOR SI A HELP-ULUI INTR-UN PROGRAM

Introducerea unui comentariu intr-un program se realizeaza prin adaugarea caracterului procent (%). Comentariul care apare imediat dupa linia de declarare a functiei sau incepand cu prima linie a unui script, constituie help-ul fisierului respectiv. Daca se apeleaza : help nume_functie se afiseaza liniile care incep cu semnul procent si sunt situate intre prima linie dupa declararea functiei si prima linie libera sau prima instructiune ce urmeaza acestui grup compact de linii. Dupa ultima linie a help-ului se lasa o linie libera sau se trece direct la o instructiune MATLAB.

Page 4: Limbaje 11.ppt

FISIERE SCRIPT

Fisierele script sunt fisiere externe de tip text care contin secvente de comenzi MATLAB. Prin apelarea numelui fisierului, se executa secventele de comenzi MATLAB continute in fisier. Dupa executia completa a unui fisier script variabilele cu care acesta a operat raman in workspace. Aceste fisiere nu permit integrarea in programe mari, realizate pe principiul modularizarii. Fisierele script pot fi folosite la rezolvarea unor probleme care necesita un numar relativ mare de instructiuni a caror lansare la linia de comanda ar deveni greoaie.

Page 5: Limbaje 11.ppt

FISIERE SCRIPT

Aplicatie:Sa se realizeze un fisier cu urmatorul continut si apoi sa se execute:

% Program de rezolvare a unui sistem de ecuatii de tipul A*x=b

n=1500; A = rand(n,n); b = rand(n,1); tic, x1 = inv(A)*b; toc tic, x2 = A\b; toc

Page 6: Limbaje 11.ppt

FISIERE FUNCTIEIn cazul in care prima linie a unui fisier M contine cuvantul cheie function fisierul respectiv intra in categoria fisierelor de tip functie. Un fisier de tip functie difera de un fisier de tip script prin faptul ca accepta argumente de intrare. Forma generala a primei linii a unui fisier functie este: function [par_iesire1, par_iesire2 ... ] = nume_functie(par_intrare1, par_intrare2 ... ) unde : • function reprezinta un cuvant cheie obligatoriu care declara ca fisierul este de tip functie • nume_functie reprezinta numele functiei, adica numele sub care este salvat fisierul, insa fara extensie. Numele functiei nu poate fi identic cu cel al unui fisier M pre-existent. • par_iesire1, par_iesire2 reprezinta parametri de iesire care trebuiesc separati prin virgula si cuprinsi intre paranteze drepte. Daca functia are un singur parametru de iesire parantezele drepte nu mai au sens. • par_intrare1, par_intrare2 reprezinta parametri de intrare care trebuiesc separati prin virgula si cuprinsi intre paranteze rotunde. Daca functia nu are

parametri de intrare parantezele rotunde nu mai au sens.

Page 7: Limbaje 11.ppt

FUNCTIE VERSUS SCRIPT

Avantaje script:- utile în cazul programelor mari cu secvente de comenzi care se repeta aleator (nu sunt bucle pur si simplu) deci utile doar programatorilor avansati;Dezavantaje script:- creeaza si modifica variabile din zona de lucru fara nici un avertisment;- sunt sursa unor erori greu detectabile;- nu pot fi utilizate în expresii.

Avantaje functie:- functia comunica cu programul apelant prin cele doua liste: lista-param-iesire si lista-param-intrare.- nu modifica datele din zona de lucru a programului apelant.- permite organizarea structurala a programarii.Dezavantaje functie :- folosirea în exces a functiilor poate duce la farâmitarea excesiva a

programului pierzându-se din claritate.

Page 8: Limbaje 11.ppt

INTERACTIUNEA PROGRAMELOR MATLAB CU UTILIZATORUL

Exista trei modalitati de interactiune a unui program cu utilizatorul pe durata executiei unui program MATLAB: • Obtinerea unui raspuns de la tastatura. • Definirea unei pauze pana cand utilizatorul apasa o tasta. • Constructia unei interfete grafice cu utilizatorul. Obtinerea unui raspuns de la tastatura. Functia input afiseaza un prompt si asteapta un raspuns al utilizatorului. Sintaxa functiei este: n = input('prompt_string') Functia afiseaza sirul de caractere prompt_string, asteapta raspunsul de la tastatura, si apoi intoarce valoarea introdusa de la tastatura. Valoarea introdusa trebuie sa fie un numar sau o expresie calculabila. Functia input poate intoarce deasemenea un raspuns al utilizatorului de tip string. Pentru un raspuns de tip string, se adauga 's' ca argument al functiei: Adresa = input('Introduceti adresa: ','s'); Definirea unei pauze. Anumite fisiere M necesita definirea unor pauze intre executiile anumitor pasi. Comanda pause, fara nici un argument, opreste executia pana cand utilizatorul apasa o tasta. Pentru a face o pauza de n secunde, se foloseste functia sub forma pause(n).

Page 9: Limbaje 11.ppt

INTERACTIUNEA PROGRAMELOR MATLAB CU UTILIZATORUL

Exista trei modalitati de interactiune a unui program cu utilizatorul pe durata executiei unui program MATLAB: • Obtinerea unui raspuns de la tastatura. • Definirea unei pauze pana cand utilizatorul apasa o tasta. • Constructia unei interfete grafice cu utilizatorul. Obtinerea unui raspuns de la tastatura. Functia input afiseaza un prompt si asteapta un raspuns al utilizatorului. Sintaxa functiei este: n = input('prompt_string') Functia afiseaza sirul de caractere prompt_string, asteapta raspunsul de la tastatura, si apoi intoarce valoarea introdusa de la tastatura. Valoarea introdusa trebuie sa fie un numar sau o expresie calculabila. Functia input poate intoarce deasemenea un raspuns al utilizatorului de tip string. Pentru un raspuns de tip string, se adauga 's' ca argument al functiei: Adresa = input('Introduceti adresa: ','s'); Definirea unei pauze. Anumite fisiere M necesita definirea unor pauze intre executiile anumitor pasi. Comanda pause, fara nici un argument, opreste executia pana cand utilizatorul apasa o tasta. Pentru a face o pauza de n secunde, se foloseste functia sub forma pause(n).

Page 10: Limbaje 11.ppt

CREAREA SI EDITAREA FISIERELOR M

Crearea si editarea fisierelor M se poate face in doua moduri:-Folosind editorul MATLAB;-Folosind orice editor de text.Crearea si editarea fisierelor M poate fi efectuata eficient folosind MATLAB Editor. MATLAB Editor pune la dispozitia utilizatorului o interfata grafica performanta de editare clasica de text. In afara functiilor de editare obisnuite, MATLAB Editor prezinta si functii specifice.Cand se foloseste un alt editor, este necesar ca fisierul sa iba extensia .m si sa fie salvat in mod text (ASCII).

Page 11: Limbaje 11.ppt

INSTRUCTIUNI DE CONTROL LOGIC

Instructiunea if. Instructiunea if impreuna cu else si elseif, executa un grup de instructiuni in cazul in care este indeplinita o anumita conditie logica: if expresie_logica instructiuni end Daca expresie_logica este adevarata, MATLAB executa toate instructiunile cuprinse intre if si end. Ulterior programul continua executia cu instructiunea situata pe linia imediat dupa instructiunea end. Daca expresia logica este falsa, MATLAB sare peste instructiunile cuprinse intre if si end si continua executia incepand cu linia plasata imediat dupa instructiunea end. Exemplu: a=3; b=2; if a>b disp('a este mai mare decat b') elseif b>=a disp('b este mai mare sau egal cu a') end

Page 12: Limbaje 11.ppt

INSTRUCTIUNI DE CONTROL LOGIC

Instructiunea switch. Instructiunea switch, impreuna cu case si otherwise, executa diferite grupuri de instructiuni in functie de valoarea anumitor conditii logice:switch expresiecase valoare1instructiuni % Executate daca expresie este valoare1case valoare2instructiuni % Executate daca expresie este valoare2...otherwiseinstructiuni % Executate daca expresie nu ia nici o valoare amintita mai susend

Page 13: Limbaje 11.ppt

INSTRUCTIUNI DE CONTROL LOGIC

Exemplu

var = 9 switch var

case 1 disp('1')

case {2,3,4} disp('2 sau 3 sau 4')

case 5 disp('5')

otherwise disp('altceva')

end

Page 14: Limbaje 11.ppt

INSTRUCTIUNI DE CONTROL LOGIC

Instructiunea while. Instructiunea while executa un grup de instructiuni de un numar indefinit de ori, avand la baza anumite conditii logice. Sintaxa instructiunii while este: while expresie_logica instructiuni end Daca expresie_logica este adevarata sunt executate instructiunile cuprinse intre while si end. Exemplu: n = 1; while prod(1:n) < 1e100 n = n + 1 end

Page 15: Limbaje 11.ppt

INSTRUCTIUNI DE CONTROL LOGIC

Instructiunea for. Instructiunea for executa un grup de instructiuni de un anumit numar impus de ori. Sintaxa instructiunii este: for index = start:increment:end instructiuni end Incrementul implicit este 1. Se poate specifica orice increment, inclusiv unul negativ. Pentru indici pozitivi, executia se termina cand valoarea indexului depaseste valoarea end; pentru increment negativ, bucla se incheie cand indexul devine mai mic decat valoarea end. Exemplu: m=3; n=5; for i = 1:m

for j = 1:n A(i,j) = 1/(i + j - 1)

end end

Page 16: Limbaje 11.ppt

INSTRUCTIUNI DE CONTROL LOGIC

Instructiunea continue. Instructiunea continue cedeaza controlul iteratiei urmatoare in cazul unei bucle for sau while, neglijand orice alta instructiune existenta in corpul buclei, ca in exemplul de mai jos. m=3; n=5; for i = 1:m

for j = 1:n if ( i>2) continue end A(i, j) = 1/(i + j - 1)

end end