0% found this document useful (0 votes)
525 views77 pages

Introducere in Matlab PDF

This document provides an introduction to MATLAB. It discusses what MATLAB is, the MATLAB screen interface, variables, vectors, matrices, operators, functions, file usage, user-defined functions, and control flow structures. MATLAB is a high-level language used for technical computing. The MATLAB screen displays the command window, current directory, workspace, and command history. Variables in MATLAB can be scalars, vectors, or matrices and do not require type declarations. Basic operations on matrices include arithmetic operators, indexing, concatenation, and element-wise operations. The document provides examples of built-in functions for math, logic, discrete math, rounding, and trigonometry. It also covers if/else conditional statements, for and while loops,

Uploaded by

Alecs Bala
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
525 views77 pages

Introducere in Matlab PDF

This document provides an introduction to MATLAB. It discusses what MATLAB is, the MATLAB screen interface, variables, vectors, matrices, operators, functions, file usage, user-defined functions, and control flow structures. MATLAB is a high-level language used for technical computing. The MATLAB screen displays the command window, current directory, workspace, and command history. Variables in MATLAB can be scalars, vectors, or matrices and do not require type declarations. Basic operations on matrices include arithmetic operators, indexing, concatenation, and element-wise operations. The document provides examples of built-in functions for math, logic, discrete math, rounding, and trigonometry. It also covers if/else conditional statements, for and while loops,

Uploaded by

Alecs Bala
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 77

Introducere in Matlab

Continut:
Ce este Matlab?
Ecranul Matlab
Variabile, vectori, matrice, indecsi
Operatori (Aritmetic, relational, logic )
Facilitati afisare
Controlul fluxului
Utilizarea fisierelor M
Functii definite de utilizator
Concluzii

Ce este Matlab?
Matlab este un limbaj de nivel inalt ce are
numeroase colectii de unelte pentru a facilita
lucrul utilizatorului
Cat de inalt?
Matlab
High Level
Languages such as
C, Pascal etc.

Assembly

Ce ne intereseaza?
Matlab este o unealta ampla, dar la acest
curs il vom folosi numai in mica parte.
Functionalitatile ce ne sunt necesare sunt:
Matlab
Series of
Matlab
commands
m-files

functions
Input
Output
capability

Command
Line
Command execution
like DOS command
window

mat-files

Data
storage/
loading

Ecranul Matlab
Command Window
type commands
Current Directory
View folders and m-files
Workspace
View program variables
Double click on a variable
to see it in the Array Editor
Command History
view past commands
save a whole session
using diary

Variabile
Nu necesita declaratii explicite de tip. i.e.,
int a;
double b;
float c;

Toate variabilele sunt create implicit in dubla precizie si


sunt matrice.
Example:
>>x=5;
>>x1=2;

Am declarat 2 variabile matrice 1x1 cu dubla precizie.

Vectori, Matrice
un vector

x = [1 2 5 1]

x =
1

o matrice

x = [1 2 3; 5 1 4; 3 2 -1]

x =
1
5
3

transpusa

2
1
2

3
4
-1
y = x

y =
1
2
5
1

Sir, Matrice
t =1:10
t =

k =2:-0.5:-1
k =

1.5

0.5

= [1:4; 5:8]

x =
1
5

2
6

3
7

4
8

-0.5

-1

10

Generarea vectorilor cu ajutorul functiilor


zeros(M,N) MxN matrix of zeros

ones(M,N)

MxN matrix of ones

rand(M,N)

MxN matrix of uniformly


distributed random
numbers on (0,1)

x = zeros(1,3)
x =
0
0
0
x = ones(1,3)
x =
1
1
1
x = rand(1,3)
x =
0.9501 0.2311 0.6068

Indexarea matricelor
The matrix indices begin from 1 (not 0 (as in C))
The matrix indices must be positive integer

Given:

A(-2), A(0)
Error: ??? Subscript indices must either be real positive integers or logicals.
A(4,2)
Error: ??? Index exceeds matrix dimensions.

Concatenarea Matricelor
x = [1 2], y = [4 5], z=[ 0 0]
A = [ x y]
1

B = [x ; y]
1 2
4 5
C = [x y ;z]
Error:
??? Error using ==> vertcat CAT arguments dimensions are not consistent.

