Sunteți pe pagina 1din 18

Capitolul 3

DATE ŞI TIPURI DE DATE ÎN LIMBAJUL C

Daniela Saru - "Programarea calculatoarelor. Note de curs” – Ed. Printech, 2011 / slides rev. 2021 17
3.1 Noţiunile de date şi tip
Date :
- „informaţii furnizate” sistemului de calcul pentru a obţine de la acesta
rezultatele dorite;
- pot fi situate în afara sistemului de calcul (caz în care sunt citite prin
intermediul unui dispozitiv periferic) sau se pot afla în memorie, fiind
rezultatul unor calcule anterioare;
- de obicei, sub formă de text – secvenţă de caractere ce aparţin unui anumit
set de caractere, bine definit.
- uneori, sub formă de sunete sau imagini (nu abordăm acum acest aspect!)

Tip de date :
- stabileşte atât semnificaţia datelor cât şi restricţiile de folosire a acestora;
- compilatorul verifică „potrivirea” tipului datelor cu operaţiile cerute
(scrise) de programator.

Daniela Saru - "Programarea calculatoarelor. Note de curs” – Ed. Printech, 2011 / slides rev. 2021 17
 Din motive economice, sistemele de calcul folosesc un set de caractere cu
număr de componente destul de redus, care include însă:
- literele;
- cifrele zecimale;
- semnele de punctuaţie uzuale;
- o mare parte a simbolurilor matematice.

 Prin combinarea caracterelor din set poate fi exprimată sub formă de text o
largă gamă de date.

În afara sistemului de calcul, valorile de orice tip se pot reprezenta ca text:


- numere întregi: 27 -56 +234 (semn şi cifre zecimale);
- numere reale: 32.5 -4.752 +3.1 (semn, cifre zecimale, punct);
- caractere.

Daniela Saru - "Programarea calculatoarelor. Note de curs” – Ed. Printech, 2011 / slides rev. 2021 18
În interiorul sistemului de calcul, pentru reprezentarea valorilor se foloseşte o altă
formă (reprezentare binară).

Hardware-ul unui calculator electronic este format din dispozitive ce se pot afla în două
stări fizice distincte. Se spune că un astfel de dispozitiv memorează o cifră binară sau un
bit.

Număr Denumire Număr Semnificaţia ce poate fi asociată stărilor


de biţi de stări
1 bit (cifră binară) 21 = 2 valoarea 0 ; valoarea 1
8 octet (byte) 28 = Pot fi folosite pentru a codifica un set de
256 caractere: se asociază câte o stare (cod
numeric) fiecărui caracter
16 2 octeţi (word) 216 = Pot codifica numerele întregi cu valori în
65536 domeniul -32768...+32767, în acelaşi mod
ca pentru setul de caractere

Daniela Saru - "Programarea calculatoarelor. Note de curs” – Ed. Printech, 2011 / slides rev. 2021 18
Reprezentarea internă:
- codificare sub formă binară a valorii datelor;
- respectă reguli bine stabilite;
- permite specificarea unor seturi finite de valori (numărul valorilor din set este
restricţionat de numărul de biţi folosit)

Exemplu: reprezentarea pe 8 biţi a caracterelor din setul ASCII (American Standard


Code for Information Interchange): Anexa_Saru_2012.pdf

Caracterul Reprezentarea binară (codul ASCII) Codul ASCII (în baza 10)
A 0100 0001 65
B 0100 0010 66
a 0110 0001 97
b 0110 0010 98
5 0011 0101 53

Observaţie: reprezentarea numărului întreg 5 este diferită de reprezentarea


caracterului cifră 5, atât ca număr de biţi folosit cât şi ca valoare.
Numărul Reprezentarea binară - Valoarea (în
întreg compilator ce reprezintă numerele întregi pe 2 octeţi baza 10)
5 0000 0000 0000 0101 5

Daniela Saru - "Programarea calculatoarelor. Note de curs” – Ed. Printech, 2011 / slides rev. 2021 19
3.2 Tipuri de date specifice limbajului C
întreg - int
aritmetic
Scalare (valori suc- real - float
cesive, ordonate) caracter - char

