Sunteți pe pagina 1din 36

Curs Programarea Calculatoarelor © Ovidiu Grigore

Programarea Calculatoarelor (PC)


Curs: prof. dr. ing. Ovidiu GRIGORE
date contact: sala: B319a / B134
tel: 021 402 4897
e-mail: ovidiu.grigore@ai.pub.ro
url: ai.pub.ro/~ovidiu

Laborator:
conform orarului (2 ore / 1 saptamana)
notare pe parcurs
colocviu laborator in ultima sedinta Amanunte la
problema cu rezolvare practica laborator
Curs Programarea Calculatoarelor © Ovidiu Grigore

Notare:

Semestru: Tema de casa / Proiect 10 pct.


Nota laborator (teme+colocviu) 40 pct.

Sesiune: Examen (scris) 50 pct.

In examen se intra NUMAI daca:


- NU sunt absente la laborator
- la laborator s-a obtinut MIN 50% punctaj.

In sesiunile de restante se repeta examenul (50pct) si tema (10pct)

Pentru promovare trebuie obtinute cel putin 50 pct.


Curs Programarea Calculatoarelor © Ovidiu Grigore

Bibliografie:
Ov. Grigore, Programare in C, Ed. Printech, Bucuresti,2000;
F. Ionescu, “Elemente de programare orientata pe obiecte”, Ed. Printech,
Bucuresti,2000;
D. Somnea, D. Turturea, “Initiere in C++”, Ed.Tehnica, Bucuresti, 1993;
L. Negrescu, “Limbajele C si C++ pentru incepatori”, Editura
MicroInformatica, Cluj, 1998.
Bjarne Stroustrup, “The C++Programming Language”, Addison-Wesley
Professional Press, 2013 (se gaseste pe internet in pdf)

Surse internet:
http://ai.pub.ro/content/PC.html

Conventie definire nume in C++ http://geosoft.no/development/cppstyle.html


Curs Programarea Calculatoarelor © Ovidiu Grigore

Etapele realizarii unei aplicatii software:

1. Formularea problemei
2. Formalizarea problemei
3. Elaborarea/proiectarea algoritmului
4. Stabilirea resurselor
5. Scrierea codului sursa, folosind sintaxa limbajului
6. Compilare = verificare sintaxa
7. Depanarea erorilor
8. Testarea aplicatiei.
9. Scrierea documentatiei
10. Explorarea/utilizarea aplicatiei (Lansare pe piata)
Curs Programarea Calculatoarelor © Ovidiu Grigore

Etapele realizarii unui program:


1. Formularea problemei

- De obicei se face de către client, persoana fără experiență în


programare
- E posibil sa nu fie o formulare clară sau completă
- Trebuie să pună in evidenta:
• entitățile (date) de intrare;
• ce se dorește sa se obțină in final (date de ieșire);
• pe cat este posibil sa se specifice demersul care trebuie efectuat
pentru a ajunge de la intrare către ieșire
- Daca sunt necesare/cunoscute, trebuie specificate modul de
alcatuire/organizare a datelor de intrare si a celor de ieșire
Curs Programarea Calculatoarelor © Ovidiu Grigore

Etapele realizarii unui program:


2. Formalizarea problemei
- Se identifica parametrii/variabilele problemei (eventual tipul lor).
- Se alege metoda teoretica de rezolvare a problemei; se determina
formulele matematice care sunt implicate in rezolvarea problemei.
Este o etapa de punere in evidenta a cunoștințelor teoretice din
domeniul problemei (matematica, fizica, economie, etc).
- Se pun în evidență condițiile inițiale și restricțiile referitoare la datele
de intrare, respectiv la soluțiile posibile.
- Se aleg metodele numerice folosite in rezolvarea problemei. Se
analizează cu atenție stabilitatea și convergența metodei, tipul,
mărimea și propagarea erorilor, precizia rezultatelor.
- Se estimează necesarul de memorie și timpul de prelucrare
(complexitate de calul)
Curs Programarea Calculatoarelor © Ovidiu Grigore

Etapele realizarii unui program:


3. Elaborarea/proiectarea algoritmului

- Stabilirea succesiunii etapelor de prelucrare, necesare realizării unei


sarcini propuse (rezolvării unei probleme) = elaborare algoritm
- Pentru dezvoltarea un algoritm, dar si pentru verificarea,
optimizarea, depanare mai ușoară și mai eficientă, este bine ca un
algoritm sa fie reprezentat prin una dintre următoarele metode:
- scheme logice
- pseudocod
Curs Programarea Calculatoarelor © Ovidiu Grigore