Operatori (aritmetici)
+
*
/
^

addition
subtraction
multiplication
division
power
complex conjugate transpose

Operatii cu matrice

Given A and B:

Addition

Subtraction

Product

Transpose

Operatori (Element cu Element)

.* element-by-element multiplication
./ element-by-element division
.^ element-by-element power

Utilizarea . Element Operatie


A = [1 2 3; 5 1 4; 3 2 -1]
A=
1 2 3
5 1 4
3 2 -1

x = A(1,:)
x=

c=x./y

d = x .^2

b=

c=
0.33 0.5 -3

d=

y = A(: ,3)
y=

1 2 3

b = x .* y

3 8 -3
3 4 -1

K= x^2
Erorr:
??? Error using ==> mpower Matrix must be square.
B=x*y
Erorr:
??? Error using ==> mtimes Inner matrix dimensions must agree.

Functii predefinite in Matlab


Functie: nume, argumente (intrari), valori intoarse(iesiri),
serie de linii de cod (corpul functiei)
In general argumentele pot fi atat scalari cat si matrice
(aceasta diferenta in Matlab este irelevanta
scalar=matrice 1x1)
Exemplu x = 9;
b = sqrt(x) intoarce
b=
3
x = [4, 9, 16];
b = sqrt(x) intoarce
b=
234

Functii predefinite in Matlab


Unele functii pot avea mai multi parametri:
Ex. Restul = rem(10,3) restul impartirii intregi
Restul = 1
Sau pot intoarce mai multe valori
d = [1, 2, 3; 4, 5, 6];
f = size(d) numarul de linii si coloane din
matrice
f =
2 3

HELP in Matlab
Functia in linie de comanda help
Documentatia cuprinzatoare in format HTML
Documentatia online
Exemplu:
help tan
TAN Tangent of argument in radians.
TAN(X) is the tangent of the elements of X.
See also atan, tand, atan2.
doc tan

Functii elementare matematice


Abs(x) valoarea absoluta
Sqrt(x) radacina patrata
Nthroot(x,n) radacina de ordinul n a x
Sign(x) valoarea -1 daca x < 0; 1 altfel
Rem(x, y) restul impartirii intregi a lui x la y
Exp(x) e la puterea x
Log(x) logaritmul natural (in baza e)
Log10(x)- logaritmul zecimal (baza 10)

Functii de rotunjire
Round(x) rotunjeste pana la cel mai apropiat intreg
Fix(x) rotunjeste prin scadere (trunchiaza) pana la
cel mai apropiat intreg (in cazul numerelor pozitive).
In cazul numerelor negative, rotunjeste prin adaos.
Ex. Round(8.6) = 9; round(-8.6) = -9
Fix(8.6) = 8; fix(-8.6) = -8
Floor(x) rotunjeste prin scadere pana la cel mai
apropiat intreg
Ceil(x) rotunjeste prin adaos la cel mai apropiat
intreg
Ex. Floor(-8.6) = -9; ceil (-8.6) = -8

Functii pentru matematica discreta


Matematica discreta este matematica
numerelor intregi
Exemplu: factorialul (!) unui numar
5! = 1x2x3x4x5 = 120
In Matlab factorial(5)
Ans = 120

Alte exemple
factor(x) factorizarea numarului x in factori primi
12 = 2x2x3= 22 x 3
In matlab: factor(x)
Ans= 2 2 3
gcd(x, y) cel mai mare divizor comun
Gcd(10,15)
Ans = 5
lcm (x, y) cel mai mic multiplu comun
rats(x) reprezinta x ca o fractie
nchoosek(n,k) combinari de n luate cate k

Permutari
123
132
213
231
312
321
3!

Aranjamente n luate cate m


n = 4; m =2

Combinari de n luate cate m

Functii trigonometrice

180 grade.pi radiani

Problema
Sa se gaseasca rezultanta unui grup de forte
ce actioneaza aspra unui balon cu aer
Gravitatie

Forta
vantului
Flotabilitate

F forta totala
Fx - forta pe axa X
Fy - forta pe axa Y

Problema(2)
Suma fortelor pe fiecare axa

Unghiul sub care actioneaza forta rezultanta

Problema(3)
Modulul rezultantei

