04.06.2013 Views

Page Programare si limbaje II Anul I, AR+ITT 1 Recapitulare Curs 2 ...

Page Programare si limbaje II Anul I, AR+ITT 1 Recapitulare Curs 2 ...

Page Programare si limbaje II Anul I, AR+ITT 1 Recapitulare Curs 2 ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Programare</strong> <strong>si</strong> <strong>limbaje</strong> <strong>II</strong><br />

<strong>Anul</strong> I, <strong>AR+ITT</strong><br />

1 <strong>Recapitulare</strong><br />

<strong>Curs</strong> 2 + Laborator 3 + Laborator 4<br />

1.1 Operatori<br />

1.2 Comenzi<br />

diary<br />

save<br />

load<br />

1.3 Variabile<br />

1.4 Constante<br />

true<br />

false<br />

1.5 Funcţii<br />

logical()<br />

ischar()<br />

isnan()<br />

i<strong>si</strong>nf()<br />

isfinite()<br />

<strong>si</strong>ngle()<br />

double()<br />

<strong>si</strong>ze()<br />

zeros()<br />

ones()<br />

eye()<br />

rand()<br />

randn()<br />

diag()<br />

magic()<br />

sparse()<br />

full()<br />

spy()<br />

speye()<br />

spones()<br />

issparse()<br />

nnz()<br />

round()<br />

triu()<br />

tril()<br />

repmat()<br />

find()<br />

isprime()<br />

mean()<br />

geomean()<br />

nonzeros()<br />

det()<br />

inv()<br />

1 | P a g e


Conf.dr.ing. Ovidiu-Aurelian Deteşan – <strong>Programare</strong> <strong>si</strong> <strong>limbaje</strong> <strong>II</strong> <strong>Curs</strong> 3. Clase Matlab<br />

2.1 Clase Matlab (reluare)<br />

<strong>Curs</strong> 3. Clase MATLAB (2)<br />

Tipuri de date = clase (în Matlab).<br />

Există 15 clase fundamentale, fiecare putând alcătui matrice sau tablouri.<br />

Dimen<strong>si</strong>unea minimă: 0x0.<br />

Dimen<strong>si</strong>unea maximă: tablouri n-dimen<strong>si</strong>onale de orice mărime.<br />

Clasele Matlab fundamentale:<br />

...<br />

2.1.2 Clasele numerice<br />

2.1.2.1 Clasele numerice în virgulă flotantă<br />

...<br />

2.1.2.2 Clasele numerice întregi<br />

Clasele numerice întregi cu semn (<strong>si</strong>gned)<br />

int8<br />

int16<br />

int32<br />

int64<br />

Funcţii de conver<strong>si</strong>e: int8(), int16(), int32(), int64()<br />

Forma generală:<br />

I = int8(X)<br />

I = int16(X)<br />

I = int32(X)<br />

I = int64(X)<br />

Fig. 2.1 Clasele Matlab de bază<br />

Efect: convertesc elementele tabloului X în întregi fără semn. X poate fi orice obiect de tip numeric.<br />

2 | P a g e


Conf.dr.ing. Ovidiu-Aurelian Deteşan – <strong>Programare</strong> <strong>si</strong> <strong>limbaje</strong> <strong>II</strong> <strong>Curs</strong> 3. Clase Matlab<br />

Tab 2.3 Funcţii de conver<strong>si</strong>e spre tipuri întregi cu semn<br />

Funcţie Domeniu Tip Octeţi pe element Clasă<br />

int8() -128 ÷127 Întreg cu semn, pe 8 biţi 1 int8<br />

int16() -32,768 ÷32,767 Întreg cu semn, pe 16 biţi 2 int16<br />

int32() -2,147,483,648 ÷2,147,483,647 Întreg cu semn, pe 32 biţi 4 int32<br />

int64() -9,223,372,036,854,775,808 ÷<br />

9,223,372,036,854,775,807<br />

Întreg cu semn, pe 64 biţi 8 int64<br />

Clasele numerice întregi fără semn (un<strong>si</strong>gned)<br />

uint8<br />