Etapele realizarii unui program:


3. Elaborarea/proiectarea algoritmului
Reprezentarea algoritmilor prin scheme logice (Flowchart)

- Avem la dispoziție un număr finit de blocuri prin îmbinarea


(înlănțuirea) cărora trebuie elaborat algoritmul cerut.
- Execuția etapelor de prelucrare (a blocurilor) se face secvențial,
adică la fiecare moment se executa un singur bloc, după care urmează
următorul, etc.
Curs Programarea Calculatoarelor © Ovidiu Grigore

Etapele realizarii unui program:


3. Elaborarea/proiectarea algoritmului
Reprezentarea algoritmilor prin scheme logice (Flowchart)

Blocul de pornire
START

Blocul de oprire
STOP

Blocul de citire date


Citeste
date_de_intrare
Curs Programarea Calculatoarelor © Ovidiu Grigore

Etapele realizarii unui program:


3. Elaborarea/proiectarea algoritmului
Reprezentarea algoritmilor prin scheme logice (Flowchart)

Blocul de scriere/afisare date


Scrie
date_de_iesire

Blocul de atribuire
v=e

Blocul ramificatie/decizie
C = conditie, NU DA
C
poate fi adevarata sau nu(falsa)
Curs Programarea Calculatoarelor © Ovidiu Grigore

Etapele realizarii unui program:


3. Elaborarea/proiectarea algoritmului
Reprezentarea algoritmilor prin scheme logice (Flowchart)

Exemplu: Calcularea mediei a doua numere, a si b


START

a=0,b=0

Citeste a,b

m=(a+b)/2

Scrie m

STOP
Curs Programarea Calculatoarelor © Ovidiu Grigore

Etapele realizarii unui program:


3. Elaborarea/proiectarea algoritmului
Reprezentarea algoritmilor prin pseudocod

Conceptul, similar schemelor logice (evidențierea pașilor algoritmului),


însă sub o forma mai apropiata limbajului natural și celui de
programare:
- Sunt puse la dispoziție un număr finit de propoziții/comenzi
/instrucțiuni cu structura (sintaxa) standard (nu poate fi modificata).
- Numai prin îmbinarea (înlănțuirea) unor astfel de comenzi trebuie
rezolvata aplicația.
- Execuția etapelor de prelucrare (a blocurilor) se face secvențial,
adică la fiecare moment se executa o singura comanda, după care
urmează următoarea, etc.
Curs Programarea Calculatoarelor © Ovidiu Grigore

Etapele realizarii unui program:


3. Elaborarea/proiectarea algoritmului
Reprezentarea algoritmilor prin pseudocod. Setul de comenzi

• Citirea datelor: Citeste lista_date


• Tiparire/scriere date: Scrie lista_date
• Atribuire: variabila ← expresie
Ex.: a ← b+c
• Instructiunea decizionala:
Daca expresie_logica atunci
bloc_instrunctiuni
Altfel
bloc_instrunctiuni
sfDaca
Curs Programarea Calculatoarelor © Ovidiu Grigore

Etapele realizarii unui program:


3. Elaborarea/proiectarea algoritmului
Reprezentarea algoritmilor prin pseudocod. Setul de comenzi

• Ciclu cu contor:
Pentru contor = V_init, V_final [, pas] executa

bloc_instrunctiuni
sfPentru

• Ciclu cu test initial:


CatTimp expresie_logica executa
bloc_instrunctiuni
sfCatTimp
Curs Programarea Calculatoarelor © Ovidiu Grigore

Etapele realizarii unui program:


3. Elaborarea/proiectarea algoritmului
Reprezentarea algoritmilor prin pseudocod. Setul de comenzi
• Ciclu cu test final:
Repeta

bloc_instrunctiuni
CatTimp expresie_logica

Tema: 1. Sa se scrie echivalentul unui ciclu cu test inițial, folosind un


ciclu cu test final. Si invers.
2. Sa se reprezinte prin scheme logice:
- ciclu cu contor
- ciclu cu test inițial
- ciclu cu test final
Curs Programarea Calculatoarelor © Ovidiu Grigore

Etapele realizarii unui program:


3. Elaborarea/proiectarea algoritmului
Reprezentarea algoritmilor prin pseudocod. Setul de comenzi

Exemplu: Calcularea/afisarea minimului a doua numere citite.

Citeste a, b
min ← a
Daca b < min atunci
min ← b
sfDaca
Scrie min