G = 100N
F = 200N
V =50N

Problema(4) un exemplu de mana

Se calculeaza componentele fortelor pe


fiecare din axe, apoi suma

Problema(5) un exemplu de mana

Se calculeaza unghiul rezultantei si modulul


acesteia

Problema(6)
Rezolvarea in Matlab

Rezolvarea unei probleme in Matlab


clear, clc %eliminarea variabilelor definite anterior si curatarea
%ecranului
%Definim intrarile
Force =[100, 200, 50];
theta = [-90, +90, +30];
%transformam unghiurile in radiani
theta = theta*pi/180;
%componentele pe axa x
ForceX = Force.*cos(theta);
%suma componentelor pe axa x
ForceX_total = sum(ForceX);
%gasim si insumam componentele pe axa y intr-un singur pas
ForceY_total = sum(Force.*sin(theta));
%gasim unghiul rezultantei in radiani
result_angle = atan(ForceY_total/ForceX_total);
%gasim unghiul rezultantei in grade
result_degrees = result_angle*180/pi
%gasim modulul fortei rezultante
Force_total = ForceX_total/cos(result_angle)

Operator (relationali, logici)


== Equal to
~= Not equal to
< Strictly smaller
> Strictly greater
<= Smaller than or equal to
>= Greater than equal to
& And operator
| Or operator

Controlul fluxului in Matlab


if
for
while
break
.

Structura de control decizionala (de


selectie, alternativ)
Cateva exemple simple
Sintaxa comenzii IF

if (Conditie_1)
Comenzi Matlab
elseif (Conditie_2)
Comenzi Matlab
elseif (Conditie_3)
Comenzi Matlab
else
Comenzi Matlab
end

if ((a>3) & (b==5))


Set de comenzi Matlab;
end
if (a<3)
Comenzi Matlab;
elseif (b~=5)
Alte comenzi Matlab;
end
if (a<3)
Comenzi Matlab;
else
Alte comenzi Matlab;
end

IF simplu
if (Conditie)
Comenzi Matlab
else
Comenzi Matlab
end

adevarat

conditie

Grup de instructiuni 1

fals

Grup de instructiuni 2

IF-ELSEIF-ELSE
if (Conditie_1)
Comenzi Matlab
elseif (Conditie_2)
Comenzi Matlab
else
Comenzi Matlab
end

tru
e

conditie
1

Grup de
Instructiuni 1

tru
e

false

conditie
2

Grup de
Instructiuni 2

false

Grup de
instructiuni 3

Rezolvarea ecuatiei de gradul 2


ax2 + bx + c = 0
Pasii
d = b2 4ac
if d > 0,
doua radacini reale
else if d == 0,
doua radacini reale identice
else
doua radacini complexe

Rezolvarea ecuatiei de gradul 2