pointer (adresă)

enumerare -enum

Structurate tablou (masiv)


(compuse pe baza
vor fi prezentate în
celor scalare) structură - struct
cadrul altor capitole
uniune - union

Tipul void - se foloseşte mai ales pentru lucrul cu funcţii şi pointeri, cu


semnificaţia de „nimic” sau de „orice tip”, după caz!

Daniela Saru - "Programarea calculatoarelor. Note de curs” – Ed. Printech, 2011 / slides rev. 2021 19
3.3 Tipuri de date scalare
Tipuri de bază Atribute
int short
char long
float signed
double unsigned
enum

Presupunând că se lucrează cu un compilator ce reprezintă numerele întregi pe


16 biţi (convenţie ce va fi utilizată pe tot parcursul acestor note de curs), iată
câteva exemple de tipuri de date ce pot fi declarate în cadrul programelor C:

Tip de date Număr de octeţi Domeniul de valori


int 2 -32768 ... +32767
long int (sau long) 4 -2147483648 ... +2147483647
unsigned long int
4 0 ... +4294967295
(sau unsigned long)
char 1 -128 ... 127

Daniela Saru - "Programarea calculatoarelor. Note de curs” – Ed. Printech, 2011 / slides rev. 2021 20
 Declararea variabilelor:
se face întotdeauna înainte de utilizarea acestora într-o
instrucţiune, apel de funcţie etc.
Declarare simplă:
float x, y; /*se declară 2 variabile, numite x si y, numere reale, pentru care se
rezervă automat în memoria asociată programului C câte o zonă
formată din exact atâţia octeţi câţi corespund tipului float*/
Declarare cu iniţializare:
int a, b=5, c=0;
/*- se declară 3 variabile, numite a, b şi c, numere întregi, pentru care se
rezervă automat în memoria asociată programului C câte o zonă formată
din exact atâţia octeţi câţi corespund tipului int;
- în zona de memorie asociată variabilei b se înscrie reprezentarea binară
a valorii întregi 5;
- în zona de memorie asociată variabilei c se înscrie reprezentarea binară a
valorii întregi 0;*/

Daniela Saru - "Programarea calculatoarelor. Note de curs” – Ed. Printech, 2011 / slides rev. 2021 20
Dimensiunea (în număr de octeţi) a reprezentării
interne (binare) a datelor – operatorul sizeof( )

sizeof(tip_de_dată)
sizeof(expresie)

De exemplu, fragmentul de program:


printf(”Tipul int se reprezintă intern pe %d octeţi\n”, sizeof(int));
printf(”Tipul long int se reprezintă intern pe %d octeţi\n”, sizeof(long));
printf(”Valoarea %d se reprezintă intern pe %d octeţi\n”, 25+7, sizeof(25+7));

are ca efect afişarea pe ecran a următoarelor informaţii:


Tipul int se reprezintă intern pe 2 octeţi
Tipul long int se reprezintă intern pe 4 octeţi
Valoarea 32 se reprezintă intern pe 2 octeţi

Daniela Saru - "Programarea calculatoarelor. Note de curs” – Ed. Printech, 2011 / slides rev. 2021 21
Tipul int (valori numerice întregi)
int signed int
long int (sau long) signed long int
short int (sau short) signed short in
unsigned int (sau unsigned)
unsigned long int (sau unsigned long)
unsigned short int (sau unsigned short)

Constantele de tip întreg pot fi exprimate în bazele de numeraţie 10, 8 sau 16,
precedate sau nu de semn (+ sau -):
 zecimal - un şir de cifre zecimale, dintre care prima nu este 0 (zero). Ex.: 15,
-27, +33;
 octal - cifra 0 (zero), urmată de un şir de cifre octale. Ex.: 017, -033, +041;
 hexazecimal - grupul de două caractere 0x sau 0X (zero şi x sau X), urmat de
un şir de cifre hexazecimale. Ex.: 0xF, -0x1B, +0x21;

u sau U, respectiv l sau L pot


