Sunteți pe pagina 1din 9

Universitatea “Politehnica” din Bucureşti

Facultatea de Electronică, TelecomunicaŃii şi


Tehnologia InformaŃiei
Cuprins

Programarea Calculatoarelor
(limbajul C) 3.1. ExecuŃia algoritmilor

3.2. Introducere în limbajul C


Curs 3 – Bazele programării în 3.3. Bazele programării în limbajul C
limbajul C

Ş.l. Bogdan IONESCU


Prof. Dragoş BURILEANU
Prof. Claudius DAN

2
2010-2011 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 1/52

Un sistem de calcul lucrează cu reprezentări ale informaŃiei


prin execuŃia unei anumite înlănŃuiri de operaŃii simple:
 algoritm

Algoritm = o metodă, un procedeu care asigură rezolvarea


3.1. ExecuŃia algoritmilor unei probleme complexe de calcul prin executarea unor
operaŃii punctuale.
> Foarte importantă este înŃelegerea operaŃiilor şi a modului
în care se succed operaŃiile într-un algoritm, şi prin urmare
într-un program.
 permite localizarea eventualelor erori,
 algoritmul unei probleme poate fi destul de diferit de
modul “natural” de implementare,
3 4
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 2/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 3/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

Cum se calculează restul împărŃirii ? Se ia un exemplu practic pentru verificarea algoritmului:

m = 42, n = 28 pasul 1: citeşte m,n;


r = m – int(m / n) * n unde int(m / n) = parte întreagă pasul 2: atribuie lui cmdc valoarea lui n;
2: cmdc = 28
pasul 3: atribuie lui r restul împărŃirii m:n;
3: r = 14 pasul 4: cât timp r≠0;
Cum se implementează bucla cât timp ? 4: r ≠ 0 pasul 5: atribuie lui m valoarea lui n;
5: m = 28 pasul 6: atribuie lui n valoarea lui r;
while (condiŃie) 6: n = 14 pasul 7: atribuie lui cmdc valoarea lui n;
{ pasul 8: atribuie lui r restul împărŃirii m:n;
7: cmdc = 14
pasul 9: repetă pasul 4;
instrucŃiuni; 8: r = 0 pasul 10:scrie valoare cmdc;
10: rezultat cmdc = 14 pasul 11:stop;
}
iteraŃia 1 iteraŃia 2 iteraŃia n
condiŃie condiŃie condiŃie
Să fim pesimişti, totuşi să mai încercăm un exemplu ce implică
condiŃie
adevărată adevărată adevărată falsă mai multe iteraŃii, poate ne scapă ceva ...
7 8
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 6/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 7/52

Testul 2, alte valori: Concluzie: la elaborarea unui algoritm trebuie verificat


modul de execuŃie al acestuia:
m = 28, n = 42 pasul 1: citeşte m,n;
2: cmdc = 42 pasul 2: atribuie lui cmdc valoarea lui n;  iniŃial, din punct de vedere al algoritmului exprimat în limbaj
3,4: r = 28, r ≠ 0 pasul 3: atribuie lui r restul împărŃirii m:n; natural (validarea teoretică),
pasul 4: cât timp r≠0;
5: m = 42 pasul 5: atribuie lui m valoarea lui n;
6: n = 28  ulterior, din punct de vedere al algoritmului exprimat într-un
pasul 6: atribuie lui n valoarea lui r;
7: cmdc = 28 pasul 7: atribuie lui cmdc valoarea lui n; limbaj structurat, apropiat de limbajul de programare, simulând
8,4: r = 14, r ≠ 0 pasul 8: atribuie lui r restul împărŃirii m:n; modul de execuŃie al calculatorului (validarea practică),
5: m = 28 pasul 9: repetă pasul 4;
pasul 10:scrie valoare cmdc;
6: n = 14 pasul 11:stop; • identificare operaŃii elementare
7: cmdc = 14
• identificare operaŃii complexe
8: r = 0 prin
19: rezultat cmdc = 14 Detaliu: numerele trebuie introduse • identificare erori de principiu date de test
(exemple)
în ordine “mare-mic” (optimal). • identificare erori ascunse
9 10
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 8/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 9/52

Modul de execuŃie al calculatorului: > Criterii de apreciere a calităŃii algoritmului ?