% Solicitarea coeficientilor ecuatiei
disp ('ACEST PROGRAM REZOLVA ECUATIA');
disp ('DE GRADUL AL DOILEA, DE FORMA A*X^2 + B*X + C = 0. ');
a = input (Introduceti coeficientul A: ');
b = input (Introduceti coeficientul B: ');
c = input ('Introduceti coeficientul C: ');
% Calcularea discriminantului
discriminant = b^2 - 4 * a * c;
% Gasirea radacinilor, in functie de valoarea discriminatului
if discriminant > 0 % doua radacini reale, deci...
x1 = ( -b + sqrt(discriminant) ) / ( 2 * a );
x2 = ( -b - sqrt(discriminant) ) / ( 2 * a );
disp ('Aceasta ecuatie are doua radacini reale:');
fprintf ('x1 = %f\n', x1);
fprintf ('x2 = %f\n', x2);
elseif discriminant == 0 % doua radacini reale egale...
x1 = ( -b ) / ( 2 * a );
disp (Aceasta ecuatie are doua radacini reale identice:');
fprintf ('x1 = x2 = %f\n', x1);
else % doua radacini complexe...
real_part = ( -b ) / ( 2 * a );
imag_part = sqrt ( abs ( discriminant ) ) / ( 2 * a );
disp (Aceasta ecuatie are doua radacini complexe:');
fprintf('x1 = %f +i %f\n', real_part, imag_part );
fprintf('x2 = %f -i %f\n', real_part, imag_part );
end

Intrari/ Iesiri controlate de utilizator


Intrari definite de utilizator
Iesiri definite de utilizator

Ramificatii: Constructia switch


switch ( expression ),
case value 1,
statement 1
statement 2
...
case value 2,
statement 1
statement 2
...
...
end

expression este o constanta scalara sau


sir
statement
group 1

statement
group 2

Ramificatii: Constructia switch


switch ( expression ),
case {value set 1},
statement 1
statement 2
...
case {value set 2},
statement 1
statement 2
...
...
otherwise,
statement 1
statement 2
...
end

statement
group 1

statement
group 2

optional statement group that is


executed if none of the cases is satisfied

Exemplu
Exemplu: numere pare si impare
switch (valoare),
case {1,3,5,7,9},
disp( Numar impar );
case {2,4,6,8,10},
disp( Numar par );
otherwise,
disp( In afara intervalului );
end

Bucle
Buclele sunt utilizate pentru a executa o
secventa de instructiuni de mai multe ori
Vom studia:
bucla while
bucla for

Difera in modul in care este controlata


repetarea

Bucle: bucla while

conditie

true
grup de
instructiuni

false

Instructiunile sunt
executate repetitiv cat
timp conditia este
indeplinita
while ( condition ),
statement 1
statement 2
...
grup de
end

instructiuni

Exemple
Exemplu: Media aritmetica si deviatia standard a unui set de
masuratori pozitive
Pseudocod:

Initializeaza sum_x=0, sum_x2=0, n=0


Citeste prima valoare, x
while x >= 0,
nn+1
sum_x sum_x + x
sum_x2 sum_x2 + x^2
Citeste urmatoarea valoare, x
end
x_mean sum_x / n
x_std sqrt( ( n * sum_x2 sum_x^2 ) / ( n * (n-1) ) )
Afiseaza rezultatul

Exemplu in Matlab
% Initializeaza sumele.
n = 0; sum_x = 0; sum_x2 = 0;
% Citeste prima valoarea
x = input(Introduceti prima valoare: ');
% Bucla While pentru a citi intrarile.
while x >= 0
% Acumuleaza sumele.
n
= n + 1;
sum_x = sum_x + x;
sum_x2 = sum_x2 + x^2;
% Citeste urmatoarea valoare
x = input(Introduceti urmatoarea valoare:

');

end
% Calculeaza media si deviatia standard
x_bar = sum_x / n;
std_dev = sqrt( (n * sum_x2 - sum_x^2) / (n * (n-1)) );
% Afiseaza rezultatele.
fprintf(Media acestui set de date este: %f\n', x_bar);
fprintf(Deviatia standard este:
%f\n', std_dev);
fprintf(Numarul de valori este: %f\n', n);

Bucla: bucla for


Instructiunile sunt executate de un numar
specificat de ori
for index = expression,
statement 1
statement 2
statement
...
group
end
Expresia este de obicei un vector in notatia
scurta
primul:increment:ultimul

Exemple
Exemplu:

Output:

for x = [ 1 5 13 ],
x
end

x=
1
x=
5
x=
13

Exemple
Exemplu:

Output:

for x = [ 1 2 3; 4 5 6 ],
x
end

x=
1
4
x=
2
5
x=
3
6

Exemple
Factorialul (n!) unui numar intreg n
n = input( Introduceti n: );
if ( ( n < 0 ) | ( fix(n) ~= n ) ),
error( n trebuie sa fie un intreg pozitiv );
end
if ( ( n == 0 ) | ( n == 1 ) ),
f = 1;
else
f = 1;
for ii = 2:n,
f = f * ii;
end
end

Exemplu
Exemplu: Media aritmetica si deviatia standard a unui set de
masuratori pozitive
Pseudocod:

Initializeaza sum_x, sum_x2


Citeste numarul de masuratori, n
for ii = 1:n,
Citeste valoarea, x
sum_x sum_x + x
sum_x2 sum_x2 + x^2
end
x_mean sum_x / n
x_std sqrt( ( n * sum_x2 sum_x^2 ) / ( n * (n-1) ) )
Afiseaza rezultatul

Exemplul in Matlab
% Intializare sume
sum_x = 0; sum_x2 = 0;
% Numarul de valori.
n = input(Introduceti numarul de valori: ');
% Verficam daca sunt date suficiente.
if n < 2
% Date insuficiente
disp (Trebuie sa introduceti cel putin 2 valori.');
else % Avem valori suficiente.
% Bucla in care se citesc valorile.
for ii = 1:n
% Citeste urmatoarea valoare
x = input(Introduceti valoarea:
% Acumuleaza sumele.
sum_x = sum_x + x;
sum_x2 = sum_x2 + x^2;
end

');

% Calculam media si dev std.


x_bar = sum_x / n;
std_dev = sqrt( (n * sum_x2 - sum_x^2) / (n * (n-1)) );
% Afisam.
fprintf(Media acestui set de date este: %f\n', x_bar);
fprintf(Deviatia standard este:
%f\n', std_dev);
fprintf(Numarul de valori este: %f\n', n);

end

Alte exemple
Ghicirea unui numar ales de calculator intre 1
si 100
Pseudocod:
Alege un numar la intamplare, num, in [1,100]
Citeste presupunerea utilizatorului
while ( guess ~= num )
Informeaza utilizatorul daca presupunerea este mai
mica sau mai mare decat numarul ales
Citeste noua presupunere

end

Codul Matlab
num = round( (10-1) * rand + 1 );
guess = input( Numarul ghicit?' );
tries = 1;
while ( guess ~= num ),
guess = input( Numarul ghicit?' );
tries = tries + 1;
end
fprintf( Ati ghicit corect in %d incercari', tries );

Acelasi exemplu, numar limitat de


incercari
Acum utilizatorul are la dispozitie numai 3
incercari
Pseudocode:
Pseudocod:
Alege un numar la intamplare, num, in [1,10]
Citeste presupunerea utilizatorului
Initializeaza numarul de incercari cu 1
while ( (guess ~= num) & ( tries < 3 ) ),
Citeste noua presupunere
Intrementeaza numarul de incercari

end

In Matlab
num = round( (10-1) * rand + 1 );
guess = input( Numarul ghicit?' );
tries = 1;
while ( ( guess ~= num ) & ( tries < 3 ) ),
guess = input( Numarul ghicit?' );
tries = tries + 1;
end
if ( guess == num ),
disp( Felicitari, ati ghicit!' );
else
disp( N-ati ghicit!' );
end

%genereaza un numar intreg la intamplare intre 1 si 100


num = round( (100-1) * rand + 1 );
guess = input( 'Numarul ghicit?' );
tries = 1;
while ( guess ~= num && tries <= 10)
if (guess > num)
guess = input( 'Dati un numar mai mic. Alt numar?' );
else
guess = input( 'Dati un numar mai mare. Alt numar?' );
end
tries = tries + 1;
end
if (num == guess)
fprintf( '\nAti ghicit corect in %d incercari\n', tries );
else
fprintf( '\nNu ati ghicit. Game over.\n');
end

S se selecteze elementele de pe poziiile 2-6 i 1, 4, 7 ale vectorului:


A=[1 2 3 4 5 6 7 8].
Rezolvare
A=[1 2 3 4 5 6 7 8]
B=A(2:6)
C=A(1,4,7)

Fie o matrice A s se selecteze:


a) linia 1;
b) coloana 2;
c) liniile 1-3 i coloanele 3-5;
d) liniile 1,3 i coloanele 2, 3-5;
Rezolvare
A=[1 2 3 4 5 ;6 7 8 9 0; 1 4 6 8 6; 3 1 7 0 4]
a=A(1,:)
b=A(:,2)
c=A(1:3,3:5)
d=A([1,3],[2,3:5])

Se se rezolve ecuatia x^3-2*x-5 cu


metoda bisectiei

a = 0; fa = -Inf;
b = 3; fb = Inf;
while b-a > eps*b
x = (a+b)/2;
fx = x^3-2*x-5;
if fx == 0
break
elseif sign(fx) == sign(fa)
a = x; fa = fx;
else
b = x; fb = fx;
end
end
x

Gasirea erorilor din programe (Debugging)


File -> Preferences -> Editor/Debugger ->
Code Folding
Breakpoint

Recomandari
Folositi indentatia pentru a imbunatati lizibilitatea
codului
Nu modificati niciodata valoarea indexului de bucla
in interiorul buclei
Atribuiti valori tuturor vectorilor utilizati intr-o bucla
inainte de a executa bucla
Daca se poate implementa un calcul fie printr-o
bucla, fie folosind vectori, utilizati intotdeauna vectori
Utilizati cu precadere functii Matlab predefinite in
defavoarea reimplementarii lor

Utilizarea fisierelor M
Click to create
a new M-File

Extension .m
A text file containing script or function or program to run

Utilizarea fisierelor M

If you include ; at the


end of each statement,
result will not be shown
immediately

Functii definite de utilizator


Functiile sunt subrutine stocate in fisiere m ce pot fi
executate prin specificarea unui set de intrari si a iesilor
unde acestea isi vor depune rezultatul
Codul Matlab care spune ca un fisier m este o functie:
function out1=functionname(in1)
function out1=functionname(in1,in2,in3)
function [out1,out2]=functionname(in1,in2)

Acestea trebuie scrise la inceputul fisierului iar fisierul


trebuie salvat cu avand numele functiei

Functii definite de utilizator


Exemple
Scrie o functie: out=squarer (A, ind)
Care ridica la patrat o matrice daca parametrul ind este 1
Sau ridica la patrat matricea element cu element daca
parametrul ind este 2

Acelasi nume

Functii definite de utilizator


O alta functie ce primeste ca parametru un vector si intoarce ca rezultat
suma si produsul elementelor vectorului

Functia sumprod(.) poate fi apelata in linie de comanda astfel:

Note:
% este semnul de comentariu in Matlab
(echivalent cu // in C). Orice altceva se
regaseste pe aceeasi linie este neglijat de
compilatorul Matlab.
Uneori intarziere executiei unui program este
intarziata in mod deliberat pentru a observa
unele rezultate. Se foloseste comanda
pause pentru acesta
pause %asteapta pana se apasa o tasta
pause(3) %asteapta 3 secunde

Grafice
0.7
0.6

plot(.)

0.5
0.4
0.3

Example:
>>x=linspace(0,4*pi,100);
>>y=sin(x);
>>plot(y)
>>plot(x,y)

stem(.)

0.2
0.1
0
-0.1
-0.2
-0.3

10

20

30

40

50

60

70

80

90

100

10

20

30

40

50

60

70

80

90

100

0.7
0.6
0.5
0.4
0.3

Example:
>>stem(y)
>>stem(x,y)

0.2
0.1
0
-0.1
-0.2
-0.3

Grafice
title(.)
This is the sinus function

>>title(This is the sinus function)

1
0.8

xlabel(.)

0.6
0.4

ylabel(.)

0.2
sin(x)

>>xlabel(x (secs))

0
-0.2
-0.4
-0.6

>>ylabel(sin(x))

-0.8
-1

10

20

30

40

50
60
x (secs)

70

80

90

100

Realizati graficul functiei sin(x) pentru


0x4
Crearea unui sir de 100 de esantioane (valori)
intre 0 si 4.
>>x=linspace(0,4*pi,100);

Calcularea sin(.) pentru sirul de valori


1
0.8
0.6

>>y=sin(x);

0.4
0.2
0

Realizarea graficului

-0.2
-0.4
-0.6

>>plot(y)

-0.8
-1

10

20

30

40

50

60

70

80

90

100

Graficul functiei e-x/3sin(x) intre 0x4


Crearea unui sir de 100 de esantioane (valori)
intre 0 si 4.
.>>x=linspace(0,4*pi,100);
>>y=sin(x); sin(.) of
Calculate

functia sin

>>y1=exp(-x/3);
Calculate
e-x/3 of the functia exponentiala

ltiply the arrays y

>>y2=y*y1;

produsul ambelor functii

Graficul functiei e-x/3sin(x) intre 0x4


Inmultim vectorii y si y1 corect (element cu
element)
>>y2=y.*y1;

Realizam graficul functiei

0.7
0.6
0.5
0.4
0.3
0.2

>>plot(y2)

0.1
0
-0.1
-0.2
-0.3

10

20

30

40

50

60

70

80

90

100

Comenzi utile
Comenzi pentru a invoca ajutorul in Matlab
>>help numedefunctie

>>lookfor cuvantcheie

You might also like