uint16<br />

uint32<br />

uint64<br />

Funcţii de conver<strong>si</strong>e: uint8(), uint16(), uint32(), uint64()<br />

Forma generală:<br />

I = uint8(X)<br />

I = uint16(X)<br />

I = uint32(X)<br />

I = uint64(X)<br />

Efect: convertesc elementele tabloului X în întregi fără semn. X poate fi orice obiect de tip numeric.<br />

Tab 2.4 Funcţii de conver<strong>si</strong>e spre tipuri întregi fără semn<br />

Funcţie Domeniu Tip Octeţi pe element Clasă<br />

uint8() 0 ÷ 255 Întreg fără semn, pe 8 biţi 1 uint8<br />

uint16() 0 ÷ 65,535 Întreg fără semn, pe 16 biţi 2 uint16<br />

uint32() 0 ÷ 4,294,967,295 Întreg fără semn, pe 32 biţi 4 uint32<br />

uint64() 0 ÷ 18,446,744,073,709,551,615 Întreg fără semn, pe 64 biţi 8 uint64<br />

Funcţii de determinare a domeniului de reprezentare<br />

v = intmin<br />

v = intmin('classname')<br />

v = intmax<br />

v = intmax('classname')<br />

Exemple:<br />

- determinarea limitelor minime pentru clasele întregi cu semn:<br />

>> intmin('int8')<br />

ans =<br />

-128<br />

>> intmin('int16')<br />

ans =<br />

-32768<br />

>> intmin('int32')<br />

ans =<br />

-2147483648<br />

>> intmin('int64')<br />

ans =<br />

-9223372036854775808<br />

- determinarea limitelor minime pentru clasele întregi fără semn:<br />

3 | P a g e


Conf.dr.ing. Ovidiu-Aurelian Deteşan – <strong>Programare</strong> <strong>si</strong> <strong>limbaje</strong> <strong>II</strong> <strong>Curs</strong> 3. Clase Matlab<br />

>> intmin('uint64')<br />

ans =<br />

0<br />

Observație. Toate clasele uint* au valoarea minimă zero.<br />

- determinarea limitelor maxime pentru clasele întregi cu semn:<br />

>> intmax('int8')<br />

ans =<br />

127<br />

>> intmax('int16')<br />

ans =<br />

32767<br />

>> intmax('int32')<br />

ans =<br />

2147483647<br />

>> intmax('int64')<br />

ans =<br />

9223372036854775807<br />

- determinarea limitelor maxime pentru clasele întregi cu semn:<br />

>> intmax('uint8')<br />

ans =<br />

255<br />

>> intmax('uint16')<br />

ans =<br />

65535<br />

>> intmax('uint32')<br />

ans =<br />

4294967295<br />

>> intmax('uint64')<br />

ans =<br />

18446744073709551615<br />

2.1.3 Clasa text (char)<br />

Un caracter în MATLAB este reprezentat printr-un întreg convertit în caracterul Unicode echivalent.<br />

Un şir de caractere: vector cu componente numerice, reprezentând caractere.<br />

Caracterele sau şirurile de caractere aparţin clasei char.<br />

2.1.3.1 Crearea unui <strong>si</strong>ngur caracter<br />

>>hChar = 'h'<br />

>>whos hChar<br />

Name Size Bytes Class Attributes<br />

hChar 1x1 2 char<br />

Valoarea numerică a lui hChar este:<br />

>>uint8(hChar)<br />

ans =<br />

104<br />

2.1.3.2 Crearea unui şir de caractere<br />

>>str = 'Hello';<br />

>>whos str<br />

Name Size Bytes Class Attributes<br />

str 1x5 10 char<br />

>>str_numeric = uint8(str)<br />

4 | P a g e


Conf.dr.ing. Ovidiu-Aurelian Deteşan – <strong>Programare</strong> <strong>si</strong> <strong>limbaje</strong> <strong>II</strong> <strong>Curs</strong> 3. Clase Matlab<br />

str_numeric =<br />

72 101 108 108 111<br />

>> str_alpha = char([72 101 108 108 111])<br />

