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 trăit în secolul IX

• un tipar de gândire pentru rezolvarea unei probleme


intr-un numar finit de pasi

• un mod de gândire adică gândirea algoritmică


Exemplu de algoritm
• Pasii calculul mediei artimetice a două numere sunt:

• 1 - start;
• 2 - citeşte primul număr;
• 3 - citeşte al doilea număr;
• 4 - calculează suma lor;
• 5 - împarte rezultatul la 2;
• 6 - afişează 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 notaţii grafice formate din blocuri
legate între ele prin săgeţi

• O schemă logică descrie grafic paşii unui algoritm

• Totodată ea specifică prelucrările 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 înşiruire 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 fără 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 primeşte 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 stângă 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 ieşi în orice direcţii două săgeţi
corespunzătoare celor două căi de execuţie a
algoritmului
Blocul de decizie
• are rolul de a ramifica cursul de execuţie 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 evaluării condiţiei din bloc
Conditia unui bloc de decizie
• o condiţie 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ă adevărată
• spre exemplu
• 7, -1, 22, 107 se consideră toate valori adevărate
• 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 execuţia unui şir ordonat de operaţii de bază
din cele prezentate anterior
• de exemplu o secvenţă poate cuprinde
• o citire
• două atribuiri
• o decizie
• din punct de vedere grafic secvenţa este reprezentată
printr-un dreptunghi marcat pe margini cu două linii
verticale
Selectia
Selectia
• are rolul de a selecta o secvenţă din două pentru execuţie în
funcţie de valoarea condiţiei
• conţine
• un bloc de selecţie
• cele două secvenţe ce se execută atunci cand condiţia evaluată
este adevărată respectiv falsă
• Diferenţa între un bloc de selecţie şi o structură de selecţie
• este aceea că o structură de selecţie totdeauna va include un bloc
de selecţie
• adică blocul de selecţie este parte componentă a structurii de
selecţie pe lângă cele două secvenţe
• Din punct de vedere grafic structura de control nu implică
vre-un element grafic nou deoarece este reprezentată prin
elementele grafice corespunzătoare blocului de decizie
Selectia cu o singura secventa
Ciclul cu test initial
Ciclul cu test intial
• este formată dintr-o
• condiţie
• secvenţă
• conectate ca in figura
• împreună cu secvenţa şi selecţia pot fi folosite pentru a
scrie orice algoritm
Functionare
• cât timp condiţia este adevărată
• se va executa secvenţa în mod repetat

• reamintim că secvenţa reprezintă un şir ordonat de


operaţii de bază
Reprezentare grafica
• nu apar forme noi
• apar blocurile corespunzătoare
• blocului decizional
• secvenţa
• sunt aranjate astfel încât
• prima dată să se execute condiţia
• apoi dacă este adevărată, pe ramura DA să avem secvenţa
• pe urmă să revenim în punctul iniţial unde evaluăm condiţia
din nou
• procesul se repeta
• putem spune că aranjamentul blocurilor formează o
buclă
Ciclul cu test intial
• Scopul unei astfel de construţii este:
• să avem o condiţie adevărată când traversăm iniţial blocul
condiţional

• se execută secvenţa care are rolul de a modifica variabilele


condiţiei

• după un număr finit de treceri condiţia trebuie să devină falsă

• se blocheaza astfel execuţia secvenţei

• se continua cu rularea schemei logice prin blocurile care ar urma


mai jos
Ciclul cu test intial
• dacă condiţia este falsă la prima trecere prin blocul
decizional
• atunci secvenţa nu va ajunge să fie executată niciodată

• dacă condiţia este tot timpul adevărată


