Documente Academic
Documente Profesional
Documente Cultură
Cuprins Pagina
Recapitulare 27
1
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
Un algoritm este un concept folosit pentru a desemna o procedură de calcul clară și bine
definită, constând dintr-un set finit de instrucțiuni complet ordonat în timp; procedura pornește
de la o anumită valoare sau un set de valori de intrare și produce într-un timp finit o anumită
valoare sau un set de valori, ca ieșire. Algoritmul exprimă logica completă a soluției de rezolvare
a unei probleme date.
Problemă
2
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
Termenul de "Algoritm" provine din numele matematicianului persan din secolul al IX-
lea Mohammed al-Khowarizmi: Al-Khowarizmi → Algorismus (în latină) → algoritm. Dar,
aceeași prezentare a regulilor precise pentru descrierea proceselor de calcul din aritmetică se
întâlnește și în celebra lucrare a lui Euclid, „Elementele” - un tratat de geometrie, alcătuit din 13
cărți. Într-o anecdotă scrisă la 800 de ani de la moartea lui Euclid se relatează că regele Ptolemeu
I, în încercarea de a studia această lucrare, l-a întrebat pe Euclid dacă nu ar exista o cale mai
ușoară ca să înțeleagă geometria, la care Euclid sever ar fi răspuns: " În geometrie nu există calea
regală !".
În cartea a VII-a din „Elemente” se regăsește de altfel primul și cel mai celebru algoritm
din istorie, Algoritmul lui Euclid pentru determinarea celui mai mare divizor comun a două
numere.
Proprietățile algoritmilor:
1. Exactitate : un algoritm trebuie să fie descris în mod clar și precis; la fiecare pas, operația
care urmează a fi executată este unic determinată, definită și realizabilă, astfel încât să nu existe
incertitudine.
2. Generalitate : se referă la două aspecte:
- gradul de generalitate a problemei rezolvate de acel algoritm: adesea, este mai ușor de a
concepe un algoritm pentru o problemă care este formulată în termeni mai generali;
- setul de date de intrare acceptat: algoritmul trebuie să rezolve fiecare instanță a problemei
respective; algoritmul obține date de ieșire pentru orice date de intrare corespunzătoare
problemei.
Mai mult, un algoritm poate fi reprezentat în mai multe moduri și pot exista mai mulți algoritmi
pentru rezolvarea aceleiași probleme.
3. Finitudine : un algoritm trebuie să conțină un număr finit de pași în execuția sa.
4. Simplitate : un algoritm mai simplu este mai ușor de înțeles și mai ușor de programat.
5. Eficiență : un algoritm trebuie să conțină operațiuni calculabile în mod eficient și trebuie
să ofere răspunsul corect la problema respectivă. Se poate remarca faptul că proprietatea de
"finitudine" este un caz special de "eficiență". Dacă o succesiune de etape nu este finită, atunci
ea nu poate fi nici eficientă.
În plus, algoritmii de rezolvare pentru o anumită problemă pot avea la bază idei diferite și
pot rezolva problema dată în timpi de calcul total diferiți sau pot utiliza mai multă sau mai puțină
memorie suplimentară.
3
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
► Etapa 1) Înțelegerea problemei: odată formulat enunțul problemei, clar și precis, trebuie
stabilite:
- datele de intrare și informațiile care trebuie obținute prin rezolvarea problemei;
Datele de intrare ale algoritmului definesc o instanță a problemei respective. Este foarte
important de precizat mulțimea instanțelor pentru care algoritmul va funcționa. Altfel, algoritmul
poate funcționa corect pentru majoritatea instanțelor, dar poate să eșueze pentru anumite date de
intrare (valori limită)
- care sunt condițiile concrete de rezolvare: sunt acestea suficiente sau insuficiente? sunt
redundante? sunt contradictorii?
- există informații care lipsesc, sau, dimpotrivă, nu sunt necesare?
► Etapa 2) Elaborarea unui plan (model) de rezolvare a problemei, stabilirea unei conexiuni
între datele și necunoscutele problemei pentru a dezvolta algoritmul corespunzător de rezolvare,
algoritm descris într-una dintre modalitățile de reprezentare algoritmică.
În acest scop se recomandă:
- identificarea unei probleme conexe, asemănătoare (atunci când este posibil) pentru a putea
vedea dacă se poate aplica aceeași tehnică de rezolvare;
- încercarea de a rezolva un caz special al problemei sau o problemă mai generală sau o parte a
problemei.
- împărțirea problemei în subprobleme mai mici și mai ușor de rezolvat: astfel, trebuie stabilit
printr-un proces de detaliere, de rafinări succesive, modul în care problema de rezolvat este
divizată astfel încât să poată fi rezolvată prin mai multe funcții și care vor fi taskurile executate
de fiecare funcție.
Numărul etapelor de detaliere depinde de natura problemei, dar grupul ISDR [4] definește un
proces general de rafinare de tip ”Top-Down”, cu patru nivele de detaliere:
- Nivelul conceptual sau abstract: se analizează modul de relaționare al datelor și operațiile care
trebuie executate cu datele.
4
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
5
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
- identificarea unei alte metode de găsire a soluției; în cazul în care există mai mulți algoritmi de
rezolvare, trebuie ales algoritmul cel mai eficient din punct de vedere al complexității calculului:
algoritmul cu cel mai redus timp de execuție și cel mai economic spațiu de memorie necesar.
(I) Schema logică - reprezintă grafic secvența de pași implicați în rezolvarea problemei.
Avantajele utilizării schemelor logice:
- se obține o bună vizualizare a structurii algoritmului;
- fiind independentă de limbaj, poate fi înțeleasă de toți programatorii de aplicații;
- permite definirea și testarea unor soluții alternative de rezolvare pentru problema dată;
- permite detectarea și corectarea erorilor logice înainte ca algoritmul să fie implementat într-un
limbaj de programare
Reguli de construire a schemei logice:
- diagrama se construiește de sus în jos (conform fluxului de operații) și de la stânga la dreapta;
- se evită intersectarea liniilor diagramei; se utilizează simbolurile de tip conectori.
Reprezentarea prin schemă logică a unui algoritm utilizează blocuri (operații) de bază
și/sau structuri de control (formate prin gruparea blocurilor de bază).
Blocuri de bază
Blocul de început/sfârșit – orice schemă logică începe cu un bloc de început și se termină cu un
bloc de sfârșit.
6
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
Conectorul logic – este utilizat pentru reunirea ramurilor de execuție ale algoritmului.
Conectorul de pagină – este utilizat atunci când schema logică trebuie continuată pe o altă
pagină. Conectorul conține o literă sau un număr care trebuie să fie identic cu cel de pe pagina
unde se continuă prelucrarea.
7
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
Structuri de control
Structurile de control sunt grupări de blocuri de bază ce apar frecvent în schemele logice
și pentru care sunt definite instrucțiuni specifice în limbajele de programare.
Structura secvențială (secvența) – grupează de obicei mai multe operații (instrucțiuni)
elementare (inițializări de variabile, prelucrări asupra datelor, tipărire a rezultatelor, etc.).
Obs: Pentru structura repetitivă condiționată anterior, condiția testată pentru repetarea secvenței
se scrie identic în pseudocod și în C++.
8
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
Structura repetitivă condiționată posterior (bucla/ciclul cu test final) – secvența (corpul buclei)
se execută repetitiv până când condiția devine adevărată. Spre deosebire de bucla cu test inițial,
în cazul buclei cu test final secvența se execută cel puțin o dată.
Obs: Pentru structura repetitivă condiționată posterior condiția testată pentru ieșirea din
buclă trebuie scrisă negat în C++ față de pseudocod. În pseudocod secvența se repetă până când
condiția devine adevărată, iar în C++ secvența se repetă atâta timp cât condiția este adevărată.
Pentru ca secvența să nu se repete la infinit, în cadrul acesteia trebuie modificate
variabilele ce sunt folosite în condiția testată pentru repetarea buclei astfel încât la un moment
dat să se poată realiza ieșirea din buclă.
Structura repetitivă (bucla/ciclul) cu contor – este derivată din structura repetitivă condiționată
anterior. Secvența se execută repetitiv de un număr prestabilit de ori controlat de valoarea
variabilei contor. Pentru ca repetarea să nu se facă la infinit, este necesară incrementarea
(decrementarea) variabilei contor cu valoarea pas (care trebuie să fie diferită de zero).
9
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
Structura decizională multiplă – este o structură de control derivată din structura alternativă –
permite ramificarea multiplă a execuției. Dacă nici una dintre condițiile testate nu a fost
îndeplinită, execuția este continuată în <secvența alternativă> dacă aceasta a fost specificată.
Obs: În C++ structura switch este puțin diferită față de celelalte structuri de control.
Valorile val_1 ... val_n sunt de fapt constante, secvențele de instrucțiuni nu sunt încadrate
de acolade și de asemenea pentru fiecare secvență în parte de obicei apare în final instrucțiunea
break;
Instrucțiunea switch evaluează variabila/expresia a și verifică daca aceasta este
echivalentă cu val_1, situație în care se execută secvența de instrucțiuni imediat următoare până
la instrucțiunea break. Când este întâlnită instrucțiunea break programul sare la sfârșitul
structurii switch. Dacă a nu este egală cu val_1, se trece la evaluarea cu val_2, și așa mai departe.
În final, dacă nici una dintre evaluări nu a fost adevărată, se execută instrucțiunile specificate
10
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
după default: și apoi se iese din structura switch. Eticheta default: și instrucțiunile scrise după
aceasta sunt opționale.
Dacă instrucțiunea break lipsește, se trece la execuția secvenței pentru val_2 (fără a se
mai verifica egalitatea), apoi la secvența pentru val_3 și așa mai departe (inclusiv secvența
pentru default) până la terminarea structurii sau până la prima instrucțiune break.
Instrucțiunea break poate fi folosită de asemenea în orice altă structură repetitivă pentru a
ieși din buclă fără a mai fi necesară respectarea condiției de ieșire din aceasta.
Operații cu date
11
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
- date reale: aceleași operații ca în cazul datelor întregi, cu rezultatul real în cazul operatorilor
aritmetici și logic în cazul operatorilor relaționali.
- date logice: disjuncția (۷ ) , conjuncția ( ۸) , negația (- )
- șiruri de caractere: concatenarea – rezultat de tip șir de caractere, comparațiile (bazate pe
ordinea lexicografică) – rezultat de tip logic.
- stive, cozi, ansamble: extragerea și respectiv introducerea unui element într-o stivă, coadă sau
ansamblu (x ⇐ A, x ⟹A) precum și verificarea dacă o stivă, coadă sau ansamblu este vid (A =
ø)
Cuvinte cheie: cuvinte din limba engleză care identifică un tip de date sau descriu o instrucțiune.
Instrucțiuni: Din punct de vedere al scrierii instrucțiunilor, o instrucțiune poate ocupa mai multe
rânduri, sau pe un rând pot fi scrise mai multe instrucțiuni. Instrucțiunile vor fi separate, între
ele, folosind caracterul ';'.
Instrucțiuni declarative: integer, real, bool, char, array, stack, queue, heap urmat de un șir de
variabile separate între ele prin virgulă, variabile pentru care indicăm că au tipul respectiv.
Exemple: integer a, b, c; array V(n), A(m,n) ; stack S
2) Instrucțiunile de citire/scriere
read a1, a2, …, an
write a1, a2, …, an
12
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
Se evaluează predicatul p și în cazul în care valoarea este true, se trece la executarea secvenței de
instrucțiuni S1. Dacă valoarea este false se trece la execuția secvenței S2, iar dacă aceasta nu
apare, se trece la execuția instrucțiunii următoare instrucțiunii if.
4) Selecția multiplă
case p1: S1
p2 : S2
...........
pn : Sn
[else] Sn+1
endcase
unde S1, …., Sn sunt secvențe de instrucțiuni, iar p1, …., pn sunt predicate satisfăcând
condițiile:
pi ۸ pj = 0 (∀) i ≠ j p1 ۷ p2 ۷ ….. ۷ pn = 1 dacă nu există ramura else.
Dacă p1 este TRUE, se trece la execuția secvenței S1după care se trece la instrucțiunea
următoare după endcase. Analog pentru p2, ..., pn. Dacă nici un predicat nu a fost adevărat și
există ramura else, se trece la execuția secvenței corespunzătoare, iar dacă nu există ramura else,
se trece direct la instrucțiunea următoare după endcase.
13
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
8) Instrucțiunea exit
exit
determină trecerea la execuția primei instrucțiuni care urmează celui mai interior ciclu do, while,
for, ieșindu-se deci din acel ciclu.
Proceduri
Un program în limbajul algoritmic este o succesiune de una sau mai multe proceduri.
Declararea unei proceduri constă în :
Lista de parametrii este un șir de variabile despărțite prin virgulă ce permit transmiterea datelor
între proceduri.
O procedură poate apela o altă procedură:
14
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
Scrierea unui cod bine structurat şi organizat presupune utilizarea exclusivă a anumitor
structuri de control (liniară, alternativă şi repetitivă). Structura este unitatea de bază a
programării logice, care defineşte ordinea de realizare a paşilor algoritmului.
Acest principiu de bază al programării structurate este fundamentat de Teorema lui C.
Böhm si T.C. Jacopini, cunoscută sub numele de “Teorema de structură” sau “Teorema
fundamentală a programării structurate”: orice algoritm cu un singur punct de început şi un
singur punct de sfârşit poate fi reprezentat folosind trei tipuri de structuri de control:
structura secvenţială - secvenţa;
structura alternativă – decizia (simplă);
structura repetitivă – ciclul cu test iniţial (cu număr necunoscut de paşi, condiţionată anterior).
3. Se citesc valorile pentru două variabile întregi (a şi b) şi se afişează care variabilă este
mai mare precum şi valoarea acesteia.
16
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
Obs:
n
1
S
2
(x y
i 1
i i 1 xi 1 yi ) , unde xn+1 = x1, yn+1 = y1
P9
P10 P7
P6
P12
P8
P11
P13 P5 P4
P14
P2 P3
P1
Soluţie:
read n;
array x[n+1], y[n+1];
17
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
for i = 1, n
read xi , yi
repeat;
xn+1 x1 ; yn+1 y1 ;
s 0;
for i = 1, n
s s + xi * yi+1 - yi * xi+1
repeat;
s abs (s/2);
write s;
Soluţie:
read n;
s 0 ; termen 1;
for i = 1, n
s s + termen / (2 * i – 1);
termen - termen
repeat;
pi 4 * s
write pi;
Obs:
a mod b = restul împărţirii întregi a lui a la b
a div b = câtul împărţirii întregi a lui a la b
Soluţie:
read n;
s 0;
18
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
while n 0
s s + n mod 10;
n n div 10
repeat
write s;
Soluţie:
read n;
ninv 0;
while n 0
ninv ninv*10 + n mod 10;
n n div 10;
repeat
write ninv;
Soluţie:
read n; prim 1;
if n = 1 n = 0 then prim 0
else for i = 2, n div 2
if n mod i = 0 then prim 0
endif
repeat;
endif;
if prim = 1 then
write “ Nr. prim”
else
write “Nr. neprim”
endif;
19
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
Soluţie:
read nr; n 2; j 0; /* j contorizează numărul de numere prime*/
while j < nr
prim 1;
for i = 2, int(sqrt(n))
if n mod i = 0 then
prim 0
endif;
repeat;
if prim = 1 then
write n; j j+1;
endif;
n n+1;
repeat;
Soluţie:
read n;
i 2; /* începând cu i = 2 verificăm dacă i este divizor al lui n*/
while n 1
fm 0; /* în fm contorizăm de câte ori s-a împărţit n la i */
while n mod i = 0
fm fm + 1; n n div i
repeat;
if fm 0 then write i, ^, fm
endif;
i i +1;
repeat;
20
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
8. Să se afişeze primele nr numere perfecte. Un număr se numeşte perfect, dacă este egal cu
suma divizorilor lui (mai puţin el).
Soluţie:
read nr;
n 6; // cel mai mic număr perfect este 6
j 0; // în j contorizăm numărul de numere perfecte
while j < nr
perfect 0;
s 0;
for i = 1, n div 2
if n mod i = 0 then
s s +i
endif;
repeat;
if s = n then
perfect 1
endif;
if perfect = 1 then
write n;
jj+1
endif
n n + 1;
repeat;
Soluţie:
a) metoda de interschimbare se bazează pe principiul celor trei pahare:
pas 1: Se goleşte primul pahar în paharul auxiliar;
21
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
Soluţie:
read n10, b; // n10 este numărul scris în baza 10
nb 0; // nb este numărul convertit în baza b
p 1;
while (n10 ≠0)
nb nb +p*(n10 mod b);
p p*10;
n10 n10 div b
repeat
write nb
Soluţie:
read nb, b; // nb este numărul scris în baza b
n10 0; // n10 este numărul convertit în baza 10
p 1;
22
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
do
n10 n10 +p*(nb mod b);
p p*b;
nb nb div 10
until (nb=0)
write n10
23
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
Byte-ul este extrem de important, deoarece există combinații suficiente de 8-biți pentru a
reprezenta toate caracterele de pe o tastatură.
O grupare de 8 biți formează un octet (byte) notat prescurtat cu B. Adesea exprimarea
capacității de stocare pentru sistemele digitale de calcul se face utilizând ca unitate de măsură
octetul sau multiplii acestuia:
1KB = 1 kilo octet = 1024 octeți = 210 octeți
1MB = 1 mega octet = 1024 KB = 220 octeți
1GB = 1 giga octet = 1024 MB = 230 octeți
1TB = 1 tera octet = 1024 GB = 240 octeți, etc.
Deoarece în calculator datele sunt reprezentate ca cifre binare, este necesar ca orice
formă de comunicare scrisă, cuvinte, numere, imagini, sunete, să fie convertită într-un alt format,
pentru a putea fi stocată și prelucrată. În acest scop sunt utilizate diferite dispozitive de intrare și
dispozitive hardware care realizează o conversie dintr-un format extern într-o reprezentare
internă. De exemplu, sunetul de la un dispozitiv de intrare (microfon) necesită dispozitive
hardware – plăci adaptoare pentru a fi convertit în format binar.
Reprezentarea prin care fiecărei entităţi informaţionale introduse de la tastatură sau de la
orice alt dispozitiv de intrare i se asociază o reprezentare digitală: o secvenţă de cifre binare se
numește codificare.
O reprezentare adecvată a datelor va reflecta și va simplifica modul în care urmează să fie
prelucrate datele. Există astfel diferite standarde utilizate pentru diverse tipuri de date.
Test de autoevaluare 1
1. Structura care testează o condiție, execută o instrucțiune în cazul în care
rezultatul este adevărat, iar apoi se testează condiția din nou, poate avea oricare
dintre denumirile următoare cu excepția:
a) iterație b) buclă
c) repetiție d) selecție simplă
25
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
1. d)
2. b)
26
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
4.
read n;
nrn; // în nr salvăm numărul iniţial n
n_inv0; //se iniţializează inversul numărului cu valoarea 0
while nr ≠ 0
n_inv n_inv *10 +nr mod 10;
nrnr div 10
repeat
if n_inv = n then write “este palindrom”
else write “nu este palindrom”
endif
Recapitulare
Un algoritm desemnează o procedură de calcul clară și bine definită,
constând dintr-un set finit de instrucțiuni complet ordonat în timp; procedura
pornește de la o anumită valoare sau un set de valori de intrare și produce într-
un timp finit o anumită valoare sau un set de valori, ca ieșire.
Un algoritm se caracterizează prin:
1. Exactitate
27
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
2. Generalitate
3. Finitudine
4. Simplitate
5. Eficiență
Procesul de rezolvare a unei probleme cuprinde patru etape principale:
Etapa 1) Înțelegerea problemei:
Etapa 2) Elaborarea unui plan (model) de rezolvare a
problemei
Etapa 3) Implementarea planului de rezolvare
Etapa 4) Testarea programului și corectarea erorilor
Cele mai uzuale modalități de reprezentare a algoritmilor sunt:
- schema logică: reprezintă grafic secvența de pași implicați în rezolvarea
problemei
- limbajul pseudocod folosește o scriere similară limbajelor de programare
moderne
“Teorema de structură” sau “Teorema fundamentală a programării
structurate”: orice algoritm cu un singur punct de început şi un singur punct de
sfârşit poate fi reprezentat folosind trei tipuri de structuri de control:
structura secvenţială - secvenţa;
structura alternativă – decizia (simplă);
structura repetitivă – ciclul cu test iniţial (cu număr necunoscut de paşi,
condiţionată anterior).
Pentru a putea fi prelucrate cu ajutorul calculatorului, informaţiile
utilizate în viaţa cotidiană (imagini, numere, litere, desene, sunete) şi
instrucţiunile pe care trebuie să le execute procesorul calculatorului trebuie să
fie reprezentate (codificate) într-un anumit format, acceptat de calculator.
Transformarea informaţiei, din forma de reprezentare externă, ușor de înțeles,
în forma de reprezentare internă pe care o înţelege calculatorul, sub formă de
cifre binare, se numeşte codificare internă a informaţiei.
Există diferite standarde utilizate pentru diverse tipuri de date:
alfanumerice, sunete, video, imagini.
28
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Algoritmi și noțiuni de programare structurată. Procesarea informației în calculator
Bibliografie:
29
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii