Documente Academic
Documente Profesional
Documente Cultură
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 scris în
pseudocod poate fi cu ușurință “tradus” în limbaj de programare de către
un informatician.
Blocul de start
Este unic din 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
Blocul de ieșire
Pentru afișarea pe monitor sau la imprimantă a valorilor unei variabile
sau a unei expresii, se folosește instrucțiunea:
scrie variabile
scrie expresie
Acestei operațiuni îi corespunde în schema logică blocul de ieșire.
Exemple de utilizare
Blocul de atribuire
Blocul de atribuire are rolul de a atribui valori noi unor variabile.
Blocul de decizie
Acest bloc presupune continuarea operațiilor pe două căi posibile în
funcție de îndeplinirea unei condiții.
Secvența
Este reprezentată grafic prin următorul simbol
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.
In pseudocod această structură se descrie în modul următor:
dacă condiție
atunci {
secvența 1
}
altfel {
secvența 2
}
dacă condiție
atunci{
secvență
}
In pseudocod:
DA
NU
In pseudocod:
repetă {
Secvență
}
cât timp condiție (Do – While)
Ciclul cu contor
Execuția unui ciclu cu contor se bazează pe un contor i care, la intrarea
în ciclu primește o valoare inițială n1 și apoi, cu pasul de creștere n3, se
parcurg toate valorile unui interval definit, 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 pasului 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. 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 este necesar ca
valoarea inițială să fie mai mare decât cea finală.
In pseudocod:
i = m1
prelucrări
i = i + m3
i ≤ m2
DA
NU
Exemple de algoritmi
1. Suma a două numere
Algoritmul care rezolvă această problemă este următorul:
- Se citește de la tastatura primul număr;
- Se citește de la tastatura al doilea număr;
- Se calculează suma celor două numere;
- Se afișează pe ecranul monitorului rezultatul.
Pseudocodul corespunzător acestui algoritm este:
citește a
citește b
s=a+b
scrie s
Pseudocodul
citește a
citește i
s=a*i/2
scrie s
3. Funcția modul
Algoritmul
- Se citește un număr ce la tastatură;
- Dacă numărul este mai mare decât zero
- Atunci modulul este egal cu numărul;
- Altfel modulul este egal cu numărul cu semnul schimbat;
- Se afișează numărul;
Pseudocod:
citește x
daca x > 0
atunci m = x
altfel m = - x
scrie m
Schema logică:
Schema logică:
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
nu 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 indexi cuprinși între valoarea
0 și 9.
Pseudocodul:
citește n
pentru i = 0, n - 1
{
citește a[i]
}
În practică, pentru citirea sau scrierea unui șir se utilizează scrierea
prescurtată care are corespondent și în unele limbaje de
programare evoluate
citește (a[i], i = 0, n-1)
citește n
citește (a[i], i=0, n-1)
citește (b[i], i=0, n-1)
pentru i = 0, n-1
{
c[i] = a[i] + b[i]
}
Scrie (c[i], i = 0, n-1)
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
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
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
}
cât timp ni != 0 (nu este egal)
scrie (a[i], i = 0, n-1)
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. De 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.
Pentru citirea sau scrierea unei matrice se utilizează, de obicei,
următoarea formă mai simplă:
citește ((a[i][j], j = 0, m-1), i = 0, n-1)
sau
scrie ((a[i][j], j = 0, m-1), i = 0, n-1)
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
citește ((a[i][j], i = 0,n-1), j = 0,m-1)
citește ((b[i][j], i = 0,n-1), j = 0,m-1)
pentru i = 0, n-1
{
pentru j = 0, m-1
{
c[i][j] = a[i][j] + b[i][j]
}
}
scrie ((c[i][j], i = 0,n-1), j = 0,m-1)
citește n, m, p
citește ((a[i][j], i = 0,n-1), j = 0,p-1)
citește ((b[i][j], i = 0,p-1), j = 0,m-1)
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]
}
}
}
scrie ((c[i][j], i = 0,n-1), j = 0,m-1)
Schema logică a zonei care calculează produsul scalar al liniei i cu
coloana j este prezentată mai jos.
c[i][j] = 0
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.
Schela logică a structurii de selecție.
s1 s2 ... sn s
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
Se observă că algoritmul propus nu ține seama de posibilitatea ca, prin
împărțirea succesivă a intervalului, să se ajungă, în mod întâmplător,
chiar la valoarea exactă a soluției căutate.