Sunteți pe pagina 1din 73

s.l.dr.ing.

Ciprian-Bogdan Chirila
chirila@cs.upt.ro
http://www.cs.upt.ro/~chirila
ALGORITMI, SCHEME
LOGICE SI
PSEUDOCOD
Structura cursului
Notiunea de algoritm
Operatii de baza
Structuri de control de baza
Notiunea de algoritm
provine din limba arab
vine de la numele matematicianului i astrologului arab
Al-Khowarizmi care a trit n secolul IX
un tipar de gndire pentru rezolvarea unei probleme
intr-un numar finit de pasi
un mod de gndire adic gndirea algoritmic
Exemplu de algoritm
Pasii calculul mediei artimetice a dou numere sunt:
1 - start;
2 - citete primul numr;
3 - citete al doilea numr;
4 - calculeaz suma lor;
5 - mparte rezultatul la 2;
6 - afieaz rezultatul calculat;
7 - stop.
Moduri de exprimare a algoritmilor
Limbaj natural
fraze coerente in limba romana care permit obtinerea unei
solutii pentru o problema data.
Scheme logice
diagrame de blocuri
Pseudocod
propozitii scurte
cu cuvinte cheie predefinite
exprimate in engleza sau romana
Schemele logice
Schemele logice sunt notaii grafice formate din blocuri
legate ntre ele prin sgei
O schem logic descrie grafic paii unui algoritm
Totodat ea specific prelucrrile care se execut
asupra datelor
Datele din schemele logice
variabile
sunt zone de memorie care i schimb valoarea i care se
caracterizeaz printr-un nume
numele poate fi format dintr-o niruire de
litere mari
litere mici
cifre
semnul underscore _
numele unei variabile ncepe n mod obligatoriu cu liter
exemple:
Aria
aria
perimetru
delta
Datele din schemele logice
constante explicite
zone de memorie cu valori fixe, dar fr nume
apar in textul schemei in atribuirea i=1
constante simbolice
zone de memorie cu valori fixe i cu nume
de exemplu in PI*r*r
evident ca ele trebuiesc definite undeva
Operatii de baza - blocurile
Blocul de start
Blocul de stop
Blocul de citire
Blocul de scriere
Blocul de atribuire
Blocul de decizie
Orientarea blocurilor
Curg pe pagina de sus in jos
Se dezvolta arborescent
Sunt legate intre ele prin sageti directionale
Conectori de pagina
leaga blocuri aflate pe aceeasi foaie de hartie
cerculete cu numere in ele
Conectori intre pagini
leaga blocuri aflate pe foi de hartie diferite
sagetute pline cu numere in ele
Blocurile de start
este unic in cadrul unei scheme logice
reprezinta punctul de pornire al schemei
are forma ovala
scrie in el cuvantul predefinit start
Blocul de stop
este unic in cadrul unei scheme logice
trebuie atins intr-un numar finit de pasi
Blocul de intrare
se mai numeste si bloc de citire
opreste executia unui program
citeste de la tastatura valori pe care le stocheaza in
variabile
tastatura dispozitiv de intrare
este simbolizat printr-un trapez cu baza mare sus
Blocul de intrare
Tipuri de variabile ce pot fi cititte
Numere intregi
1, 77, 25
Numere reale
1.5, 6.7
Siruri de caractere
se citesc toate impreuna
nota de la UPC este
am luat examenul la UPC cu nota
Exemple de utilizare
citeste de la tastatura variabile simple x,y,z in ordine
citeste de la tastatura elementul a[i] al unui sir sau
tablou unidimensional
citeste de la tastatura elementul a[i][j] care este
elementul unei matrici
i reprezinta linia, iar j coloana elementului citit
Tablourile si matricile se citesc element cu element!!!
Blocul de iesire
Se mai numeste si bloc de scriere
Are ca efect afisarea valorilor unor variabile pe ecran
Ecranul - dispozitiv de iesire
Reprezentat printr-un trapez cu baza mare jos
Exemple de utilizare
Afiseaza variabilele simple x,y,z
Afiseaza elementul a[i] al sirului a
Afiseaza a[i][j] care este
elementul unei matrici a
i reprezinta linia, iar j coloana elementului afisat
Tablourile si matricile se afiseaza element cu element!!!
Blocul de atribuire
are rolul de a da valori noi unor variabile
valorile anterioare ale acelor variabile se vor pierde
unele atribuiri se pot folosi de valorile vechi ale
variabilei ce primete noua valoare
De exemplu in i=i+1
inseamna ca noul i va fi egal cu vechiul i plus o unitate
daca i avea valoarea 7 inainte de atribuire atunci dupa
atribuire i va avea valoarea 8
este simbolizat prin dreptunghi
Componentele unei atribuiri
in partea stng a semnului egal al unei atribuiri se afl
obligatoriu o variabila ce va primi noua valoare
n partea dreapt a semnului egal se afl
o expresie care va fi evaluat iar valoarea rezultat se
atribuie variabilei
Exemplu de utilizare
i=i+1
a[i]=7.5
elementul al i-lea din sirul de reale devine egal cu 7.5
a[i][j]=70
elementul de pe linia i si coloana j devine 70
s=upc
variabila s ia valoarea sirului de caractere upc
Blocul de decizie
din puncte de vedere grafic este reprezentat printr-un
romb
din el pot iei n orice direcii dou sgei
corespunztoare celor dou ci de execuie a
algoritmului
Blocul de decizie
are rolul de a ramifica cursul de execuie ale unui
algoritm
algoritmul se va executa dup acest bloc doar pe una
din ramurile sale
fie pe ramura cu DA
fie pe ramura cu NU
decizia de a alege o ramur sau pe cealalt se face pe
baza evalurii condiiei din bloc
Conditia unui bloc de decizie
o condiie este o expresie matematic care
dac este evaluat la valoarea zero se consider fals
dac e evaluat la orice alt valoare diferit de zero se
consider adevrat
spre exemplu
7, -1, 22, 107 se consider toate valori adevrate
o (zero) se consider fals
Conditia unui bloc de decizie
Pentru exprimarea conditiei se pot folosi operatori
matematici
Relationali
Mai mic <, Mai mare >
Mai mic sau egal <=, Mai mare sau egal >=,
egal==, diferit!=
Logici
SI &&, SAU ||
Paranteze pentru expresii logice complexe
Rezultatul trebuie sa fie boolean adica adevarat sau fals
Exemple de utilizare
Exemple de utilizare
Structuri de control
Secventa
Selectia
Ciclul cu test initial
Ciclul cu test final
Ciclul cu contor
Secventa
Secventa
cea mai simpl structur de control
este o notatie abstracta folosita pentru a defini alte
structuri de control
nu se foloseste direct in schemele logice
presupune execuia unui ir ordonat de operaii de baz
din cele prezentate anterior
de exemplu o secven poate cuprinde
o citire
dou atribuiri
o decizie
din punct de vedere grafic secvena este reprezentat
printr-un dreptunghi marcat pe margini cu dou linii
verticale
Selectia
Selectia
are rolul de a selecta o secven din dou pentru execuie n
funcie de valoarea condiiei
conine
un bloc de selecie
cele dou secvene ce se execut atunci cand condiia evaluat
este adevrat respectiv fals
Diferena ntre un bloc de selecie i o structur de selecie
este aceea c o structur de selecie totdeauna va include un bloc
de selecie
adic blocul de selecie este parte component a structurii de
selecie pe lng cele dou secvene
Din punct de vedere grafic structura de control nu implic
vre-un element grafic nou deoarece este reprezentat prin
elementele grafice corespunztoare blocului de decizie
Selectia cu o singura secventa
Ciclul cu test initial
Ciclul cu test intial
este format dintr-o
condiie
secven
conectate ca in figura
mpreun cu secvena i selecia pot fi folosite pentru a
scrie orice algoritm
Functionare
ct timp condiia este adevrat
se va executa secvena n mod repetat
reamintim c secvena reprezint un ir ordonat de
operaii de baz
Reprezentare grafica
nu apar forme noi
apar blocurile corespunztoare
blocului decizional
secvena
sunt aranjate astfel nct
prima dat s se execute condiia
apoi dac este adevrat, pe ramura DA s avem secvena
pe urm s revenim n punctul iniial unde evalum condiia
din nou
procesul se repeta
putem spune c aranjamentul blocurilor formeaz o
bucl
Ciclul cu test intial
Scopul unei astfel de construii este:
s avem o condiie adevrat cnd traversm iniial blocul
condiional
se execut secvena care are rolul de a modifica variabilele
condiiei
dup un numr finit de treceri condiia trebuie s devin fals
se blocheaza astfel execuia secvenei
se continua cu rularea schemei logice prin blocurile care ar urma
mai jos
Ciclul cu test intial
dac condiia este fals la prima trecere prin blocul
decizional
atunci secvena nu va ajunge s fie executat niciodat
dac condiia este tot timpul adevrat
algoritmul se va bloca ntr-o bucl infinit, fr a mai putea
ajunge vreodat la blocul de stop
Ciclul cu test final
Ciclul cu test final
Structura de control ciclu cu test final este format dintr-
o secven i o condiie organizate n aceast ordine ca
n figura
Aceast structur este considerat a fi una derivat din
structura de control ciclu cu test iniial.
Din punct de vedere al funcionrii structura se
comport astfel:
se execut secvena
dup aceea se evalueaz condiia
dac condiia este adevrat se merge din nou i se execut
secvena
Ciclul cu test final
Din punct de vedere grafic nu apar elemente noi
Sunt aceleasi elemente exact ca n cazul structurii de
control cu test initial
aranjamentul blocurilor legat prin sgei este fcut de
asemenea natur nct
prima s fie secvena
dup ea s fie plasat condiia.
evident c apare i fenomenul de bucl pe ramura DA a
condiiei care ne conduce din nou la secven cnd
valoarea logic din condiie este adevrat
Ciclul cu test final
Se poate observa c aceast structur va permite
execuia secvenei cel puin o dat indiferent de ce
valoarea logic conine condiia
nu este strict necesar
orice algoritm se poate concepe folosind numai
structuri de control ciclu cu test iniial
n practic sunt situaii cnd structura cu test final ofer
o soluie mai elegant din punct de vedere al concepiei
algoritmului
Ciclu cu contor
Ciclu cu contor
structura de control ciclu cu contor este una mai
complex
se bazeaz pe un contor care
primete o valoare iniial
parcurge toate valorile unui interval continu
pn se atinge o valoare final
se executa la fiecare pas o aceeai secven
Ciclu cu contor
Primul bloc este unul de atribuire care are rolul de a
iniializa contorul cu o valoare iniial
Apoi se poate observa c urmeaz un bloc de decizie
care verific dac contorul este mai mic dect valoarea
final
n caz afirmativ se merge pe ramura DA i se execut
secvena
Reamintim ca secvena poate conine o subschema format
din blocuri pentru a face diverse calcule
Ciclu cu contor
Dup secven avem un bloc de atribuire care
incrementeaz sau altfel spus adun la valoarea
contorului valoarea unui pas.
Acest pas poate s fie un numr pozitiv sau un numr
negativ, ntreg sau zecimal.
Dac pasul este pozitiv nseamn c valoarea contorului va
crete la fiecare trecere prin blocul de incrementare.
Evident c pentru ca o astfel de structur de control s
funcioneze trebuie ca valoarea iniial s fie mai mic dect
valoarea final.
Dac pasul este negativ atunci contorul va descrete i e
recomandat ca valoarea iniial s fie mai mare ca cea final.
Ciclu cu contor
Dac n blocul decizional contorul a atins valoarea final
se iese cu execuia pe ramura NU de unde se poate
continua cu alte blocuri ale algoritmului.
Suma a doua numere
Citim primul numar de
la tastatura
Citim al 2-lea numar
de la tastatura
Calculam suma celor
doua numere
Afisam pe ecran suma
calculata
citeste a
citeste b
s=a+b
scrie s
Aria unui dreptunghi
Citim lungimea de la
tastatura
Citim latimea de la
tastatura
Calculam aria ca fiind
egala cu lungimea
inmultita cu latimea
Afisam pe ecran aria
calculata
citeste lung
citeste lat
aria=lung*lat
scrie aria
Volumul unui cilindru
Citim raza bazei de la
tastatura
Citim inaltimea de la
tastatura
Calculam volumul ca fiind
produs intre 3.14, raza la
patrat si inaltimea
Afisam pe ecran volumul
calculat
citeste r
citeste h
a=PI*r*r
v=a*h
scrie v
Functia modul
Citim un numar de la
tastatura
Daca numarul este
pozitiv
Atunci modulul este
egal cu numarul
Altfel modulul este
egal cu numarul
negat
Afisam pe ecran
modulul numarului
citeste x
daca x>0
atunci m=x
altfel m=-x
scrie m
Functia signum
Citimun numar de la
tastatura
Daca numarul este
pozitiv
atunci signumeste egal
cu 1
altfel daca numarul este
nul
atunci signumeste zero
altfel signumeste -1
Afisampe ecran functia
signum
citeste x
daca x>0
atunci s=1
altfel
daca x==0
atunci s=0
altfel s=-1
scrie m
Ce este un sir ?
sir = secventa de elemente de acelasi tip
se mai numeste si
vector
tablou unidimensional
accesul la un element se face prin
numele sirului
index - orice expresie matematica, incepe de la zero, se pune intre
paranteze drepte
exemple: a[0], b[7], c[i+j],d[a[0]]
un sir de 10 elemente are indecsi de la 0 la 9 inclusiv
operatii
citire x=a[0], y=a[0]+b[7]
atribuire a[0]=1, a[7]=a[0], a[i+j]=c[i]
citeste n
i=0
cat timp i<n
citeste a[i]
i=i+1
sfarsit cat timp
Citirea unui sir de la tastatura
Citirea si afisarea unui sir
citeste n
i=0
cat timp i<n
citeste a[i]
i=i+1
sfarsit cat timp
i=0
cat timp i<n
afiseaza a[i]
i=i+1
sfarsit cat timp
Suma a doi vectori (siruri)
Citim vectorul a element cu element
Citim vectorul b element cu element
Calculam vectorul c pe elemente
Fiecare element este egala cu suma elementelor
corespondente din a si b
c[0]=a[0]+b[0]
c[1]=a[1]+b[1]