EnunŃ: să se implementeze algoritmul de calcul al
P • evident, în primul rând să funcŃioneze corect,
factorialului numărului n (n!)
1
• să aibă un număr redus de paşi (să fie eficient),
pasul 1: citeşte n; 2
pasul 2: atribuie lui i valoarea n-1; criterii oarecum
pasul 3: atribuie lui p valoarea n; 3 subiective
pasul 4: cât timp i>=1
pasul 5: atribuie lui p valoarea p*i; 4 • să aibă o complexitate de calcul redusă.
pasul 6: atribuie lui i valoarea i-1;
pasul 7: repetă pasul 4 5 8 criteriu ştiinŃific, anticipează necesarul
pasul 8: scrie valoare p;
pasul 9: stop; 6 9 de resurse de calcul

7 Complexitate de calcul = numărul de operaŃii de bază,


Cum sunt executate instrucŃiunile? elementare, efectuate de algoritm.
12
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 10/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 11/52
> OperaŃie elementară ? n operaŃii
- o adunare, scădere, ... elementare
- o comandă, apelarea unei funcŃii simple, ... O(n)

Exemplu (factorial):

1: citeşte n; 1 : O(1) 3.2. Introducere în limbajul C


2: atribuie lui i valoarea n-1; 2 : O(1)
3: atribuie lui p valoarea n; 3 : O(1)
4: cât timp i>=1; 4,5,6,7: O(2*(n-1))
5: atribuie lui p valoarea p*i; 8 : O(1)
6: atribuie lui i valoarea i-1; -------------------------
7: repetă pasul 4 O(1+1+1+2*(n-1)+1)
8: scrie valoare p;
9: stop; O(2*(n+1))

> Este totuşi un calcul aproximativ, de ce ?


13 14
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 12/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 13/52

Scurt istoric al limbajului C: Principalele caracteristici ale limbajului C


• 1969: începe dezvoltarea sistemului de operare Unix în
limbajul de asamblare al calculatorului DEC PDP-7: > dimensiuni reduse ale pachetului de programe de
dezvoltare (eficient),
 limbaj greoi, număr mare de erori
• 1970: pe baza limbajului de asamblare A > utilizare extensivă a apelurilor de funcŃii (modularitate),
(assembler) este dezvoltat un nou limbaj B
> control relaxat al tipurilor de date,
(Bell Labs):
Digital Equipment
 un singur tip de date: word. > limbaj de programare structurat,
Corporation PDP-7
• 1971: Dennis Ritchie dezvoltă un limbaj
> permite şi programarea de nivel scăzut (limbaj de
complet nou numit C,
asamblare - assembler),
• 1989-’90: ANSI (American National Standards Institute) şi > permite utilizarea pointerilor pentru manipularea memoriei,
ISO (International Standards Organization) definesc standardul tablourilor, structurilor şi funcŃiilor (execuŃie rapidă)
ANSI-C.
15 16
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 14/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 15/52

Principalele caracteristici ale limbajului C (continuare) Compilarea programelor în C

> 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 în limbaj 3.3. Bazele programării în limbajul C


program de asamblare
preprocesor compilator
sursă

program
program obiect editor de executabil
asamblor
legături

mesaje de alte proceduri, mesaje de


eroare biblioteci, etc. eroare

19 20
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 18/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 19/52

Structura unui program C Structura unui program C (continuare)


comenzi de
#include<stdio.h> preprocesare > SemnificaŃia componentelor structurale ale programului este

struct TipulDreptunghi următoarea:
{ definiŃii de tip
int lungime, latime; • comenzile de preprocesare: specificate de caracterul #,
}; prototipuri de sunt în general folosite pentru a facilita schimbarea şi
int ArieDreptunghi(int lungime, int latime); funcŃii compilarea programelor în diferite medii de execuŃie.

int i,j; // contori declaraŃii  informează preprocesorul să realizeze anumite acŃiuni:
int main() variabile globale să înlocuiască text, să insereze conŃinutul altor fişiere în
{
… programul fişierul sursă, să evite compilarea unei anumite porŃiuni din
}
principal (main) fişier, etc.
int ArieDreptunghi(int lungime, int latime)
{ corpul funcŃiilor De exemplu: #include <nume_librarie.h>
return lungime*latime;
} anunŃate #define lungime 80
21 22
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 20/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 21/52

