Sunteți pe pagina 1din 48

Elemente de practica

programarii
Algoritmi. Scheme logice.
Introducere in Matlab

Generaliti
Un calculator este o maina ce permite rezolvarea unor probleme
prin executarea unui lan de instruciuni.
O succesiune de instruciuni, ce pornind de la niste date de intrare,
prin prelucrare obtine rezultate, se numete program.
Instruciunile ce pot fi recunoscute i executate de microprocesor
sunt simple i limitate ca numr, pentru a nu complica structura
hardware dar consistente pentru a fi utilizat eficient puterea de
calcul.
Limbajele de programare sunt limbaje artificiale, folosite n tiina
calculatoarelor, pentru a scrie secvene de instruciuni (programe),
care pot fi executate de calculator. Similar limbajelor naturale,
limbajele de programare au vocabular, gramatic i sintax.
Limbajele de programare trebuie s aib structuri logice simple i
reguli gramaticale foarte precise.

Cum scriem un program

Problema
Date de
intrare
Rezultate

Algoritm
Cum ajungem
la rezultate
Limbaj de
programare
Scrierea
programului

Execuia
programului
Obinerea de
rezultate

Matlab
Un exemplu de mediu de programare este MATLAB (MATrix
LABoratory), un program interactiv pentru rezolvarea de
probleme stiinifice. De la an la an firma productoare
(MathWorks, 1984, SUA - http://www.mathworks.com/) adaug
funcii noi (Toolbox-uri), cu care se ce pot rezolva problemele
specifice unui domeniu de activitate.
Student Edition of Matlab este o varianta minimala, destinata
initierii in arta programarii, care apeleaza la editorul de texte
Notepad pentru creerea programului (fisierului cu instructiuni,
ce trebuie sa aiba extensia .m). Pentru executia programului este
suficient ca in fereastra de comenzi Matlab sa se tasteze numele
lui, urmat de tasta enter. Anterior trebuie informat Matlab-ul de
locul in care se afla fisierul cu programul, prin comanda cd. Ex:
cd d:\amatlab
amatlab, pe discul d:

in cazul in care locul este directorul

Fereastra de comenzi Matlab

Putem tasta si efectua calcule sau


executa instructiuni in fereastra de
comenzi Matlab. Executia sau
calculul se realizeaza la apasarea
tastei enter! Rezultatul calculelor
directe sunt memorate in variabila
cu numele ans. Intre ferestrele
Notepad si Matlab putem transfera
informatie prin procedura copy paste

Adunarea a 2 numere
a) Identificarea datelor si a algoritmului
Identificarea variabilelor (a, b, c)
b) Alegerea limbajului si scrierea programului

c) Rularea programului
programului

Concluzii
a) Datele sunt identificate prin nume si stau in aceeasi
memorie cu programul. Rezultatul este identificat
printr-un nume, este o variabila ce sta tot in aceeasi
memorie.
b) Numerele afisate de program pot crea confuzii datorita
faptului ca nu sunt oferite explicatii asupra provenientei
lor
c) Programul nu este flexibil, schimbarea datelor de
intrare necesitand schimbarea programului (a fisierului
ex1.m)

Afisarea
disp(text explicativ)
disp(variabila)

afisarea textului explicativ


afisarea valorii variabilei, fara numele ei

Introducerea datelor la cerere


v=input(text explicativ)
variabila cu numele v primeste
valoarea tastata de utilizator. Textul explicativ lamureste
utilizatorul aspru actiunii ce trebuie sa o execute

Compararea (instructiunea if)


Sa se afle care din numerele a si b (tastate de utilizator) este mai
mare

if conditie
grup1 instructiuni
else
grup 2 instructiuni
end

In cazul in care conditie este


adevarata se executa grupul 1,
in caz contrar grupul 2

Operatori relationali
<
<=
>

mai mic
mai mic sau egal
mai mare

>=

mai mare sau egal

==

identic

~=

diferit

Compararea a doua numere

Operatii repetitive (while)


Sa se repete comparari de perechi de doua numere date de
utilizator, pana cand cele doua numere sunt egale
while expresie
grup de instruciuni
end