str_alpha =<br />

Hello<br />

2.1.3.3 Crearea unui tablou de şiruri de caractere<br />

Se folosește constructorul de tablouri ([]), liniile se delimitează prin (;), iar matricea trebuie să fie dreptunghiulară,<br />

adică fiecare linie să conţină același număr de elemente. În cazul în care șirurile de caractere nu au aceeași<br />

lungime, se vor adăuga spaţii la sfarșit.<br />

Exemplu:<br />

>> persoana=['Pop Ion ';...<br />

'A<strong>si</strong>stent univer<strong>si</strong>tar';...<br />

'UTCN ']<br />

persoana =<br />

Pop Ion<br />

A<strong>si</strong>stent univer<strong>si</strong>tar<br />

UTCN<br />

O altă modalitate de creare a tablourilor de șiruri de caractere este utilizarea funcţiei char().<br />

>> pers_char=char('Pop Ion','A<strong>si</strong>stent univer<strong>si</strong>tar','UTCN')<br />

pers_char =<br />

Pop Ion<br />

A<strong>si</strong>stent univer<strong>si</strong>tar<br />

UTCN<br />

Crearea tablourilor de șiruri de caractere prin concatenare:<br />

>> nume='Pop Ion '<br />

nume =<br />

Pop Ion<br />

>> functie='A<strong>si</strong>stent univer<strong>si</strong>tar'<br />

functie =<br />

A<strong>si</strong>stent univer<strong>si</strong>tar<br />

>> angajator='UTCN '<br />

angajator =<br />

UTCN<br />

Concatenarea orizontală creează un șir de caractere format din șirurile iniţiale, plus eventual unul sau mai mulţi<br />

separatori:<br />

>> pers_horiz=[nume, ',', functie, ',', angajator]<br />

pers_horiz =<br />

Pop Ion ,A<strong>si</strong>stent univer<strong>si</strong>tar,UTCN<br />

>> pers_horiz=['|', nume,'|', ',','|', functie,'|', ',', angajator,'|']<br />

pers_horiz =<br />

|Pop Ion |,|A<strong>si</strong>stent univer<strong>si</strong>tar|,UTCN |<br />

Concatenarea verticală o matrice de caractere. În acest caz, șirurile de caractere iniţiale trebuie să aibă aceeași<br />

lungime:<br />

>> pers_vert=[nume; functie; angajator]<br />

pers_vert =<br />

Pop Ion<br />

A<strong>si</strong>stent univer<strong>si</strong>tar<br />

UTCN<br />

2.1.4 Clasa manipulator de funcţie (function_handle)<br />

Manipulatorul de funcţie este o asociere apelabilă, cu o funcţie MATLAB.<br />

5 | P a g e


Conf.dr.ing. Ovidiu-Aurelian Deteşan – <strong>Programare</strong> <strong>si</strong> <strong>limbaje</strong> <strong>II</strong> <strong>Curs</strong> 3. Clase Matlab<br />

2.1.4.1 Crearea unui manipulator de funcţie<br />

Sintaxă:<br />

h = @numefunctie<br />

unde h este variabila care va memora manipulatorul de funcţie.<br />

Exemplu:<br />

>> media=@mean<br />

media =<br />

@mean<br />

>> media([1 3 5 7 9 11.25])<br />

ans =<br />

6.0417<br />

A fost creat astfel un „alias” al funcţiei mean(), care poate fi folo<strong>si</strong>t în locul funcţiei „manipulate”.<br />

2.1.4.2 Manipularea unei funcţii anonime<br />

Manipulatoarele de funcţii pot servi și la apelarea funcţiilor anonime. De exemplu, instrucţiunea:<br />

>> patrat = @(x) x^2<br />

patrat =<br />

@(x)x^2<br />

creează o funcţie anonimă care calculează pătratul valorii primite ca și parametru:<br />

>> patrat(5)<br />

ans =<br />

25<br />

2.1.4.3 Obţinerea de informaţii despre un manipulator de funcţie<br />

Funcţia functions() returnează informaţii despre un manipulator de funcţie. În legătură cu manipulatoarele<br />

