1. Obiectele cu care lucrează algoritmii
Constantele
Constantele sunt date ale căror valori nu se modifică pe parcursul execuţiei
algoritmului. Aceste constante pot fi, în funcţie de limbaj, numere întregi sau reale,
caractere şi şiruri de caractere, valori logice (adevărat şi fals).
Variabilele
Spre deosebire de constante, variabilele conţin date care se pot modifica pe
parcursul executării algoritmului. Ele se utilizează pentru a păstra datele de intrare
(datele iniţiale), rezultatele parţiale şi rezultatele finale ale algoritmului. Fiecărei
variabile i se asociază o locaţie (sau grup de locaţii) de memorie unde i se păstrează
aloarea. O variabilă este, de fapt, numele simbolic (identificatorul) unei locaţii din
memoria maşinii virtuale.
Nu trebuie să se confunde noţiunea de variabilă din algoritmi cu aceea din matematică:
într-un algoritm, o variabilă va fi întotdeauna o valoare, pe când în matematică ea
reprezintă o nedeterminată cu care se pot face operaţii fără să-i fie cunoscută
valoarea.
Variabilele pot fi naturale, întregi, reale, logice sau pot lua ca valori şiruri de caractere.
(Tipul variabilelor diferă de la un limbaj la altul). Ele se notează cu litere sau cuvinte
care să le sugereze semnificaţia (de exemplu: a, i, index, primulElement).
Expresii
Constantele şi variabilele pot să apară în expresii împreună cu operatorii uzuali
aritmetici, relaţionali sau logici. Notaţia operatorilor aritmetici este cea folosită în
matematică: +, -, *, / (pentru împărţire).Notaţia operatorilor logici:
• negaţia
• SAU
• ŞI
Notaţia operatorilor relaţionali: =, ≠, <, >, ≤, ≥. Constantele şi variabilele pot să apară
în expresii împreună cu operaţorii şi parantezele rotunde. Nu se vor folosi paranteze
pătrate.
În funcţie de tipul operanzilor şi cel al operatorilor, expresiile pot fi: aritmetice,
relaţionale sau logice.
a) O expresie aritmetică este o expresie care cuprinde: constante, variabile sau funcţii
aritmetice elementare, legate, eventual, prin operatori aritmetici.
b) O expresie relaţională este formată din două expresii aritmetice legate printrun
singur operator relaţional (de exemplu: b>0 sau a ≠ b). Valoarea de adevăr
(rezultatul) unei expresii relaţionale este adevă rat sau fals.
c) O expresie logică cuprinde constante, variabile sau expresii relaţionale legate prin
operatori logici. Rezultatul unei astfel de expresii este adevă rat sau fals. De exemplu:
(a ≠ 0) ŞI (b ≠ 0) este o expresie logică formată din două expresii relaţionale care
2. are valoarea adevă rat numai dacă atât a cât şi b au valori diferite de 0. Dacă a = 0 sau
b = 0 atunci expresia logică are valoarea fals.
În descrierea algoritmilor apar noduri de decizie, în cere trebuie să executăm o
operaţie sau alta în funcţie de îndeplinirea sau neîndeplinirea unei anumite condiţii.
Aceste condiţii care apar în algoritmi vor fi întotdeauna exprimate prin
expresiirelaţionale sau logice.
Operaţiile (instrucţiunile) de bază (elementare) care apar în algoritmi
În cele ce urmează vom nota cu var numele unei variabile generice din algoritm.
Instrucţiunile de bază pe care le poate executa maşina virtuală pe care sunt executaţi
algoritmii sunt:
– citirea: se înregistrează într-o anumită celulă de memorie (asociată unei variabile) o
valoare citită de la un dispozitiv de intrare (de exemplu tastatura (implicit) sau de pe
disc, dintr-un fişier). În urma acestei instrucţiuni de iniţializează variabila cu numele
simbolic indicat. Forma generală este:
citeşte var
De exemplu, citirea a trei variabile pe care le numim a, b, c:
citeşte a, b, c
– scrierea: din memorie se copie pe un dispozitiv de ieşire (ecranul monitorului
(implicit) sau un pe un disc, într-un fişier) valoarea variabilei al cărui nume este indicat
în instrucţiune. În urma acestei operaţii valoarea variabilei nu se şterge din memorie.
Operaţia de scriere are sens doar dacă variabila a fost anterior definită (există în
memorie o celulă asociată variabilei var care are înscrisă în ea valoarea
variabilei). Forma generală este:
scrie var
De exemplu:
scrie a
sau
scrie "Sistem incompatibil"
– atribuirea (înlocuirea), specificată prin ←. Forma generală este
v ← e;
unde v este un nume simbolic de variabilă, e este o expresie (o formulă, o regulă de
calcul care specifică un rezultat) alcătuită din variabile şi numere legate între ele prin
operatori aritmetici, logici, funcţii elementare şi paranteze. Se execută succesiunea
specificată de operaţii asupra valorilor unor celule ale memoriei (e), iar rezultatul se
depune într-o celulă de memorie, de asemenea specificată v.
3. Exemplu:
i ← i + 1;
A ← B;
r ← m % n; restul împărţirii lui m la n.
O variabilă se poate defini fie prin operaţia de citire, fie prin operaţia de atribuire;
operaţiile aritmetice, logice şi de scriere au sens doar pentru variabilele ce au fost
definite anterior. Când se construieşte un algoritm, trebuie avut grijă ca toate variabilele
să fie definite. Nu se vor scrie instrucţiuni în care figurează variabile care nu au fost
definite anterior.
– decizia. Este operaţia prin care se verifică o condiţie a cărei valoare de adevăr
determină ramificarea algoritmului; în cazul în care condiţia este adevărată
algoritmul se continuă cu o anumită operaţie (instrucţiune), în caz contrar cu o alta.
Reprezentarea algoritmilor prin intermediul schemelor logice
Simboluri folosite
Reprezentarea grafică bidimensională a unui algoritm cu ajutorul unor simbolur
speciale se numeşte schemă logică program sau schemă logică (organigramă). Pentru
reprezentarea schemelor logice au fost stabilite anumite simboluri geometrice care
sugerează prin forma lor diferitele operaţii care trebuie executate şi ordinea de
execuţie. Ea reprezintă în acelaşi timp şi o imagine a fluxului de informaţii care există
atunci când calculatorul execută programul bazat pe algoritmul descris. Schemele
logice au fost inventate de Herman Goldstine (S.U.A.) în 1946.
Alcătuirea schemei logice permite ca programatorul să înţeleagă logica programului, să
realizeze modularizarea programului (prin împărţirea programului în părţi mai mici şi
mai detaliate), să verifice îndeplinirea tuturor condiţiilor posibile din program, să
traducă algoritmul într-un limbaj de programare (de exemplu în C).
Simbolurile folosite la construirea schemelor logice se pot împărţi în mai multe
categorii:
a. Simbolul linie ş i vârf de să geată.
Acesta simbolizează direcţia fluxului de informaţie în calculator şi succesiunea
diferitelor operaţii. Liniile de flux se pot încrucişa. Liniile care se încrucişează nu
înseamnă că sunt conectate. Dacă ele sunt conectate trebuie să apară vârfuri de săgeţi
4. lângă punctul de joncţiune pentru a marca conexiunea. Se reprezintă printr-unsegment
de dreaptă de orice lungime care trebuie să lege alte două simboluri. Direcţia normală
a fluxului este de la stânga la dreapta şi de sus în jos. Când direcţia fluxului este de
sens opus direcţiei normale se folosesc vârfuri de săgeată. Pentru mai multă claritate
mulţi programatori folosesc vârfurile de săgeată în toate cazurile.
b. Simbolul proces
Reprezintă execuţia unei operaţii sau a unui grup de operaţii în urma căreia se schimbă
valoarea, forma sau localizarea informaţiei. Operaţiile de prelucrare includ operaţii
aritmetice, operaţii logice sau mutarea datelor dintr-o zonă a memoriei în alta. Forma
acestui simbol este un dreptunghi cu raportul de formă 2/3.
c. Simboluri de intrare – ieş ire
reprezintă funcţia generală de intrare – ieşire, adică de introducere a informaţiei în
calculator pentru prelucrare (intrare) şi de extragere a informaţiei prelucrate (ieşire).
Arată punctele de intrare a datelor şi de ieşire a rezultatelor. Mediul suport de intrare
sau de ieşire nu este specificat.
d. Simboluri terminal
care reprezintă începutul, sfârşitul programului(a) sau a unei proceduri (funcţii) (b) sau
un punct de întrerupere sau de întârziere într-un program. Orice schemă logică trebuie
să înceapă cu un simbol terminal START şi să se termine cu un simbol terminal STOP.
5. (a) Început şi sfârşit program (b) Început şi sfârşit funcţie
e. Simbolul conector
Se foloseşte pentru a reprezenta o linie continuă când folosirea liniei continue este
limitată de dimensiunea hârtiei sau din considerente de estetică ale schemei logice.
Pentru a identifica conectorii de intrare şi de ieşire se folosesc simboluri de identificare
– litere sau cifre. Astfel conectorii reprezintă un mijloc elegant de a lega două puncte
ale schemei logice fără a folosi liniile. O altă funcţie a conectorilor este aceea că permit
reprezentarea unei scheme logice pe mai multe pagini.
(a) Conector pe pagină (b) Conectori pentru scheme logice
reprezentate pe mai multe pagini
f. Simbolul proces predefinit (procedura sau funcţ ia)
Se foloseşte pentru a reprezenta una sau mai multe operaţii specificate în detaliu în
altă parte (procedură, funcţie, o altă schemă logică).
g. Simbolul decizie.
Se foloseşte pentru a reprezenta o decizie sau o operaţie de tip comutare ce determină
una sau mai multe alternative posibile. Simbolul decizie are o intrare şi două sau mai
multe ieşiri. Decizia este reprezentată printr-un romb în interiorul căruia se găseşte o
condiţie (simplă – formată dintr-o expresie relaţională sau compusă formată dintr-o
expresie logică). Valoarea de adevăr a unei condiţii este fie adevărat (şi algoritmul se
continuă pe ramura DA), fie fals (şi algoritmul se continuă pe ramura NU).
Exemplu
6. De pe dispozitivul de intrare (tastatura) se citesc trei numere întregi. Să se
afişeze valoarea celui mai mare număr dintre cele trei.
Analiza problemei
Datele de intrare sunt trei numere întregi (pe care le notăm de exemplu cu a, b şi c).
Pentru această problemă avem o singură dată de ieşire: valoarea cea mai mare dintre
cele trei.
Cum determinăm valoarea cea mai mare? Dacă trebuie să facem acest lucru
manual (fără ajutorul calculatorului) vom compara primele două numere şi apoi
valoarea cea mai mare dintre cele două o comparăm cu valoarea celui de al treilea
număr. Schema logică care ilustrează acest algoritm este dată în Figura 3a (cazul în
care nu folosim o subrutină – funcţie pentru calculul maximului) şi Figura 3b (cazul în
care pentru determinarea maximului folosim o funcţie).
7. Figura 3a. Schema logică pentru calculul maximului dintre 3 numere
(Varianta fără funcţii)
8. Figura 3b. Schema logică pentru calculul maximului dintre 3 numere
(Varianta cu funcţii)
Exerciţii:
1. Scrieţi schema logică a unui algoritm care este capabil să furnizeze soluţia ecuaţiei
de gradul I : ax+b=0, dacă se introduc valorile a,b şi c.
2. Scrieţi schema logică a unui algoritm care aranjează în ordine:
a) crescătoare;
b) descrescătoare
3 valori a, b şi c. Puteţi utiliza şi algoritmul de determinare a maximului prezentat mai
sus. Generalizaţi pentru n elemente.
3) Scrieţi un lagoritm care să calculeze n! Dacă se introduce o valoare n naturală.
4) Scrieţi un algoritm care să aranjeze în ordine alfabetică 3 nume.
Reprezentarea algoritmilor prin pseudocod
Pseudocodul este o schiţă a unui program scrisă intr-o astfel de formă încât
să poată fi convertit cu uşurinţă într-un program real. Pseudocodul nu poate fi
executat sau compilat şi nu există reguli stricte de formare sau de sintaxă. El este doar
un pas – dar un pas important – în producerea formei finale a programului. Principalul
avantaj al pseudocodului este acela că permite programatorului să se concentreze
asupra algoritmului fără a lua în consideraţie detaliile unui limbaj de programare
particular. De fapt, se poate scrie un algoritm în pseudocod fără a şti ce limbaj de
programare va fi folosit pentru implementarea finală a algoritmului.
9. Limbajul pseudocod este folosit în faza de proiectare a programelor pentru descrierea
algoritmilor; el este o alternativă la schemele logice. Ca şi acestea, pseudocodul
precizează fluxul de transmitere a informaţiei în program şi nu datele implicate în
algoritm. Limbajul pseudocod nu este un limbaj de programare.
Pseudocodul are numeroase variante, deosebindu-se de la proiectant la proiectant.
Toate variantele au însă ca trăsături comune utilizarea enunţurilor nestandard, precum
şi a operaţiilor prescrise de programarea structurată.
Pentru definirea unui limbaj pseudocod (ca şi pentru scheme logice) se defineşte o
maşină virtuală care poate interpreta comenzile date în pseudocod (Figura 1).
Instrucţiunile de bază sunt aceleaşi ca şi la schemele logice, numai că de această dată
nu le vom asocia simboluri grafice. În plus, în pseudocod avem şi enunţurile
nestandard cu forma generală:
text (l_var);
unde l_var este lista variabilelor de intrare (variabile ale căror valori, calculate anterior
sunt folosite pentru prelucrarea indicată în enunţ).
Un algoritm în pseudocod poate fi un:
1). Modul program cu sintaxa:
program
<secvenţă>
sf. Program
2). Modul funcţie cu sintaxa
funcţie nume_f(lista de parametri)
<secvenţă>;
sf. funcţie