Indrumar Laboratoer Limbaje Program Are

download Indrumar Laboratoer Limbaje Program Are

of 55

Transcript of Indrumar Laboratoer Limbaje Program Are

PROGRAMAREA CALCULATOARELOR I LIMBAJE DE PROGRAMARE

NDRUMAR DE LABORATOR

Liviu erbnescu UNIVERSITATEA HYPERION

LISTA LUCRRILOR

1. Iniiere ntr-un mediu de programare. Structura unui program C 2. Implementarea structurii secveniale. Tipuri de variabile 3. Operatori; 4. Operatori la nivel de bit. Construcia mtilor. 5 Funcii. Aria de vizibilitate a variabilelor 6.Transferul parametrilor n cadrul funciilor 7. Instruciuni de decizie 8. Instruciuni de ciclare; 9. Tablouri. Pointeri. Alocarea dinamic. 10. Aritmetica pointerilor; 11. Implementare liste 12. Funcii recursive - Arbori. 13. Funci C din biblioteci. 14. Teste.

LABORATORUL NR.1 INIIERE NTR-UN MEDIU DE PROGRAMARE. STRUCTURA UNUI PROGRAM C Scop: 1. Familiarizarea cu mediul integrat CodeLite. 2. nelegerea structurii unui program scris n limbajul C. 3. nelegerea rolului unui comilator. 4. nelegerea rolului link-editrii.

Consideraii teoretice: Mediul integrat - OpenSource - CodeLite Un spaiu de lucru (workspace) detine un numar de proiecte, de exemplu, acestea pot avea legtur unele cualtele sau nu.. Crearea unui spaiu de lucru se realizeaz prin selectarea " "Workspace | Create new Workspace..."" Un proiect (project) poate avea va rezultat n urma compilrii i apoi a link-editrii un executabil, o bibliotec dinamic (*.DLL), o bibliotec static(*.LIB), etc. Proiectul n sine conine toate informaiile necesare pentru a produce o aplicaie de un anumit tip (aplicaie consol, aplicaie grafic ce utilizeaz un anumit set de controale vizuale, aplicaie cu obiecte grafice, etc). Fiierul ce conine informaii despre spaiul de lucru se numete .workspace Fiierul ce conine informaii despre proiect este . prj

1. Organizarea programelorLa baza oricrui program (software) st un algoritm (metod de rezolvare). Acesta preia date din memoria dinamic a calculatorului (RAM) sau de pe suporturi de stocare i le prelucreaz. Rezulutatul prelucrrii (a execuiei algoritmilor) este stocat n memoria dinamic i apoi poate fi afiat, memorat pe suporturi de stocare a datelor, sau transmis ctre alte aplicaii software. Codul surs se scrie cu ajutorul unui editor de texte, acest editor poate fi unul simplu gen notepad, notepad++, getit sau unul specializat, nglobat ntr-un mediu integrat de dezvoltare pentru software-uri(ex: TuboC++, BorlandC++, C++Builder, VisualC++, SymantecC++, DevC++, CodeLite, NetBean, EclipseC++, gt++, gtk++, etc.).ProgramatorEditare Editor de text Compilator

Executabil / bibliotec (*.exe / *.dll, *.lib, ...)Linkeditare Link-editor

Cod surs ( *.c,*.cpp)

Compilare

Cod obiect (*.obj, *.o)

Biblioteci statice (*.lib)

Etapele pentru ob'inerea unui fiier executabil

Compilatorul transform codul surs n cod obiect ( textul literar l transform n cod main reprezentat de comenzi la nivel de microprocesor). n cadrul codului surs se pot utiliza rutine(proceduri-funcii) definite n cadrul unor biblioteci statice (codul utilizat al bibliotecilor statice este ncorporat n executabil). Codul bibliotecilor dinamice (*.dll dynamic link library) este doar apelat, el nefiind inclus n fisierul executabil (*.exe) sau n biblioteca rezultat. Structura unui program C/C++ Un program C/C++ cuprinde urmtoarele elemente pricipale:

operatori (aritmetici, logici, etc) instruciuni (de decizie, de parcurgere a unei bucle, etc) funcii (apelate din cadrul bibliotecilor sau definite de utilizator) variabile i constante funcia main()

Textul unui program poate fi scris ntr-un fiier sau n mai multe fiiere. Un program va avea o singur funcie main() indiferent dac este scris ntr-un singur fisier sau n mai multe fiiere. Programul compilat i linkeditat va incepe ntodeauna prin lansarea n execuie a instruciunilor i funciilor din cadrul lui main(). Prin ieirea din funcia main() se ncheie i execuia programului.

