Documente Academic
Documente Profesional
Documente Cultură
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.
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.
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)
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
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
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
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)
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;
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.
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
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
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 */
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.
Daniela Saru - "Programarea calculatoarelor. Note de curs” – Ed. Printech, 2011 / slides rev. 2021 25