• algoritmul se va bloca într-o buclă infinită, fără 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 condiţie organizate în această ordine ca
în figura
• Această structură este considerată a fi una derivată din
structura de control ciclu cu test iniţial.
• Din punct de vedere al funcţionării structura se
comportă astfel:
• se execută secvenţa
• după aceea se evaluează condiţia
• dacă condiţia este adevărată se merge din nou şi se execută
secvenţa
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 săgeţi este făcut de
asemenea natură încât
• prima să fie secvenţa
• după ea să fie plasată condiţia.
• evident că apare şi fenomenul de buclă pe ramura DA a
condiţiei care ne conduce din nou la secvenţă când
valoarea logică din condiţie este adevărată
Ciclul cu test final
• Se poate observa că această structură va permite
execuţia secvenţei cel puţin o dată indiferent de ce
valoarea logică conţine condiţia

• nu este strict necesară

• orice algoritm se poate concepe folosind numai


structuri de control ciclu cu test iniţial

• în practică sunt situaţii când structura cu test final oferă


o soluţie mai elegantă din punct de vedere al concepţiei
algoritmului
Ciclu cu contor
Ciclu cu contor
• structura de control ciclu cu contor este una mai
complexă

• se bazează pe un contor care


• primeşte o valoare iniţială
• parcurge toate valorile unui interval continu
• până se atinge o valoare finală
• se executa la fiecare pas o aceeaşi secvenţă
Ciclu cu contor
• Primul bloc este unul de atribuire care are rolul de a
iniţializa contorul cu o valoare iniţială

• Apoi se poate observa că urmează un bloc de decizie


care verifică dacă contorul este mai mic decât valoarea
finală

• În caz afirmativ se merge pe ramura DA şi se execută


secvenţa
• Reamintim ca secvenţa poate conţine 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 număr pozitiv sau un număr
negativ, întreg sau zecimal.
• Dacă pasul este pozitiv înseamnă că valoarea contorului va
creşte la fiecare trecere prin blocul de incrementare.
• Evident că pentru ca o astfel de structură de control să
funcţioneze trebuie ca valoarea iniţială să fie mai mică decât
valoarea finală.
• Dacă pasul este negativ atunci contorul va descreşte şi e
recomandat ca valoarea iniţială să fie mai mare ca cea finală.
Ciclu cu contor
• Dacă în blocul decizional contorul a atins valoarea finală
se iese cu execuţia pe ramura NU de unde se poate
continua cu alte blocuri ale algoritmului.
Suma a doua numere
• Citim primul numar de citeste a
la tastatura citeste b
• Citim al 2-lea numar s=a+b
de la tastatura
scrie s
• Calculam suma celor
doua numere
• Afisam pe ecran suma
calculata
Aria unui dreptunghi
• Citim lungimea de la citeste lung
tastatura citeste lat
• Citim latimea de la aria=lung*lat
tastatura scrie aria
• Calculam aria ca fiind
egala cu lungimea
inmultita cu latimea
• Afisam pe ecran aria
calculata
Volumul unui cilindru
• Citim raza bazei de la citeste r
tastatura citeste h
• Citim inaltimea de la
tastatura
a=PI*r*r
• Calculam volumul ca fiind v=a*h
produs intre 3.14, raza la scrie v
patrat si inaltimea
• Afisam pe ecran volumul
calculat
Functia modul
• Citim un numar de la citeste x
tastatura daca x>0
• Daca numarul este atunci m=x
pozitiv altfel m=-x
scrie m
• Atunci modulul este
egal cu numarul
• Altfel modulul este
egal cu numarul
negat
• Afisam pe ecran
modulul numarului
Functia signum
• Citim un numar de la citeste x
tastatura daca x>0
• Daca numarul este atunci s=1
pozitiv altfel
• atunci signum este egal daca x==0
cu 1
atunci s=0
• altfel daca numarul este
altfel s=-1
nul
• atunci signum este zero scrie m
• altfel signum este -1
• 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 i=0
cat timp i<n cat timp i<n
citeste a[i] c[i]=a[i]+b[i]
i=i+1
i=i+1
sfarsit cat timp
sfarsit cat timp
i=0
i=0
cat timp i<n
cat timp i<n
citeste b[i]
i=i+1
afiseaza c[i]
sfarsit cat timp 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 0 1 2 3 4 5 6 7 8 9

• min=10 10 5 4 3 11 12 88 90 2 100

• 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!
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

S-ar putea să vă placă și