grup de instruciuni este


executat atta timp ct
expresie este adevrat.
Este necesar ca grup de
instruciuni sa actioneze
si asupra expresiei

Operatii repetitive (while)

Operatii repetitive (for)


Sa se afiseze mesajul informatica este interesanta de n ori (n
fiind particularizat de utilizatir la lansarea programului).
for contor = val.intiala : pas : val.finala
grup instructiuni
end
Variabila contor primeste valoarea initiala si este marita cu
valoarea pas la fiecare parcurgere a grupului de instructiuni.
Grupul de instructiuni este deci repetat pana cand vaiabila
contor ajunge la valoarea finala.
Daca pas nu e precizat, valoarea lui implicita este 1.

Operatii repetitive (for)


Sa se afiseze mesajul informatica este interesanta de n ori (n
fiind particularizat de utilizator la lansarea programului).

Variabile indexate (vectori si matrici)


In Matlab numele de variabile nu trebuie s depeasc 19 caractere
(ce este suplimentar nu este luat n considerare). Caracterele permise
sunt literele alfabetului englez, cifrele de la 0 la 9 i semnul _
(subliniere).
Aa cum i spune i numele, Matlab-ul este locul n care prelucrrile
datelor se fac prin intermediul matricilor. Chiar i mrimile scalare,
care nu au dect o dimensiune, sunt vzute de matrici de dimensiune
1x1! S generm de exemplu variabila g. Comanda whos este ne d
informaii despre variabilele existente:
g=2;
whos
Name

Size

1 by 1

Elements
1

Grand total is 1 elements using 8 bytes

Bytes
8

Density Complex
Full

No

Variabile indexate (vectori si matrici)


Matlab-ul ne ofer o variant global de actualizare, n care se indic
toate valorile elementelor matricei: ntreg setul de valori este ncadrat
ntre paranteze drepte, elementele fiecrei linii fiind separate prin
caracterul spaiu, iar liniile separate prin caracterul ;
Exemplu, generarea matricei m de dimensiune 3 x 5:
m=[11 12 13 14 15; 21 22 23 24 25; 31 32 33 34 35]
m=

11 12

13

14

15

21

22

23

24

25

31

32

33

34

35

Variabile indexate (vectori si matrici)


In Matlab referirea la un element al unei matrici se face prin indicarea
numelui matricei, urmat intre paranteze rotunde de pozitia
elementului.
c=m(1,3)+m(3,5)+2

m(2,1)
Ex:
c=

ans =

50

21

Atunci cand se lucreaza cu siruri de numere, este foarte comoda


utilizarea vectorilor (matrici cu o singura dimensiune). Ex:
a=[2 6 7 0 1]

a(4)

a=

ans =

Gasirea sumei elementelor unui sir

Gasirea sumei elementelor unui sir

Instructiuni, Functii predefinite

mean(X) calculeaza pentru matrici valoarea medie de pe fiecare


din coloanele matricei X sau pentru vectori valoarea medie a
componentelor vectorului X
median(X) calculeaza pentru matrici valoarea median de pe
fiecare din coloanele matricei X sau pentru vectori valoarea
median a componentelor vectorului X
prod(X)
calculeaza pentru matrici valoarea produsului
elementelor de pe fiecare din coloanele matricei X sau pentru
vectori valoarea produsului componentelor vectorului X
sum(X)
calculeaza pentru matrici valoarea sumei
elementelor de pe fiecare din coloanele matricei X sau pentru
vectori valoarea sumei componentelor vectorului X
sort(X)
sorteaza crescator pentru vectori elementele
vectorului X sau pentru matrici fiecare din coloanele matricei X

sign(X) ofera semnul argumentului X


rem(X,Y) ofera restul mpririi lui X la Y
round(X) rotunjeste valoarea argumentului X la cel mai
apropriat ntreg
abs(X) - determina valoarea absoluta a fiecarui element al
matricei X
sqrt(X) calculeaz radicalul de ordinul doi din X
A^n

- ridic la puterea n, argumentul A

pow2(X) - ridic doi la puterea argumentului X