Structura unui program C (continuare) Structura unui program C (continuare)


• comenzile de preprocesare (continuare) • comenzile de preprocesare (continuare)
#include <nume_fisier.h> > Bibliotecile de funcŃii uzuale disponibile în C:
 include conŃinutul fişierului desemnat (nume_fisier.h) conŃine funcŃii matematice, de exemplu:
math.h
în program. Acesta este numit şi fişier antet (header - .h) sqrt, pow, log, sin, fabs, fmod, etc.

 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>.

conŃine funcŃii de lucru cu timpul şi date Exemplu: #define PI 3.14


time.h calendaristice, de exemplu: timpul în secunde, #define MAX 1000
ore, zile, luni, an, timpul procesorului, etc.
int main(void) cuvântul “MAX” va fi înlocuit cu
conŃine constante ce specifică valorile maxime { valoarea 1000

limits.h ale tipurilor de date, de exemplu: INT_MAX, return MAX*3;
INT_MIN, SHRT_MAX, LONG_MAX, etc. }
25 26
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 24/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 25/52

Structura unui program C (continuare) Structura unui program C (continuare)


• prototipuri de funcŃii: anunŃarea şi specificarea funcŃiilor
• definiŃii de tip: specificarea unor noi tipuri de date ce sunt
de regulă definite pe baza tipurilor de date de bază furnizate ce vor fi definite şi folosite în cadrul programului
de limbajul C. (prototip = model).
Prototipul unei funcŃii are următoarea formă în C:
De exemplu:
<tip_date_de_iesire> NumeFunctie(<lista_date_de_intrare>);
struct persoana enum tipuri {MIC=10, MEDIU=50,
{ MARE=100};
“;” corpul
... tipul valorii returnate lista variabilelor
int varsta; funcŃiei
de funcŃie, ex.: int, identificatorul de intrare folosite
float greutate; enum tipuri Var; nu este
float, ... (returnează funcŃiei, unic, în cadrul funcŃiei,
Var=MEDIU;  Var=50 specificat
char nume[25]; o singură valoare) ex.: (int i, float j)
aici.
} membru_familie; Var=MARE;  Var=100
Exemplu: int NumarPrim(int x); sau void Punct(int X1, int X2);
27 28
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 26/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 27/52

Structura unui program C (continuare) Structura unui program C (continuare)


• declaraŃii şi definiŃii globale: definirea de variabile globale. • corpul funcŃiilor: în această secŃiune sunt detaliate
funcŃiile ce alcătuiesc programul.
Ce inseamnă variabilă globală ? zonă variabile globale
 funcŃia main() ce indică programul principal, aceasta
int ArieDreptunghi(int lungime, int VarGlobala; nu trebuie să lipsească (obligatorie).
int latime) …
{ funcŃia main trebuie să returneze un
VarGlobala=100; corect
VarGlobala=100 int main() integer (norma ANSI).
i=10
i=10;eroare ! { int main(void)
return lungime*latime; int i,j; { void = vid, funcŃia nu are nici un
} … … argument.
ArieDreptunghi(10,14); return 0;
o funcŃie } } convenŃie:
variabilele i şi j nu există decât return 0 – nu sunt erori
în interiorul funcŃiei main (locale) variabila VarGlobala este return n – se returnează de regulă
valabilă peste tot (globală) codul erorii.
29 30
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 28/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 29/52
Structura unui program C (continuare) Structura unui program C (continuare)
• corpul funcŃiilor (continuare) > Alternativă: este posibil şi următorul mod de structurare
 funcŃiile ce au fost anunŃate prin intermediul prototipurilor al programului C:
de funcŃii din secŃiunea dedicată, declaraŃii
int i,j; // contori
int ArieDreptunghi(int lungime, int latime); prototip funcŃii ... variabile globale
int MultipluDe2(int x);
int ArieDreptunghi(int lungime, int latime) nu mai folosim
int ArieDreptunghi(int lungime, int latime) {
prototipuri, funcŃiile
{ corpul funcŃiilor return lungime*latime;
return lungime*latime; } sunt scrise integral
}

