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 ...
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