sin(X) sinus de X,
cos(X) - cosinus de X,

Realizarea de grafice de functii


fplot(lista functii, limite, marcaj)
lista functii descrie functia sau functiile de argument x . Ex:
sin(x), cos(x), 2*x+1, (x.^2)
limite este un vector cu 2 sau 4 elemente, ce fixeaz prin primele
2 elemente, domeniul de definiie i prin valorile 3 i 4 domeniul
de valori ale funciei. Ex: [-1 1], [-1 1 2 6]
marcaj este un parametru opional, cu care impunem forma curbei
(putem pune suplimentar liniei continui i nite semne speciale pe
curba funciei). Valorile admise sunt: '-+', '-x', '-o', '-*' (sau '+-',
'x-', 'o-', '*-') si suprapun peste curba funciei semnele +, x, o sau
*.

Graficul functiei x*sin(x)

Reprezentarea grafica a variabilelor Matlab


plot(x,y) sunt reprezentate si unite perechile de puncte ce au
abscisa n vectorul x i ordonata n vectorul y.
plot(x,y,s) ofer i posibilitatea de a indica n ce culoare i sub
ce form dorim s fie realizate segmentele ce unesc punctele,
utiliznd parametrul s (un ir de cel mult 3 caractere):
simbol
y
m
c
r
g
b
w
k

culoare
galben
magenta
cyan
rou
verde
albastru
alb
negru

simbol

.
o
x
+
*
:
-.
--

Efect trasare
punct
cerc
marcare cu x
marcare cu plus
linie continu
stelue
puncte
linie punct
linie ntrerupt

plot(x1,y1,s1, x2,y2,s2, x3,y3,s3,...) generalizarea pentru mai


multe seturi de date

Reprezentarea
grafica a puctelor
prezentate in
vectorii q (abscisa
axa x) si
w (ordonata axa
y)

plot(q) este
echivalenta
cu plot(x,q),
unde x este
un vector cu
elementele:
1, 2, 3 , 4,

Comenzi pentru controlul axelor, titluri


title('text') se folosete pentru indicarea de titluri, textul aprnd
n partea de sus a graficului.
xlabel('text') se folosete pentru indicarea unor explicaii i a
unitilor de msur pe abscis, textul aprnd sub axa x.
ylabel('text') se folosete pentru indicarea unor explicaii i a
unitilor de msur pe ordonat, textul aprnd pe axa y.
legend(text1,text2,text3, ...) adaug legend graficului,
corespunztor fiecrui tip de linie cu care este construit
graficul, sunt prezentate explicaiile text1, tex2,....
grid on instruciune cu care generm o reea de linii orizontale i
verticale, cu care s putem citi corect mrimea valorilor pe
grafic
grid off instruciune cu care anulm efectul grid on

Alte posibilitati grafice 2D


stem(y) face o reprezentare grafic cu segmente verticale de
lungimea valorilor indicate n vectorul y. Fiecare segment se
termin cu un cercule
stairs(y) unete prin trepte valorile vectorului y.
bar(y) realizez un grafic, n care valorile din vectorul v sunt
reprezentate prin bare verticale.
hist(y) reprezint grafic o histogram nprind n 10 intervale
egal spaiate, valorile din vectorul y. Fiecare bar ne arat prin
mrimea nlimii (ordonata), de cte ori este prezent n vectorul
y volarea de pe ordonat. Se reprezint astfel distribuia
elementelor vectorului y.

Etapele realizrii unui program


a) Definirea problemei
b) Selecia algoritmilor i a structurilor de date
c) Specificarea structurii i a logicii programului (descompunerea
n uniti de program-module- i stabilirea funciuni, logicii i
a interfeelor pentru fiecare modul)
d) Codificarea (transcrierea ntr-un limbaj de programare)
e) Depanarea i testarea (pornind de la verificarea modulelor
independent)
f) Redefinirea pailor anteriori (corectarea erorilor depistate)
g) Documentarea
h) Intreinerea programului

Algoritmi. Scheme logice