Ce s-a schimbat faŃă
int MultipluDe2(int x) AtenŃie:
{ int main() de structura prezentată
prototipul şi
if ((x%2)==0) return 1; { anterior: prototipuri
funcŃia trebuie
else return 0; … variabile globale, corp funcŃii
} să fie identice }
31 32
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 30/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 31/52

Structura unui program C (continuare) Structura unui program C (continuare)


• comentariile (continuare)
• comentariile :
= sunt pasaje de text ce sunt înlăturate de preprocesor, cu > Cum specificăm comentariile în C ?
Varianta 1:
alte cuvinte, nu sunt compilate şi nici interpretate.
// acest text este un comentariu “//” 
// şi acest text este tot un comentariu se comentează o
Atunci de ce să scriem comentarii ?
singură linie
-să explicăm funcŃionalitatea programului,
-să explicăm funcŃionalitatea anumitor funcŃii şi /* acest text este un comentariu Varianta 2:
şi acest text este tot un comentariu */ “/*” şi “*/” 
proceduri, se comentează tot
-să rezumăm anumite linii de cod complexe pentru a ce este cuprins
înŃelege rapid modul de execuŃie fără a fi nevoie să cazuri particulare: între “/*” şi “*/”
refacem calculul, /* comentariu // iar comentariu */ tolerat
-“de dragul” lizibilităŃii programului. /* text /* sa fim siguri */ text */
33 34
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 32/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 33/52

Structura unui program C (continuare)


Tipuri de date fundamentale în C
• comentariile : exemple
// deschide fisier .avi > Limbajul de programare C propune următoarele tipuri
res=AVIFileOpen(&avi, szFileName, OF_SHARE_DENY_WRITE, NULL);
fundamentale de date:
// deschide primul flux video
res=AVIFileGetStream(avi, pStream, streamtypeVIDEO, 0); - tipul alfanumeric
// recupereaza informatii fisier, avi info
AVIFileInfo(avi, &avi_info, sizeof(AVIFILEINFO)); - tipuri întregi
FrameNumber=AVIStreamLength(*pStream);

- tipuri reale
/* creaza o imagine binara in care deplasarea unui bloc de pixeli
sau situatia de discontinuitate este marcata cu valoarea 1 */ - tipul “void”
for (y=0; y<SizeY; y++)
for (x=0; x<SizeX; x++) - tipul enum
if ((int)MotionAmpl[y][x]==0)
binaryImg[y][x]=0;
else > Există şi tipuri compuse, ce folosesc tipurile fundamentale,
binaryImg[y][x]=1; acestea vor fi însă discutate ulterior.

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)

> Tipul alfanumeric: > Tipul alfanumeric (continuare)


00000000
- variabile de tip caracter 00000001 O variabilă de tip caracter poate stoca şi numere întregi
char
- întreg mic ... deoarece caracterele sunt identificate de sistemul de calcul
11111111 pe baza unui cod unic numit şi cod ASCII.
stocare date pe 8 biŃi
ASCII = American Standard Code for Information Interchange
> Variante:
char
[-128 ; 127]
signed char
unsigned char [0 ; 255]
> Este număr întreg sau caracter ?
este şi una şi alta ... Extras din tabela de coduri ASCII

37 38
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 36/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 37/52

Tipuri de date fundamentale în C (continuare) Tipuri de date fundamentale în C (continuare)


> Tipul alfanumeric (continuare): > Tipul alfanumeric (continuare):
Există mai multe extensii ale standardului ASCII pentru a Exemple:
putea reprezenta şi caractere specifice fiecărei limbi: char a; AtenŃie: constantele
• ISO 8859-16 se numeşte South-Eastern European şi unsigned char initiala; de tip caracter se
cuprinde limbile albaneză, croată, maghiară, poloneză, signed char c; specifică între
română, şi slovenă, dar şi franceză, italiană şi gaelică apostrof ‘ ’
(ortografie nouă). a=10;
• ISO 8859-5 se numeşte Cyrillic şi cuprinde limbile initiala=‘I’; Cum ştie sistemul când
burgară, belorusă, macedoniană, rusă, sârbă (şi în trecut c=-80; să folosească codul ASCII
şi limba ucrainiană). sau caracterul ?
• ISO 8859-7 se numeşte Greek şi cuprinde limba greacă Se subînŃelege din context:
cod ASCII
modernă.
a+initiala+’!’ = 10+73+33 = 116
• etc. întreg
39 40
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 38/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 39/52