Desfurarea lucrrii: 1. Lansarea mediului CodeLite, i studierea principalelor componente ale interfeei acestuia 2. Crearea unor spaii de lucru 3. Crearea unui proiect pentru aplicaie consol 4. Compilarea unui exemplu. Modificarea setrilor implicite de compilare. 5. Executarea separat aLink-editrii pentru o aplicaie. Modificarrea setrilor implicite pentru link-editare

LABORATORUL NR.2 IMPLEMENTAREA STRUCTURII SECVENIALE. TIPURI DE VARIABILE Scop: 1. Familiarizarea cu funciile de intrare-ieire pentru consol. 2. nelegerea noiunii de variabil 3. nelegerea diferenelor de reprezentare i de lucru date de tipurile de variabile Consideraii teoretice:Variabile Datele din cadrul unui program sunt stocate n memoria dinamic (RAM), ele vor fi sterse fie la un anumit moment n timpul execuiei programului, fie la sfritul acestuia. Acestea pot fi date ce urmeaz a se modifica n cadrul programului prin realizarea de operaii asupra acestora denumite VARIABILE i date care rmn constante n urma execuiei programului denumite CONSTANTE. Pentru ca aceste date s poat fi accesate este necesar declararea acestora n cadrul programului. O variabil va avea o denumire pe care o va pune utilizatorul n momentul declarrii acestora. Operaiile din cadrul unui program se realizeaz asupra variabilelor. Fiecare variabil va avea o anumit structur n ceea ce priveste reprezentarea sa n memorie (tipul de variabil) Tipurile de variabile n funcie de reprezentarea n cadrul memoriei variabilele pot fi de mai multe tipuri. Acestea trebuie declarate nainte de compilarea programului astfel nct compilatorul s le rezerve sau nu memorie n momentul ncrcrii executabilului n memorie. Principalele tipuri de variabile sunt prezentate n anexa 1. n momentul compilrii programului, este cunoscut tipul variabilelor. n acest mod programul tie ct ocup n memorie fiecare variabil i cum s utilizeze variabila respectiv. IMPLEMENTAREA STRUCTURII SECVENIALE Structura secvenial este o niruire de instruciuni, plasate una dup alta, n ordinea execuiei acestora. Schema logic:I1 I2 In

Pseudocodul:instr1; instr2;........; instr n; instr1; instr2;........; instr n;

Implementarea structurii secveniale se realizeaz cu ajutorul instruciunilor: Instruciunea vid Sintaxa: ; Instruciunea vid nu are nici un efect. Se utilizeaz n construcii n care se cere prezena unei

instruciuni, dar nu se execut nimic. Instruciunea expresie Sintaxa: expresie; sau: apel_funcie; Ex: sqrt() este o funcie definit n biblioteca matematicint a=3,b=4,c; double d; c=a+b; d=sqrt(b);

Instruciunea compus (instruciunea bloc) Sintaxa:{ declaraii variabile; { declaraii variabile; instr1; instr2;........; instr n; instr1; instr2;........; instr n; } }

ntr-un bloc de instruciuni se pot declara variabile care pot fi accesate doar n corpul blocului. Instruciunea bloc este utilizat n locurile n care este necesar prezena unei singure instruciuni, ns procesul de calcul implic executarea mai multor instruciuni. Principalele tipuri de variabile Tip variabil Reprezentare n cadrul memoriei (numr de bii) 8 8 8/16/32/64 8/16/32/64 16 16 32 32 32 64 80 8 8/16/32/64 true / false Valori posibile Descriere

char unsigned char int unsigned int short unsigned short long unsigned long float double long double bool void

-27 +27-1 0 +216-1 -231 +231-1 0 +232-1 -215 +215-1 0 +2 -1 -215 +215-1 0 +2 -1cca. 10 semnificative38

caracter utilizat i pentru codurile ASCII (0127) caracter i utilizat pentru codurile ASCII (0255) ntreg cu semn (dependent de sistem 8/16/32/64 bii ) ntreg fr semn (dependent de sistem 8/16/32/64 bii ) ntreg scurt cu semn ntreg scurt fr semn ntreg lung cu semn ntreg lung fr semn10 , 6 cifre38

16

16