c[n-1]=a[n-1]+b[n-1]
Deci c[i]=a[i]+b[i] pt fiecare i=0,n-1
Afisam vectorul c, anterior calculat, element cu element
Suma a doi vectori (siruri)
Suma a doi vectori (siruri)
citeste n
i=0
cat timp i<n
citeste a[i]
i=i+1
sfarsit cat timp
i=0
cat timp i<n
citeste b[i]
i=i+1
sfarsit cat timp
i=0
cat timp i<n
c[i]=a[i]+b[i]
i=i+1
sfarsit cat timp
i=0
cat timp i<n
afiseaza c[i]
i=i+1
sfarsit cat timp
Aflarea minimului dintr-un sir
Se citesc elementele vectorului
Se initializeaza minimul cu primul element
Se compara minimul cu toate elementele pe rand
Daca cumva vre-un element este mai mic decat minimul
atunci minimul ia valoarea acelui element
Aflarea minimului dintr-un sir
a
min=10
La pasul i=1 a[1]<min ? 5<10 ? da! deci min=5
La pasul i=2 a[2]<min ? 4<5 ? da! deci min=4
La pasul i=3 a[3]<min ? 3<4 ? da! deci min=3
La pasul i=4 a[4]<min ? 11<3 ? nu!
La pasul i=5 a[5]<min ? 12<3 ? nu!
La pasul i=6 a[6]<min ? 88<3 ? nu!
La pasul i=7 a[7]<min ? 90<3 ? nu!
La pasul i=8 a[8]<min ? 2<3 ? da! deci min=2
La pasul i=9 a[9]<min ? 100<2 ? nu!
0 1 2 3 4 5 6 7 8 9
10 5 4 3 11 12 88 90 2 100
Aflarea minimului dintr-un sir
Aflarea minimului dintr-un sir
citeste n
i=0
cat timp i<n
citeste a[i]
i=i+1
sfarsit cat timp
min=a[0]
i=0
cat timp i<n
daca a[i]<min atunci min=a[i]
sfarsit cat timp
afiseaza min
Aflarea maximului dintr-un sir
ce se schimba la algoritmul anterior ?
tema de casa
Ordonarea unui sir prin metoda bulelor
Prima trecere
10 7 5 4 12 8
10 7 5 4 12 8
7 10 5 4 12 8
7 5 10 4 12 8
7 5 4 10 12 8
7 5 4 10 12 8
7 5 4 10 8 12
4 interschimbari
Ordonarea unui sir prin metoda bulelor
A doua trecere
7 5 4 10 8 12
5 7 4 10 8 12
5 4 7 10 8 12
5 4 7 10 8 12
5 4 7 8 10 12
3 interschimbari
Ordonarea unui sir prin metoda bulelor
A treia trecere
5 4 7 8 10 12
4 5 7 8 10 12
4 5 7 8 10 12
4 5 7 8 10 12
4 5 7 8 10 12
1 interschimbare
Ordonarea unui sir prin metoda bulelor
A patra trecere
4 5 7 8 10 12
4 5 7 8 10 12
4 5 7 8 10 12
4 5 7 8 10 12
4 5 7 8 10 12
0 zero interschimbari
Ordonarea unui sir prin metoda bulelor
Ordonarea unui sir prin metoda bulelor
citeste n
i=0
cat timp i<n
citeste a[i]
i=i+1
sfarsit cat timp
Ordonarea unui sir prin metoda bulelor
executa
ni=0
i=0
cat timp i<n-1
daca a[i]>a[i+1]
atunci
temp=a[i]
a[i]=a[i+1]
a[i+1]=temp
ni=ni+1
i=i+1
sfarsit cat timp
cat timp ni!=0
Ordonarea unui sir prin metoda bulelor
citeste n
i=0
cat timp i<n
afiseaza a[i]
i=i+1
sfarsit cat timp
Ce este o matrice ?
matrice = secventa de elemente de acelasi tip grupate pe
doua dimensiuni
se mai numeste si
tablou bidimensional
accesul la un element se face prin
numele matricii
index de linie, de coloana
incep de la zero, se pun intre paranteze drepte
prima linia, a doua coloana
exemple: a[0][0], b[7][7], c[i+j][i-j]
indecsii incep de la 0
operatii
citire x=a[0][0], y=a[0][0]+b[7][8]
atribuire a[0][0]=1, a[7][8]=a[0][0]
Citirea unei matrici
citeste m
citeste n
i=0
cat timp i<m
j=0
cat timp j<n
citeste a[i][j]
j=j+1
sfarsit cat timp
i=i+1
sfarsit cat timp