Tipuri de date fundamentale în C (continuare) Tipuri de date fundamentale în C (continuare)


> Tipuri întregi: > Tipuri întregi (continuare)
> Variante:
int - variabile de tip întreg unsigned int dependent de sistem (~32 biŃi)
[0; 232-1], (unsigned)
> Variante:
stocare date pe 16 biŃi long int stocare date pe 32 biŃi
short int
[- 32768; 32767], (short) signed long int [- 231; 231-1], (long)
signed short int
unsigned long int stocare date pe 32 biŃi
unsigned short int stocare date pe 16 biŃi
unsigned long [0; 232-1],
unsigned short [0; 65535],

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

stocare date pe 32 biŃi


[1.175494351x10-38 ; 3.402823466x10+38] double - variabile de tip real în precizie dublă.

> 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

Tipuri de date fundamentale în C (continuare) Tipuri de date fundamentale în C (continuare)


> Tipul “void”: > Tipul enum:
void = vid, nu este un tip propriu-zis de date, deoarece nu enum = reprezintă un tip de date definit de utilizator ce
conŃine nici o valoare. constă într-un set de constante şiruri de caracter numite şi
Este folosit în trei situaŃii: enumeratori.

• 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

Tipuri de date fundamentale în C (continuare) Tipuri de date fundamentale în C (continuare)


> Tipul enum (continuare) > Tipul enum (continuare)
Exemple: Exemple:
0 1 2 3 0 1
enum Figuri { Romb, Patrat, Cerc, Triunghi }; enum Bool { False, True}; variabila proba este
… variabila proba este … de tip Bool.
Figuri proba; de tip Figuri. Bool proba;
se afişează pe
… …
se afişează pe ecran valoarea 1.
proba=Romb; proba=True;
printf(“%d”, proba); ecran valoarea 0 ? printf(“%d”, proba);
proba=Cerc; proba=0; ~proba=False
se afişează pe
printf(“%d”, proba); proba=TRue; Eroare: limbajul C
ecran valoarea ???
… … este case-sensitive,
TRue != True
47 48
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 46/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 47/52
Tipuri de date fundamentale în C (continuare) Tipuri de date fundamentale în C (continuare)
> Tipul enum (continuare) AtenŃie: valori întregi
> Tipul enum (continuare)
Exemple:
10 5 8 Variabilele de tip enum sunt folosite în felul următor: peste
enum Figuri { Romb=10, Patrat=5, Cerc=8 }; tot în cod se înlocuieşte constanta şir de caracter (enumerator)
… variabila proba este cu valoarea numerică a acesteia
Figuri proba; de tip Figuri.
… implicită de la 0 la n,
proba=Romb; se afişează pe
printf(“%d”, proba); ecran valoarea 10 ?
specificată de utilizator (întreagă)
proba=Cerc;
printf(“%d”, proba); se afişează pe
ecran valoarea ??? NB: limbajul C este case-sensitive, alpha!=Alpha!=ALPHA ...

49 50
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 48/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 49/52

Tipuri de date fundamentale în C (continuare) Tipuri de date fundamentale în C (continuare)


> Constante = un caz particular de variabilă a cărei valoare nu > În limbajul C se pot defini tipuri sinonime pentru tipurile de
poate fi modificată pe parcursul execuŃiei programului. date existente, astfel denumirea acestora poate fi înlocuită
cu o denumire specificată de utilizator.
- se specifică cuvântul cheie const înaintea
const
tipului variabilei. - se specifică cuvântul cheie typedef urmat
typedef
x este o variabilă întreagă de tipul substituit şi noua denumire.
Exemplu: ce are valoarea 10.
Exemplu: tipul numit “intreglung” este
int main()
Eroare: constantă definit ca fiind long int
{ typedef long int intreglung;
const int x=10; neiniŃializată ! typedef double tipreal; tipul numit “tipreal” este definit
const char c; ... ca fiind double
x=14; Eroare: se atribuie o intreglung x,y;
return 0; valoare unei variabile ce tipreal a,b; x,y sunt long int
} poate fi doar citită a,b sunt double
51
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 50/52 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2008-2009 51/52

Sfârşitul Cursului 3

53
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 52/52

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