Tema: S-a depus la o bancă suma de S lei pe termen de 6 luni. Cunoscând că dobânda
anuală oferită de bancă este de d %, să se determine suma aflată în cont la sfârşitul
termenului de depunere. Daca la terminarea termenului, depozitul se prelungeste
automat cu capitalizarea dobanzii, sa se afle suma obtinuta dupa n termene.
Curs Programarea Calculatoarelor © Ovidiu Grigore

Etapele realizarii unui program:


4. Stabilirea resurselor
- Pe baza analizei algoritmilor se specificațiile hardware,
echipamentele (periferice) necesare: parametrii procesor, dimensiune
/ tip memorie, memorie externă, etc.
- Limbajul în care urmează să fie scris programul se stabilește in
funcție de scopul si modul de utilizare a aplicației:
- Daca este dezvoltată pentru un sistem de calcul anume și un
sistem de operare dat (specificații stricte).
- Daca se dorește a fi multi-platforma (cross-platform), la nivel
hardware (să ruleze pe sisteme de calcul cu arhitecturi diferite)
sau pentru a putea fi executat pe mai multe sisteme de operare
(MacOS, Windows, Linux, Android, etc)
Curs Programarea Calculatoarelor © Ovidiu Grigore

Etapele realizarii unui program:


5. Scrierea codului sursa
- Pornind de la algoritmul scris anterior se dezvolta aplicația folosind
sintaxa limbajului ales.
- Codul sursa trece, în general, prin mai multe etape de rafinare,
urmarindu-se optimizarea timpului de execuție, optimizarea
resurselor (memorie), etc.
Curs Programarea Calculatoarelor © Ovidiu Grigore

Etapele realizarii unui program:


5. Scrierea codului sursa
De ce alegem un limbaj de programare de nivel înalt??
1. Limbajul mașină
- Mașinile/sistemele de calcul folosesc în interiorul lor, pentru a
stoca, transmite date, pentru a primi sau executa comenzi, un
limbaj binar (cu doua valori posibile, notate 0, respectiv 1),
numit limbaj mașină (este specific mașinii de calcul:
procesorului, arhitecturii sale).
- Programarea in limbaj mașină este posibila, însă extrem de
complicată.
- Codurile numerice asociate comenzilor sunt greu de reținut.
(exemplu: adunarea = 5B, scadearea = 5C)
Curs Programarea Calculatoarelor © Ovidiu Grigore

Etapele realizarii unui program:


5. Scrierea codului sursa
De ce alegem un limbaj de programare de nivel înalt??
2. Limbaj de asamblare
- Pentru ușurarea „dialogului” cu mașina, s-a introdus limbajul de
asamblare, care folosește comenzi specifice, particulare fiecărui
procesor.
- Comenzile sunt sub forma de cuvinte cheie (in formă prescurtată),
numite mnemonice. Setul de comenzi coincide cu setul de operații al
procesorului. (ex. : mov , push , int , etc. )
- Comenzile se dau la nivel de bază, folosind adresele memoriei,
accesarea regiștrilor procesorului, etc.
Exemple: lea ax, v; încarcă în registrul ax adresa variabilei v
mov ax, v; încarcă în registrul ax conţinutul variabilei v
Curs Programarea Calculatoarelor © Ovidiu Grigore

Etapele realizarii unui program:


Limbaj de asamblare
Exemplu: Fișierul sursă "hello.asm", scris în asembler X86, afisarea
mesajului “Hello World”:
.MODEL SMALL
.DATA
sir DB 'Hello World$'
.STACK 64
.CODE
START:
mov AX,@DATA
mov DS,AX
mov AH,9
mov DX,OFFSET sir
int 21H
mov AH,4CH
int 21H
END START
Curs Programarea Calculatoarelor © Ovidiu Grigore

Etapele realizarii unui program:


5. Scrierea codului sursa
De ce alegem un limbaj de programare de nivel înalt??
3. Limbaj de nivel înalt
- Comenzile se apropie foarte mult de limbajul natural =>
simplificarea scrierii programelor.
- În general nu se lucrează la nivel de memorie/adrese. Exista
limbaje (precum C, C++) la care se lucrează suficient de mult
la nivel de memorie, motiv pentru care se numesc de nivel
mediu.
- Sunt ascunse mecanismele de prelucrare la nivel de baza
(procesor, memorie) => ușurința in abordare, performanțe mai
slabe
- Ca și limbajul natural, limbajul de nivel înalt are definite un set
de reguli sintactice și semantice.
Curs Programarea Calculatoarelor © Ovidiu Grigore

