Notiunea de Algoritm
Notiunea de Algoritm
Notiunea de Algoritm
Pseudocodul
Este un limbaj de nivel înalt cu ajutorul căruia pot fi descriși algoritmii.
Deși folosește convenții structurale asemănătoare cu cele ale unui limbaj
de programare, pseudocodul a fost creat pentru a fi înțeles și interpretat
de către oameni și nu de către calculatoare. Un program pseudocod
poate fi cu ușurință “tradus” în limbaj de programare de către un
informatician.
Schema logică
Schemele logice sunt notații grafice formate din blocuri legate între ele
prin săgeți, care indică ordinea de parcurgere a operațiilor.
Blocul de start
Este unic în cadrul unei scheme logice și reprezintă punctul de pornire al
schemei. In acesta se înscrie cuvântul predefinit start.
Blocul de stop
Este unic în cadrul unei scheme logice și trebuie atins într-un număr finit
de pași. In acesta se înscrie cuvântul predefinit stop
Blocul de intrare
Pentru citirea datelor, în pseudocod se folosește instrucțiunea:
citește variabile
Acestei operațiuni îi corespunde în schema logică blocul de intrare.
Exemple de utilizare
Exemple de utilizare
Blocul de atribuire
Acest bloc are rolul de a atribui valori noi unor variabile.
Exemplu:
a=b+c
Se aduna valorile din memorie a variabilelor b și c, iar valoarea găsită se
atribuie variabilei a.
Unele atribuiri se pot folosi de valorile anterioare ale variabilei ce
primește o nouă valoare.
Exemplu:
i=i+1
La valoarea din memoria a variabilei i se adună o unitate și valoarea
găsită se atribuie tot variabilei i. Astfel, dacă i avea înainte de execuția
acestei instrucțiuni valoarea 5, după execuție va avea valoarea 6.
Exemple de utilizare:
Blocul de decizie
Acest bloc presupune continuarea operațiilor pe două căi posibile, în
funcție de îndeplinirea unei condiții.
Exemple de utilizare
Structuri de control
Structurile de control sunt:
Secvența
Selecția
Ciclul cu test inițial
Ciclul cu test final
Ciclul cu contor
Să le luăm pe rând.
Secvența
Este reprezentată grafic prin următorul simbol
Exemplu în pseudocod:
citește b,c
a = b+c
d = a/2
scrie d
In exemplul considerat, cuvântul generic „prelucrări” a fost înlocuit de
operațiile prezentate mai sus.
Selecția
Selecția este o structură de control care poate avea una sau două ramuri.
Selecția cu două ramuri.
Această structură de comanda selectează una dintre cele două secvențe
în funcție de condiția din blocul de decizie.
dacă condiție
atunci {
secvența 1
}
altfel {
secvența 2
}
dacă condiție
atunci{
secvență
}
O secvență este executată în mod repetat cât timp condiția din blocul de
decizie este adevărată.
Această structură se execută în modul următor: se evaluează condiția.
Dacă aceasta este îndeplinită, se execută secvența, după care se
evaluează din nou condiția. Această situație se repetă cât timp condiția
este adevărată. Când condiția devine falsă se trece mai departe. Dacă,
de la bun început, condiția este falsă secvența nu va fi executată nici
măcar o dată.
NU
repetă {
secvență
}
cât timp condiție (Do – While)
Ciclul cu contor
Execuția unui ciclu cu contor se bazează pe un contor care, la intrarea în
ciclu primește o valoare inițială n1 și apoi, se parcurg toate valorile unui
interval definit, cu pasul de creștere n3, până ajunge la o valoare finală
n2. La fiecare pas se execută secvența indicată în corpul ciclului. Primul
bloc al structurii are rolul de a atribui contorului o valoare inițială.
Blocul de decizie, care urmează, verifică dacă contorul este mai mic
decât valoarea finală. În caz afirmativ se merge pe ramura DA și se
execută secvența.
După executarea operațiilor din secvență se întâlnește un bloc de
atribuire care adună la valoarea contorului i valoarea unui pas n3. Pasul
n3 poate să fie un număr pozitiv sau un număr negativ. Dacă pasul este
pozitiv înseamnă că valoarea contorului va crește la fiecare trecere prin
blocul de incrementare. 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 este recomandat
ca valoarea inițială să fie mai mare decât cea finală.
i = n1
secventa
i = i + n3
i ≤ n2
DA
NU
Exemple de algoritmi
1. Suma a două numere
Algoritmul care rezolvă această problemă este următorul:
citește a
citește b
s=a+b
scrie s
Pseudocodul
citește a
citește i
s=a*i/2
scrie s
4. Funcția signum
Deoarece algoritmul este evident îl vom exprima direct în
pseudocod.
citește x
dacă x > 0
atunci s = 1
altfel
{
dacă x == 0
atunci s = 0
altfel s = – 1
}
afișează s
Schema logică
Noțiunea de șir
Prin șir se înțelege o secvență de elemente de același tip. In
informatică se întâlnesc frecvent șiruri de caractere. Tot prin șiruri
sunt reprezentați vectorii utilizați în matematică.
Accesul la un element al unui șir se realizează prin numele șirului
urmat de un index, plasat între paranteze pătrate. Indexul poate fi
un număr întreg pozitiv începând cu valoarea 0 sau o expresie de
tip întreg.
Exemple: d[0], as[6], cx[i + j].
Un șir care conține 10 elemente are indecși cuprinși între valoarea
0 și 9.
Pseudocodul:
citește n
pentru i = 0, n - 1
{
citește a[i]
}
pentru i = 0, n - 1
{
citește b[i]
}
pentru i = 0, n-1
{
c[i] = a[i] + b[i]
}
pentru i = 0, n - 1
{
scrie c[i]
}
Citește n
(a[i], i = 0, n-1)
(b[i], i = 0, n-1)
i=0
i=i+1
DA
i≤n-1
NU
Scrie
(c[i], i= 0, n-1)
STOP
citește n
(a[i], i = 0, n-1)
(b[i], i = 0, n-1)
prod = 0
i=0
i=i+1
DA
i ≤ n -1
NU
Scrie
prod
STOP
Citește n
(a[i], i=0, n-1)
min = a[0]
i=0
DA
min > a[i] min = a[i]
NU
i=i+1
DA
i≤n-1
NU
Scrie
min
STOP
Citește n
(a[i], i=0, n-1)
ni = 0
i=0
aux = a[i]
DA
a[i] = a[i + 1]
a[i] > a[i+1] a[i + 1] = aux
ni = ni +1
NU
i=i+1
DA
i ≤ n-1
NU
DA
ni != 0
NU
Scrie
(a[i], i = 0, n-1)
STOP
Metoda bulelor
Să presupunem ca dorim ordonarea crescătoare a elementelor
unui șir.
Metoda bulelor se implementează prin parcurgerea șirului și, ori de
câte ori se întâlnesc două elemente care nu sunt în ordine corectă,
poziția acestora se inversează. Numărul de inversiuni ale
elementelor se contorizează. Se parcurge șirul de mai multe ori
până când, la o parcurgere completă nu se mai execută nici o
inversiune. In acest moment șirul este ordonat. Pentru
implementarea acestui algoritm se utilizează un ciclu cu test final
care numără câte inversiuni ni au fost efectuate la parcurgerea
șirului. Când ni este nul, înseamnă că șirul a fost ordonat și se iese
din ciclu.
In interiorul acestui ciclu se găsește un ciclu cu contor care
realizează parcurgerea șirului. Când două elemente ale șirului nu
sunt în ordine corectă, acestora li se schimbă locurile. De exemplu,
dacă două elemente consecutive a[i] și a[i + 1] nu sunt în ordine
corectă, adică a[i] > a[i + 1], pozițiile acestora trebuie inversate.
Pentru a realiza această operație se utilizează o variabilă auxiliară
aux. Secvența de inversare a pozițiilor este următoarea:
aux = a[i]
a[i] = a[i + 1]
a[i +1] = aux
Tablouri
Un tablou este o colecție ordonată de elemente de același tip. Un
tablou cu un singur indice se numește vector și acesta a fost tratat
anterior. Pentru reprezentarea matricelor din matematică se
utilizează tablouri cu doi indici.
Exemplu:
a[4][2] reprezintă elementul situat pe linia a patra și coloana a doua
a matricei a.
Pentru parcurgerea tuturor elementelor unei matrice se utilizează
două cicluri cu contor. In continuare este prezentată schema logică
pentru citirea unei matrice.
START
Citește n, m
i=0
j=0
Citește
a[i][j]
j=j+1
DA
j ≤ m-1
NU
i=i+1
DA
j ≤ n-1
NU
STOP
Citește n, m
((a[i][j],j=0,m-1),i=0,n-1)
((b[i][j],j=0,m-1),i=0,n-1)
i=0
j=0
j=j+1
DA
j ≤ m-1
NU
i=i+1
DA
j ≤ n-1
NU
Scrie
((c[i][j],i=0,n-1),j=0,m-1)
STOP
Pseudocodul
citește n, m
pentru i = 0, n-1
{
pentru j = 0, m-1
{
citește a[i][j]
}
}
pentru i = 0, n-1
{
pentru j = 0, m-1
{
citește b[i][j]
}
}
pentru i = 0, n-1
{
pentru j = 0, m-1
{
c[i][j] = a[i][j] + b[i][j]
}
}
pentru i = 0, n-1
{
pentru j = 0, m-1
{
scrie c[i][j] }
}
Pseudocodul.
citește n, m, p
Se citește matricea a
Se citește matricea b
pentru i = 0,n-1
{
pentru j = 0,m-1
{
c[i][j] = 0
pentru k = 0,p-1
{
c[i][j] = c[i][j] + a[i][k] * b[k][j]
}
}
}
Se scrie matricea c
k=0
k=k-1
DA
k≤p-1
NU
Structura de selecție
Atunci când algoritmul prevede posibilitatea continuării pe mai
multe căi posibile în funcție de valoarea unui parametru se
utilizează structura case.
Se dau o mulțime de valori v1, v2, …, vn care aparțin mulțimii V.
Indicele i poate lua una din valorile acestei mulțimi. In funcție de
această valoare algoritmul se continuă cu una din secvențele s1,
s2, …, sn. Dacă i nu aparține mulțimii V atunci se continuă cu
secvența s.
Schema logică a structurii de selecție.
s1 s2 ... sn s
f(x) = 0
y = f(x)
f(c’)
0 c’ c x
y = f(x)
f(a)
a c d b x
0
f(d)
f(b)
START
Citește
coeficienți f
a,b,eps
x = f(a)
d = (a + b) / 2
y = f(d)
a=d
b=d x*y>0 x=y
NU DA
DA
y > eps
NU
Scrie
d
STOP