Sunteți pe pagina 1din 73

ALGORITMI, SCHEME LOGICE SI PSEUDOCOD

s.l.dr.ing.Ciprian-Bogdan Chirila chirila@cs.upt.ro http://www.cs.upt.ro/~chirila

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 dintro 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
Citim un numar de la tastatura Daca numarul este pozitiv atunci signum este egal cu 1 altfel daca numarul este nul
atunci signum este zero altfel signum este -1

citeste x daca x>0 atunci s=1 altfel daca x==0 atunci s=0 altfel s=-1 scrie m

Afisam pe ecran functia signum

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]

Citirea unui sir de la tastatura


citeste n i=0 cat timp i<n citeste a[i] i=i+1 sfarsit cat timp

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


0 1 2 3 4 5 6 a 10 5 4 3 11 12 88 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! 7 90 8 2 9 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