Etapele realizarii unui program:


5. Scrierea codului sursa
De ce alegem un limbaj de programare de nivel înalt??
3. Limbaj de nivel înalt
- Calculatorul/Procesorul lucrează numai in limbaj mașină
(binar). Scrierea programelor in limbaj de nivel înalt
presupune existența unei etape de translatare a codului din
limbaj înalt în limbajul mașina pe care-l cunoaște procesorul.
- Translatarea codului in limbaj mașină se poate face folosind
• compilator
• interpretor
Curs Programarea Calculatoarelor © Ovidiu Grigore

Etapele realizarii unui program executabil (fișier .exe)


1. Editare codului sursa (fișier.cpp) → înșiruire de instrucțiuni
(comenzi) ale limbajului respectiv.
2. Compilare → translatează codul sursă în cod obiect (fișier .obj),
comenzi în limbaj mașină. Se execută în mai multe faze:
a) preprocesare → prelucrează o serie de comenzi speciale,
numite directive de preprocesare (încep cu #).
→ Sunt eliminate spațiile albe.
b) Verificare sintactică → sunt verificate regulile de alcătuire
(sintaxa) a instrucțiunilor. Daca sunt erori de sintaxă,
procesul de translatare se întrerupe, iar acestea sunt
semnalate sub forma unei liste de erori.
3. Linkeditare (editarea legăturilor) → “leagă” modulele obiect,
rezolvă referințele către funcțiile externe și rutinele din biblioteci, în
final produce cod executabil, (fisier .exe)
Curs Programarea Calculatoarelor © Ovidiu Grigore

Erori in procesul de realizarea unui program


Exista 3 mari categorii de erori care pot apărea în realizarea unui
program:
1. Erori de compilare → în general sunt erori de sintaxă.
2. Erori de linkeditare → nu sunt gasite bibliotecile, sau funcțiil, sau
variabilele externe la care se face referire in cod
3. Erori de execuție → erori care apar în timpul executării
programului. Unele sunt semnalate (împărțirea la zero, depașirea
memorie ce se poate aloca, etc), altele nu sunt semnalate, programul
se execută greșit, rezultatul obținut este eronat, motiv pentru care
programele trebuie sa treacă printr-o etapă de testare foarte
riguroasă, in speranța găsirii tuturor situațiilor de execuție eronată
(se realizează scenarii de execuție în care sunt simulate situații
diverse, in special cazurile atipice/singulare)
Curs Programarea Calculatoarelor © Ovidiu Grigore

Moduri de programare

Programare procedurala → accentul se pune pe descompunerea


programului în proceduri (funcții) care sunt apelate în
ordinea de desfășurare a algoritmului. Limbajele care
suporta aceasta tehnica de programare trebuie să asigure
posibilități de transfer a argumentelor către funcții și de
returnare a valorilor rezultate. Limbajul Fortran a fost
primul limbaj de programare procedurala . Au urmat
Algol60, Algol68, Pascal, C…
→ avantaje: dezvoltarea și depanarea ușoară,
prin lucru cu blocuri de cod mai mici; posibilitatea de
reutilizare a unor funcții deja definite pentru alte părți ale
aplicației
Curs Programarea Calculatoarelor © Ovidiu Grigore

Moduri de programare

Programare modulara → creșterea cerințelor pentru aplicațiile software


=> creșterea dimensiunii programelor, a complexității
algoritmilor și a implementării acestora
=> efort de organizare mai bună a datelor și funcțiilor de
prelucrare
=> schimbarea conceputului de structurare / asociere între
procedurile de prelucrare si datele folosite de acestea
=> apare necesitatea izolării procedurilor și a datelor în module
separate (relativ independente), care să interacționeze între ele cât
mai puțin.
Curs Programarea Calculatoarelor © Ovidiu Grigore

Moduri de programare

Programare modulara → descompunerea unui program în module, care


încorporează o parte din datele programului și funcțiile care le
manevrează
→ avantaj principal: separarea/izolarea datelor
folosite în module diferite =
.

tehnica (incipientă) de ascunderea / protejarea datelor.

Observații: - in interiorul unui modul se aplica principii de programare


procedurala;
- Gruparea de date si proceduri în module nu implica și o
asociere conceptuală
Curs Programarea Calculatoarelor © Ovidiu Grigore

Moduri de programare
Programare obiect orientată → descompunerea aplicației la nivel
conceptual (abstractizari), fiecare conținând date și
proceduri proprii;
→ utilizeaza mecanismele: abstractizare,
încapsulare, ierarhizare, moștenire… etc.