definite anterior, se obţin următoarele informaţii:<br />

>> functions(media)<br />

ans =<br />

function: 'mean'<br />

type: '<strong>si</strong>mple'<br />

file: 'C:\Program Files\MATLAB\R2008b\toolbox\matlab\datafun\mean.m'<br />

>> functions(patrat)<br />

ans =<br />

function: '@(x)x^2'<br />

type: 'anonymous'<br />

file: ''<br />

workspace: {[1x1 struct]}<br />

2.1.5 Clasele container eterogen<br />

2.1.5.1 Clasa container eterogen bazată pe nume (struct)<br />

Structurile sunt tablouri MATLAB care conţin câmpuri. Aceste câmpuri pot conţine date de orice tip. De exemplu,<br />

o structura auto poate conţine următoarele câmpuri:<br />

auto --> marca<br />

model<br />

an_fabricatie<br />

cap_cilindrica<br />

6 | P a g e


Conf.dr.ing. Ovidiu-Aurelian Deteşan – <strong>Programare</strong> <strong>si</strong> <strong>limbaje</strong> <strong>II</strong> <strong>Curs</strong> 3. Clase Matlab<br />

culoare<br />

putere<br />

Crearea tablourilor de tip structură folo<strong>si</strong>nd instrucţiunea de atribuire:<br />

>> auto.marca='Nissan';<br />

>> auto.model='DeltaWing';<br />

>> auto.an_fabricatie=2012;<br />

>> auto.cap_cilindrica=1600;<br />

>> auto.culoare='<strong>si</strong>lver';<br />

>> auto.putere=300<br />

auto =<br />

marca: 'Nissan'<br />

model: 'DeltaWing'<br />

an_fabricatie: 2012<br />

cap_cilindrica: 1600<br />

culoare: '<strong>si</strong>lver'<br />

putere: 300<br />

Dacă se dorește introducerea mai multor modele auto, se vor folo<strong>si</strong> indici după numele structurii:<br />

>> auto(2).marca='Porsche';<br />

>> auto(2).model='911 Turbo Cabrio';<br />

>> auto(2).an_fabricatie=2010;<br />

>> auto(2).cap_cilindrica=3800;<br />

>> auto(2).culoare='alb';<br />

>> auto(2).putere=480<br />

auto =<br />

1x2 struct array with fields:<br />

marca<br />

model<br />

an_fabricatie<br />

cap_cilindrica<br />

culoare<br />

putere<br />

Dimen<strong>si</strong>unea tabloului de tip structură<br />

>> <strong>si</strong>ze(auto)<br />

ans =<br />

1 2<br />

Dacă se dorește afișarea caracteristicilor unui autoturism, numele structurii se va indexa cu numărul de ordine al<br />

elementului din tabloul de structuri:<br />

>> auto(1)<br />

ans =<br />

marca: 'Nissan'<br />

model: 'DeltaWing'<br />

an_fabricatie: 2012<br />

cap_cilindrica: 1600<br />

culoare: '<strong>si</strong>lver'<br />

putere: 300<br />

>> auto(2)<br />

ans =<br />

marca: 'Porsche'<br />

model: '911 Turbo Cabrio'<br />

an_fabricatie: 2010<br />

cap_cilindrica: 3800<br />

culoare: 'alb'<br />

putere: 480<br />

Accesarea câmpului putere corespunzător primului autoturism și a câmpului model corespunzător celui de al<br />

doilea autoturism, se face astfel:<br />

7 | P a g e


Conf.dr.ing. Ovidiu-Aurelian Deteşan – <strong>Programare</strong> <strong>si</strong> <strong>limbaje</strong> <strong>II</strong> <strong>Curs</strong> 3. Clase Matlab<br />

>> auto(1).putere<br />

ans =<br />

300<br />

>> auto(2).model<br />

ans =<br />

911 Turbo Cabrio<br />

Crearea tablourilor de tip structură folo<strong>si</strong>nd funcţia struct(). Se folosește următoarea formă generală:<br />

strArray = struct('field1',val1,'field2',val2, ...)<br />

