Documente Academic
Documente Profesional
Documente Cultură
Programarea Calculatoarelor
(limbajul C) 3.1. ExecuŃia algoritmilor
2
2010-2011 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 1/52
EnunŃ: să se implementeze algoritmul lui Euclid: fiind Algoritmul într-un limbaj mai structurat:
P ordine a
date două numere întregi pozitive (m şi n), să se găsească operaŃiilor
cel mai mare divizor comun (cmdc).
pasul 1: citeşte m,n;
pasul 2: atribuie lui cmdc valoarea lui n;
Algoritm în limbaj natural: pasul 3: atribuie lui r restul împărŃirii m:n;
“Se aleg două numere naturale. pasul 4: cât timp r≠0;
Se împarte primul număr la al doilea. pasul 5: atribuie lui m valoarea lui n;
Cât timp restul împărŃirii este nenul, se înlocuieşte primul pasul 6: atribuie lui n valoarea lui r;
număr cu al doilea şi al doilea cu restul împărŃirii. pasul 7: atribuie lui cmdc valoarea lui n;
Se reia apoi împărŃirea între cele două numere obŃinute. pasul 8: atribuie lui r restul împărŃirii m:n;
Rezultatul căutat este ultimul rest nenul” pasul 9: repetă pasul 4;
pasul 10: scrie valoare cmdc;
pasul 11: stop;
m,n m:n=c şi r, m n şi n r, m:n=c şi r, r=0 ?
5 6
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 4/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 5/52
ÎnŃelegera operaŃiilor: Verificarea modului în care se succed operaŃiile
Exemplu (factorial):
> permite alocarea dinamică a memoriei (folosire eficientă > Modelul compilării în C diferă un pic faŃă de cel prezentat
a memoriei), ??? pentru cazul general în Cursul 2.
alocare statică: se alocă în
int V[100]; > Compilatorul este împărŃit în trei programe:
memorie 100x32biŃi.
• preprocesor: responsabil pentru înlăturarea
alocare dinamică: se alocă
int *V, size; comentarilor, interpretarea directivelor de
memorie mai întâi pentru preprocesare (ex.: #include),
…
scanf(“%d”,&size); adresa lui V, şi apoi în funcŃie
V=(int *)malloc(size); de necesitate. • compilatorul: traduce sursa C primită de la
preprocesor în limbaj de asamblare,
se poate elibera memoria.
> programele scrise în C pot fi compilate pe o varietate mare • asamblorul: crează fişierele obiect,
de sisteme de calcul (portabilitate),
17 18
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 16/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 17/52
Compilarea programelor în C (continuare)
> Diagrama procesului de compilare în C:
mesaje de mesaje de
eroare eroare
program
program obiect editor de executabil
asamblor
legături
19 20
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 18/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 19/52
fişierele antet conŃin funcŃii definite de utilizator sau conŃine funcŃii de lucru cu dispozitivele de
biblioteci externe de funcŃii puse la dispoziŃia utilizatorului de intrare şi ieşire, de exemplu: citire date de la
stdio.h
către limbaj sau dezvoltate de alŃi programatori. tastatură (scanf), scriere date pe ecran (printf),
lucrul cu fişiere (fopen, fscanf, fprintf, fclose), etc.
prin includere acestora, funcŃiile din fişierul .h devin
disponibile utilizatorului în momentul programării. conŃine funcŃii de lucru cu şiruri de caractere, de
string.h
exemplu: concatenare, copiere, căutare, etc.
23 24
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 22/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 23/52
Structura unui program C (continuare) Structura unui program C (continuare)
• comenzile de preprocesare (continuare) • comenzile de preprocesare (continuare)
> Bibliotecile de funcŃii uzuale disponibile în C (continuare):
#define <nume_constanta> <valoare>
conŃine funcŃii utilitare, de exemplu: alocare
memorie (malloc, calloc), eliberare memorie defineşte un nume simbolic sau o constantă. În program
stdlib.h simbolul <nume_constanta> va fi înlocuit cu valoarea
(free), terminare execuŃie program (exit),
executare comenzi sistem de operare (system)... specificată de <valoare>.
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 34/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 35/52
Tipuri de date fundamentale în C (continuare) Tipuri de date fundamentale în C (continuare)
37 38
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 36/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 37/52
signed int dependent de sistem (~32 biŃi) Exemple: signed int a=-1000;
int [- 231; 231-1], (signed) unsigned short int b= 65535;
41 42
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 40/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 41/52
Tipuri de date fundamentale în C (continuare) Tipuri de date fundamentale în C (continuare)
> Tipuri reale: > Tipuri reale (continuare):
1bit 23biŃi 8biŃi
float - variabile de tip real în precizie simplă. float sgn. mantisă exponent
> Se observă că numerele reale sunt reprezentate în mod stocare date pe 64 biŃi
diferit de numerele întregi. [2.2250738585072014 x10-308 ; 1.7976931348623158 x10+308]
Reprezentarea numerelor în virgulă mobilă: 1bit 52biŃi 11biŃi
sgn. mantisă exponent
-1.3123437 = -13123437x10-7
mantisă exponent long double - identic cu double.
43 44
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 42/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 43/52
• pentru a specifica că o funcŃie nu returnează nici o valoare, enum <nume_tip> { listă constante string };
• pentru a specifica că o funcŃie nu primeşte nici un <nume_tip> var1,var2;
parametru,
• la definirea generică a pointerilor, aceştia putând indica Exemple:
astfel orice tip de variabilă, cu excepŃia constantelor.
enum Figuri { Romb, Patrat, Cerc, Triunghi };
Exemplu: enum Bool { True, False };
void Functie1(int a, int b); sau int Functie2(void);
45 46
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 44/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 45/52
49 50
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 48/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 49/52
Sfârşitul Cursului 3
53
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 52/52