Sufixele specifica şi valori constante de tip întreg
unsigned sau long. Ex.: 13u sau 13U, respectiv 117l sau 117L.

Daniela Saru - "Programarea calculatoarelor. Note de curs” – Ed. Printech, 2011 / slides rev. 2021 21
Citirea sau afişarea (scrierea) valorilor de tip întreg cu ajutorul funcţiilor de
bibliotecă standard se face folosind descriptori de format adecvaţi:
- zecimal - %d sau %i
- octal - %o
- hexazecimal - %x;
- variante - %ld %lo %lx (pentru long …)
- %hd %ho %hx (pentru short …)
- %u (pentru unsigned)
- %lu (pentru long unsigned)
- %hu (pentru short unsigned)

Observaţii:
 Erori greu de identificat - dacă nu se foloseşte un descriptor de format adecvat
tipului declarat
 Afişarea „tabelată” a valorilor:
printf(”m=%7d”, m); /* dacă m are valoarea 23, pe ecran apare m= 23*/
printf(”m=%-7d”, m); /* dacă m are valoarea 23, pe ecran apare m=23 */

Daniela Saru - "Programarea calculatoarelor. Note de curs” – Ed. Printech, 2011 / slides rev. 2021 22
Tipuri pentru valori numerice reale

Diferă prin:
float
double mărimea valorilor
long double precizia reprezentării valorilor
(numărul de cifre semnificative)

Exemplu:
Pentru un compilator ce reprezintă tipul int pe 2 octeţi, tipul float asigură o
precizie de 7 cifre zecimale semnificative şi exponentul maxim 38, reprezentarea
valorilor făcându-se pe 4 octeţi.
Tipul double asigură o precizie de 16 cifre zecimale semnificative (dublă
precizie) şi exponentul maxim 306, reprezentarea făcându-se pe 8 octeţi.

În cazul tipului long double reprezentarea valorilor se face pe 10 octeţi (precizie


extinsă).

Daniela Saru - "Programarea calculatoarelor. Note de curs” – Ed. Printech, 2011 / slides rev. 2021 22
Constantele de tip real pot fi scrise precedate sau nu de semn
 în notaţie obişnuită:
întreg.parte_fracţionară sau
întreg. sau
.parte_fracţionară
Ex. -5.1723 5. .327 +0.02 -.364 +6
 în notaţie ştiinţifică:
mantisă E exponent sau
mantisă e exponent
Exprimă valoarea mantisă x 10exponent
Ex. 0.312e5 reprezintă valoarea 31200.0
3.5E-3 reprezintă valoarea 0.0035

Observaţie: implicit, constantele de tip real sunt reprezentate în dublă precizie


(tipul double). Pentru a impune reprezentarea constantei ca valoare float sau long
double se folosesc sufixele f (sau F), respectiv l (sau L).
3.2 este constantă de tip double
3.2f şi -5.23F sunt constante de tip float
-56.32l şi 0.45L sunt constante de tip long double.

Daniela Saru - "Programarea calculatoarelor. Note de curs” – Ed. Printech, 2011 / slides rev. 2021 23
Citirea sau afişarea (scrierea) valorilor reale cu ajutorul funcţiilor de bibliotecă
standard se face folosind descriptori de format adecvaţi:
- pentru tipul float - %f (notaţie obişnuită)
- %e (notaţie ştiinţifică)
- %g (minimizează numărul de cifre afişate)
- pentru tipul double - %lf
- pentru tipul long double - %Lf

Descriptorii de format pot conţine şi alte elemente utile programatorului. De


exemplu, se poate preciza numărul minim de poziţii al câmpului de afişare şi, în
cadrul acestuia, numărul de cifre care să fie afişate după punctul zecimal:
printf(”x=%6.2f”, x); /* dacă x are valoarea 3.2, pe ecran apare x= 3.20
deoarece numărul minim de poziţii al câmpului de afişare
este 6 iar, dintre acestea, 2 sunt rezervate cifrelor de
după punctul zecimal*/