unde field1... reprezintă câmpurile, iar val1... valorile. Întotdeauna se folosesc perechi de câmpuri și valori.<br />

Exemplu: crearea unei structuri <strong>si</strong>milare celei precedente, având numele autoStr:<br />

>> autoStr=struct('marca', 'Mercedes', 'model', 'SLR McLaren Roadster 722 S',...<br />

'an_fabricatie', 2010, 'cap_cilindrica', 5439, 'culoare', 'gri', 'putere', 625 )<br />

autoStr =<br />

marca: 'Mercedes'<br />

model: 'SLR McLaren Roadster 722 S'<br />

an_fabricatie: 2010<br />

cap_cilindrica: 5439<br />

culoare: 'gri'<br />

putere: 625<br />

2.1.5.2 Clasa container eterogen indexată (cell)<br />

Un tablou de celule reprezintă o formă de memorare a datelor de tipuri și dimen<strong>si</strong>uni diferite (eterogene), în<br />

aceeași structură de tip tablou. Pentru accesarea elementelor se folosește același mod ca și în cazul tablourilor<br />

obișnuite (omogene), cu diferenţa că în loc de paranteze pătrate se vor folo<strong>si</strong> acolade.<br />

Tab 2.5 Operatorii utilizaţi la construcţia, concatenarea și indexarea tablourilor de celule<br />

Operaţie Sintaxă Descriere<br />

Construcţie C = {A B D E} Construiește tabloul de celule C care poate conţine date eterogene, din<br />

variabilele A, B, D, și E<br />

Concatenare C3 = {C1 C2} Concatenează tablourile de celule C1 și C2 într-un tablou de celule cu 2<br />

elemente, C3, astfel încât C3{1} = C1 și C3{2} = C2<br />

C3 = [C1 C2] Concatenează conținutul tablourilor de celule C1 și C2<br />

Indexare X = C(s) Returează celulele tabloului C specificate prin indicii s<br />

X = C{s} Returează conținutul celulelor lui C care sunt specificate prin indicii s<br />

X = C{s}(t) Referă unul sau mai multe elemente ale unui tablou aflat în interiorul<br />

unei celule. Indicele s selectează celula, iar indicele t selectează<br />

elementul (elementele) de tablou.<br />

Exemplu de definire a unui tablou de celule:<br />

>> Tablou_celule = {magic(3), 'Toyota Avalon'; 3+7i, -pi:pi/12:pi}<br />

Tablou_celule =<br />

[3x3 double] 'Toyota Avalon'<br />

[3.0000 + 7.0000i] [1x25 double]<br />

Conţinutul celulelor poate fi accesat astfel:<br />

>> Tablou_celule{1}<br />

ans =<br />

8 1 6<br />

3 5 7<br />

4 9 2<br />

>> Tablou_celule{2}<br />

ans =<br />

3.0000 + 7.0000i<br />

>> Tablou_celule{3}<br />

8 | P a g e


Conf.dr.ing. Ovidiu-Aurelian Deteşan – <strong>Programare</strong> <strong>si</strong> <strong>limbaje</strong> <strong>II</strong> <strong>Curs</strong> 3. Clase Matlab<br />

ans =<br />

Toyota Avalon<br />

>> Tablou_celule{4}<br />

ans =<br />

Columns 1 through 8<br />

-3.1416 -2.8798 -2.6180 -2.3562 -2.0944 -1.8326 -1.5708 -1.3090<br />

Columns 9 through 16<br />

-1.0472 -0.7854 -0.5236 -0.2618 0 0.2618 0.5236 0.7854<br />

Columns 17 through 24<br />

1.0472 1.3090 1.5708 1.8326 2.0944 2.3562 2.6180 2.8798<br />

Column 25<br />

3.1416<br />

>> Tablou_celule{1}(3,2)<br />

ans =<br />

9<br />

>> Tablou_celule{3}(3)<br />

ans =<br />

y<br />

Afișarea structurii grafice a unui tablou de celule<br />

>> cellplot(Tablou_celule,'legend')<br />

9 | P a g e

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!