Numr real reprezentat pe 32 de bii Numr real reprezentat pe 64 de bii (cel mai des utilizat) Numr real reprezentat pe 80 de bii boolean Nimic / vid

cca. 10308 10308, 15 cifre semnificative

Desfurarea lucrrii: 1. Se ruleaz exemplele din seciunea teoretic 2. Se continu cu exemplele corespunztoare din seciunea TESTE

LABORATORUL NR.3 OPERATORI Scop: 1. negerea i familarizarea cu operatorii din C 2. Utilizarea operatorilor din limbajul C Consideraii teoretice:Operatori unari SIMBOLUL + ++ ++a a----a Operatori binari aritmetici SIMBOLUL FORMA + a+b a-b * a*b / a/b % a%b Operatori de atribuire aritmetici SIMBOLUL FORMA = a=b += a+=b -= a-=b /= a/=b %= a%=b

FORMA -a +a a++

Operaia realizat negarea lui a valoarea lui a Postincrementare: preia valoare, apoi creste Preincrementare: mai nti crete cu 1, apoi valoarea Postdecrementare: preia valoarea, apoi scade Predecrementare: mai nti scade cu 1, apoi valoarea Operaia realizat a adunat cu b b sczut din a a nmuit cu b a mprit la b a modulo b (restul mpririi)

cu 1 preia cu 1 preia

Exemplu -3 3 a=3++; a are val. 3 a=++3; a are val. 4 a=3--; a are val. 3 a=--3; a are val. 2

Exemplu 3.7+5.3 3.1-5.0 1.2*4.1 1.2/4.1 5%4

Operaia realizat a preia valoarea lui b a=a(fostul coninut)+b a=a-b a=a/b a=a%b

Operatori relaionali ( 0 este false, diferit de 0 este adevrat, ex:-0.0000007 este adevrat / are valoare de adevr true) SIMBOLUL > >= < b a>=b a=b atunci true, altfel false daca ay punctate prin intermediul pointerului p dreaptaDesfurarea lucrrii: 1. Se ruleaz exemplele din seciunea teoretic 2. Se continu cu exemplele corespunztoare din seciunea TESTELABORATORUL NR.4 OPERATORI LA NIVEL DE BIT. CONSTRUCIA MTILOR. Scop: 1. negerea i familarizarea cu operatorilor la nivel de bit, din limbajul C 2. Utilizarea operatorilor din limbajul C. 3. Construcia i aplicarea mtilor binareConsideraii teoretice:Operatorii de manipulare la nivel de bit (binari+unari) SIMBOLUL FORMA Operaia realizat a este deplasat spre dreapta cu b biti (se completeaz >> a>>brestul cu 0)>=b a=a(fosta valoare)>>b id=999; //fa1(c1,y); //insereaza nod y=(NOD2*)malloc(sizeof(NOD2)); memset(y,0,sizeof(NOD2)); y->id=999; fi2(1004,y,c1); afis(c1); getchar(); return 0;}Desfurarea lucrrii: 1. Se ruleaz exemplele din seciunea teoretic 2. Se continu cu exemplele corespunztoare din seciunea TESTELABORATORUL NR.12 FUNCII RECURSIVE - ARBORI Scop: 1. nelegerea lucrului cu stivele de tip LIFO 2. negerea apelului recursiv 3. nelegerea transmiterii parametrilor i a vizibilitii variabilor n cazul apelurilor recursive 4. Construcia arborilor binari 5. Parcurgerea arborilor binari utiliznd tehnici recursive 6. Parcurgerea arborilor (cazul general) utiliznd tehnici recursive Consideraii teoretice: FUNCII RECURSIVEO funcie este numit funcie recursiv dac ea se autoapeleaz, fie direct (n definiia ei se face apel la ea nsi), fie indirect (prin apelul altor funcii). Pentru fiecare apel al funciei, parametrii i variabilele automatice se memoreaz pe stiv, avnd valori distincte. Variabilele statice ocup tot timpul aceeai zon de memorie (figureaz ntr-un singur exemplar) i i pstreaz valoarea de la un apel la altul. Orice apel al unei funcii conduce la o revenire n funcia respectiv, n punctul urmtor instruciunii de apel. La revenirea dintro funcie, stiva este curat (stiva revine la starea dinaintea apelului). Un exemplu de funcie recursiv este funcia de calcul a factorialului, definit astfel: fact(n)=1, dac n=0; fact(n)=n*fact(n-1), dac n>0;#include #include int fact(int n) { if (n