Daniela Saru - "Programarea calculatoarelor. Note de curs” – Ed. Printech, 2011 / slides rev. 2021 23
Tipul char (reprezentarea caracterelor)
În limbajul C deosebirea între numere şi caractere se estompează, caracterele
putând fi tratate ca valori numerice întregi pe baza numărului de ordine asociat în
set (de exemplu, codul ASCII):
char c; /*declararea unei variabile ce poate memora un singur
caracter*/
c=’a’; /*echivalent cu c=97; unde 97 este codul ASCII asociat
caracterului a */

Exemplu: următorul fragment de program citeşte de la tastatură un caracter şi


apoi afişează pe ecran atât caracterul cât şi codul său (exprimat în baza 10).

char caracter;
printf(”Tastaţi un caracter şi ENTER:”) ;
scanf(”%c”, &caracter);
printf(”Codul numeric al caracterului %c este %d \n”, caracter, caracter);

Ex_3_char.C

Daniela Saru - "Programarea calculatoarelor. Note de curs” – Ed. Printech, 2011 / slides rev. 2021 24
Constante de tip caracter:
 Imprimabile – ex. ’A’ sau ’7’
 Neimprimabile - cu ajutorul codului numeric asociat, în una dintre
următoarele forme: \cifre_zecimale sau \xcifre_hexazecimale sau
\0cifre_octale.
 Secvenţe de control (constante caracter speciale) - tot între caractere
apostrof:
\a avertizare sonoră
\b revenire la caracterul precedent (backspace)
\f avans la pagină nouă (form feed)
\n sfârşit de linie (new line)
\r revenire la început de linie (carriage return)
\t tab orizontal
\v tab vertical
\\ caracterul \
\’ caracterul ’
\’’ caracterul ’’
Ex_3_escape.C
\? caracterul ?

Daniela Saru - "Programarea calculatoarelor. Note de curs” – Ed. Printech, 2011 / slides rev. 2021 24
Constantele şir de caractere se scriu între caractere ghilimele:
De exemplu: ”Mesaj” sau ”Acesta este un şir de caractere”.
Detalii: în cadrul capitolelor următore

Codul ASCII = cod standard pentru transmiterea de date folosit atât pentru
reprezentarea textului (litere, numere, semne de punctuaţie), cât şi a comenzilor
de non-input (caractere de control).
 Codul ASCII standard foloseşte grupuri de 7 biţi pentru fiecare simbol şi
poate reprezenta 128 caractere.
 Codul ASCII extins foloseşte un sistem de codare cu 8 biţi şi poate
reprezenta 256 de caractere.
 Codul ASCII nu este singurul folosit în programare. De exemplu, un alt
cod – numit Unicode - cu versiunile de 8, 16 şi 32 de biţi, a devenit codul
standard pentru sistemele de operare moderne şi pentru browsere Web, în
special versiunea de 32 de biţi permiţând codificarea tuturor caracterele
din principalele limbi ale lumii.

https://www.asciitable.com/

Anexa_Saru_2012.pdf

Daniela Saru - "Programarea calculatoarelor. Note de curs” – Ed. Printech, 2011 / slides rev. 2021 25
Tipul pointer
Exemplu:
int m, k;
int * p; /*se declară variabila p ca pointer la valori de tip int*/
k = 10;
p = &k; /*se atribuie variabilei p valoarea: adresa variabilei k*/
m = *p; /*se atribuie variabilei m valoarea de tip int ce se află în memorie la
adresa înscrisă în variabila p (conţinutul de la adresa p)*/

Observaţii:
- variabila pointer se declară întotdeauna împreună cu tipul de date a cărui
adresă de memorie o va putea reprezenta;
- simbolul * se foloseşte atât la declararea variabilei pointer cât şi la utilizarea
acesteia, dar cu semnificaţii diferite;
- simbolul & se foloseşte în acest context pentru a obţine ca valoare adresa de
memorie a unei variabile.

Detalii: gradual, în cadrul capitolelor următoare

Daniela Saru - "Programarea calculatoarelor. Note de curs” – Ed. Printech, 2011 / slides rev. 2021 25

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