Algoritmul este o mulime de reguli de calcul, folosite ntr-o
succesiune bine precizat, cu ajutorul crora putem obine
soluia, cu o precizie mulumitoare, a unei probleme, prin
execuia unui numr finit de operaii.
Proprieti
claritate
eficacitate
universalitate

Corespunztor etapelor de calcul algoritmul


este format din mai muli pai, ce se execut
n ordinea lor matural, atta timp ct nu
intervine o condiie de salt, ce s impun
executarea unui alt pas dect cel urmtor

Reprezentarea grafic, intuitiv, a unui algoritm poate


fi fcut cu ajutorul schemelor logice.

Simboluri folosite n ntocmirea de scheme logice

START

STOP

Blocul de nceput i
Blocul de sfrit al
schemei logice

Blocul de calcul
Calculul ce trebuie executat
se scrie in interiorul
dreptunghiului

CITETE

Blocul intrare

lista mrimi

SCRIE

Blocul ieire

lista mrimi

Blocul de decizie
DA

NU
C

Se folosete pentru indicarea


unei decizii ntr-un algoritm.
Indeplinirea sau nu a condiiei
C duce la continuarea pe
ramura DA, respectiv NU

Toate blocurile funcionale se leag


prin arce orientate dup sensul de
parcurgere a algoritmului

Variabile

Operatori matematici:

Constante

+ - * /

Identificatori
Semnul de atribuire

:=

Operatori logici:
< > >= <= <>

Rezolvarea ecuaiei de gradul I

ax+b=0 x=-b/a, cnd a nu e zero


START

a,b

x:=-b/a

nu

CITETE

a=0

da

SCRIE
Ec. imp.

SCRIE
x=,x
Matlab, initiere

STOP

Gsirea valorii minime (maxime) a unui ir de numere


START

citete
n
i:=1
citete
a(i)

scrie
min
NU

i:=i+1
DA
DA

i<=n

i<=n
NU
min:=a(1)
i:=2

i:=i+1
DA
min<=a(i)

NU

min:=a(i)

STOP

Calculul sumei (produsului) valorilor unui ir de numere


START

citete
n
i:=1
citete
a(i)

scrie
s=,s
NU

i:=i+1
DA
DA

i<=n

i<=n
NU

i:=i+1

s:=0
i:=1

s:=s+a(i)

STOP

Ordonarea valorilor unui ir de numere


START

citete
n
i:=1
citete
a(i)

NU

DA

scrie
ordonare
gata

STOP

NU

i:=i+1
DA
DA

s=0

i<=n-1

i<=n
NU
s:=0
i:=1

i:=i+1
S:=1

DA
a(i)<=a(i+1)

NU

t:=a(i)

a(i):=a(i+1)

a(i+1):=t

Cutarea secvenial a unei valori ntr-un ir de numere


START

citete
v, n
i:=1
citete
a(i)

scrie
val. nu e n ir
NU

i:=i+1
DA
DA

i<=n

i<=n
NU

i:=i+1
NU

i:=1

v = a(i)

DA

scrie
val. gsit

STOP

Cutarea binar a unei valori ntr-un ir de numere


START

citete
v, n
NU
i:=1
citete
a(i)

DA

j=1 sau
i=n

scrie
val. nu e n ir

i:=k
NU

i:=i+1
v < a(k)
DA

i<=n
NU

DA

NU
v = a(k)
a(i)

i:=1
j:=n

j:=k

k:=INT ((i+j)/2)

DA

scrie
val. gsit, k

STOP

Elemente de programare structurat


Programarea structurat are ca idee fundamental
proiectarea de la nceput a programului n aa fel nct acesta s
prezinte o structur bine determinat, simpl i clar, adecvat
unei analize eficiente a corectitudinii programului.
Structurile cu ajutorul crora se poate ntocmi n acest fel un
program sunt:
secvena
decizia
selecia

ciclul cu test
iniial
ciclul cu test
final

SECVENA

DECIZIA

s1
DA

NU

s2
...
s1
sn

SELECIA

s1

s2

.....

sn

s2

CICLU CU TEST INIIAL

CICLU CU TEST FINAL

DA

NU

c
NU

DA