Observație: S-a pornit de la o descompunere algoritmica a aplicațiilor,


s-a ajuns la o descompunere conceptuala a lor

Exemplu: Dezvoltarea aplicațiilor vizuale (MS Visual C++), împărțirea


în 3 clase principale (concepte):
MainFrame (interfata cu utilizatorul)=comenzi, butoane, meniu
Document = stocare/salvare/citire date, prelucrare
View = vizualizare date
Curs Programarea Calculatoarelor © Ovidiu Grigore

Caracteristicile modului de programare obiect-orientata

Abstractizare → identificarea unui concept in care se regasesc


trasaturile esentiale comune ce caracterizeaza
entitatile (ex.: matrice, vector, nr. complex) din lumea
reala (situatii / procese / obiecte matematice, notiuni
fizice, etc.).

→ Trasaturile pot fi la nivel structural (valoric) si/sau


comportamental (de prelucrare).

→ In POO o abstractizare (concept) se implementeaza printr-o clasa


Curs Programarea Calculatoarelor © Ovidiu Grigore

Caracteristicile modului de programare obiect-orientata

Incapsulare → organizarea unitara (pastrarea la un loc) a trasaturilor


ce definesc un concept si in acelasi timp separarea
acestora: la nivel structural (valoric, date) si
comportamental (procedural, metode de prelucare).

→ separarea continutului (interior) conceptului (clasa)


de restul entitatilor (exterior = aplicatie).
Curs Programarea Calculatoarelor © Ovidiu Grigore

Caracteristicile modului de programare obiect-orientata

Protejarea /ascunderea datelor (data hiding) →

incapsulare + dif. tip de acces = limitarea accesului la


componentele interne ale clasei

Accesul la datele protejate → functii de interfata


Curs Programarea Calculatoarelor © Ovidiu Grigore

Caracteristicile modului de programare obiect-orientata

Tipizare → Tipul este asociat unei clase implicit (prin definitie).


→ Se doreste accentuarea caracterului puternic tipizat al clasei
Clasa ca tip de date impune si modul de prelucrare al datelor, motiv
pentru care nu se pot face implicit operatii cu obiecte din clase
diferite.
Orice prelucrare (operatie, functie) cu obiecte dintr-o clasa sau cu
obiecte din clase diferite trebuie definita in mod explicit. In
general aceasta este un avantaj, pentru ca orice prelucrare este
strict administrata/definita de utilizator, nu pot aparea erori,
confuzii de conversii de tip.
Curs Programarea Calculatoarelor © Ovidiu Grigore

Caracteristicile modului de programare obiect-orientata

Tipizare
Orice prelucrare (operatie, functie) cu obiecte dintr-o clasa sau cu
obiecte din clase diferite trebuie definita in mod explicit.

Exemplu: In C se pot aduna variabile de tipuri In C++ se pot aduna obiecte din clase
diferite posibila sintaxa (se efect. cast implicit): diferite? NU
int main()
int main() { Clasa1 a;
{ int a=2; Clasa2 b,c;
double b=3.5,c;
c=a+b;
c=a+b; }
}
Curs Programarea Calculatoarelor © Ovidiu Grigore

Caracteristicile modului de programare obiect-orientata

Ierarhizarea → modalitate de a organiza abstractizarile (clasele


asociate) intr-o structura ierarhizata (arbore/graf): relatii de
subordonare / includere si relatii de echivalenta ierarhica (clasele de
aceeasi importanta au acelasi nivel de ierarhizare).

→ Organizarea conceptelor de la nivelul de generalizare


maxima catre nivelul de detaliu maxim.

→ pune in evidenta relatii de agregare sau relatii de subordonare


intre tipuri de date

Relatiile de agregare = specifica compunerea unui “entitati” complexe


din mai multe “entitati” mai simple
Curs Programarea Calculatoarelor © Ovidiu Grigore

Caracteristicile modului de programare obiect-orientata

Ierarhizarea → Relatiile intre tipuri de date sunt implementare prin


mecanismul de mostenirile între clase, prin care o clasa (clasa derivata)
preia structura (datele) sau/si comportarea (metode de prelucrare)
definita în alta clasa (clasa de baza )

Derivarea claselor → Implementarea ierarhizarii de la nivelul


abstractizarii; implica mecanizmul de mostenire

Reutilizarea codului → Prin mecanismul de derivare metodele de


prelucrare mostenite sunt incluse automat, nu e necesara rescrierea
codului (definirea metodelor)

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