Sunteți pe pagina 1din 9

2022/10/05 09:10 1/9 Tipuri de date

Tipuri de date

Scopul acestui laborator este prezentarea noțiunilor de bază legate de bazele de numerație,
formatele de reprezentare, variabile, operatori și funcții de intrare/ieșire. Sursa de lucru pentru acest
laborator poate fi descărcată de aici:

laborator2.cpp

1.Baze de numerație

Baza 10

Pentru a putea scrie un numar în baza 10, avem nevoie de cifre care fac parte din următorul set:
0,1,2,3,4,5,6,7,8,9. După cum este bine cunoscut, un număr în baza 10 se poate descompune după
următoarea regulă: Fie numărul 12345, atunci:

$12345 = 1*10^4+2*10^3+3*10^2+4*10^1+5*10^0 $

Baza 2

Un număr este reprezentat în baza 2, utilizând doar două simboluri: 0 și 1. Regula de calcul este
asemănatoare cu cea a numerelor codificate în baza 10, unde fiecare simbol este corespunzător unei
puteri a lui 2.

Ex: $1010 = 1*2^3+0*2^2+1*2^1+0*2^0.$

Deci, 1010 în baza 2 este egal cu 10 în baza 10.

După cum se poate observa, biții unui număr în binar corespund puterilor lui 2. Acest lucru face ca
bitul din dreapta să corespundă lui 2 la puterea 0, iar bitul din stanga lui 2 la puterea 7 (pentru tipul
de date unsigned char). Bitul din dreapta având corespondent cea mai mică putere a lui 2, va conta
cel mai putin în valoarea numărului, motiv pentru care se mai numește si LSB ( least significant bit),
iar bitul din stanga, corespunzând celei mai mari puteri a lui doi se va numi MSB ( most significant bit
).

Cursuri Academia Tehnică Militară "Ferdinand I" - https://wiki.mta.ro/


Last update: 2022/10/05 08:23 c:1:prog:lab:lab2 https://wiki.mta.ro/c/1/prog/lab/lab2

Baza 16

Pentru a reprezenta un număr în baza 16, vom utiliza simbolurile bazei 10, la care vom adăuga
următoarele:

A -> 10
B -> 11
C -> 12
D -> 13
E -> 14
F -> 15

Cu alte cuvinte, 13 în baza 10 reprezintă D în baza 16. Vom folosi același algoritm de descompunere a
unui număr în baza 16. Conversia unui număr din baza 16 în baza 10 se realizează după următorul
exemplu:

$1AF4 = 1*16^3+10*16^2+15*16^1+4*16^0 $ $1AF4 =


1*4096 + 10*256 + 15*16 + 4*1 $ $1AF4 = 4096 + 2560 +
240 + 4 = 6900 $

În concluzie, 1AF4 în baza 16 este numărul 6900 în baza 10.

2.Formate de reprezentare

Numere întregi

În memoria unui calculator, valorile numerice sunt salvate sub formă de unor șiruri de biți. Pentru
tipurile întregi valorile vor fi reprezentate în baza 2, iar valorile acestora pot fi convertite după cum a
fost arătat la punctele anterioare.

Chiar dacă în memorie numerele sunt stocate în baza 2 (folosind doar simbolurile
0 și 1), programatorul poate interpreta această valoare în orice bază, iar valoarea
rămâne aceeași. De exemplu, 1010 în baza 2 reprezintă numărul 10 în baza 10 și
A în baza 16 - chiar dacă este scris în alt mod, valoarea efectivă a numărului
rămâne aceeași.

Virgulă fixă

https://wiki.mta.ro/ Printed on 2022/10/05 09:10


2022/10/05 09:10 3/9 Tipuri de date

Tipurile de date întregi nu pot reprezenta decât numere naturale. Totuși, există nevoia reprezentării
unor numere fracționare ( numere cu zecimale ). Pentru a explica mai bine acest format de
reprezentare, vom studia un exemplu. Presupunem ca vrem să memorăm valoarea 2.5. Din modul de
stocare al informației pe care îl cunoaștem momentan, nu putem reprezenta un astfel de număr.
Pentru a rezolva această problemă, numărul este împărțit cu ajutorul unei virgule fixe astfel:

$b7$ $b6$ $b5$ $b4$ $b3$ $b2$ . $b1$ $b0$ (se alege
formatul 6.2)

În acest moment, cei 8 biți nu vor mai corespunde puterilor lui 2, așa cum știam, ci după cum
urmează:

$2^5$ $2^4$ $2^3$ $2^2$


$2^1$ $2^0$.$2^{-1}$
$2^{-2}$ $b7$ $b6$ $b5$
$b4$ $b3$ $b2$.$b1$ $b0$

Astfel, numărul 2.5 în baza 10 va fi reprezentat în formai binar ca având valoarea 000010.10.

CC2(Cod Complement față de 2)

Acest format de reprezentare este folosit pentru a putea reprezenta numere negative. Vom folosi
următorul exemplu: se dorește reprezentarea numărului -3 într-o locație de memorie de 8 biți (un
octet).

Pasul 1: scriem în format binar numărul 3

3 = 00000011

Pasul 2: Calculăm complementul acestuia

~3 = ~00000011 = 11111100

Pasul 3: Adăugăm 1 la valoarea obținută la pasul 2

11111100 + 1 = 11111101

În concluzie 11111101 este reprezentarea în CC2 a valorii -3.

Virgulă mobilă

Acest format a fost creat pentru a putea reprezenta numere cu o precizie cat mai bună. Formatul în
virgulă mobilă este standardizat IEEE 754. Un număr stocat astfel în memorie va fi constituit astfel:

Cursuri Academia Tehnică Militară "Ferdinand I" - https://wiki.mta.ro/


Last update: 2022/10/05 08:23 c:1:prog:lab:lab2 https://wiki.mta.ro/c/1/prog/lab/lab2

Semn: pentru numere pozitive este 0, iar pentru numere negative este 1

Exponent: este calculat ca un numar pe 8 biti, din care se scade din 127 sau aduna la 127, dupa caz.

Mantisa: în fața primului bit din mantisă, se află un 1 ( implicit ), după care biții sunt corespunzători
valorilor 1/2, 1/4, etc.

Numărul va fi calculat astfel: $(-1)^{sign} * 2^{exponent} * mantisa$

Pentru a înțelege mai bine acest format de reprezentare, consultați link-ul


următor: http://www.h-schmidt.net/FloatConverter/IEEE754.html

3.Variabile

Orice program C conține variabile sau constante de lucru. Numele variabilelor, alături de numele
funcțiilor și numele vectorilor fac parte din clasa identificatorilor. Un identificator trebuie să înceapă
cu literă sau cu underscore și trebuie sa aibă o dimensiune maximă de 32 de caractere. Denumirea
unei variabile trebuie să fie sugestivă pentru ce reprezintă acea varibilă, dar trebuie făcut un
compromis între lungimea și detaliile din denumire. Există o serie de denumiri consacrate, un bun
exemplu fiind variabilele cu numele i,j,k. Acestea sunt folosite pentru indexarea unui vector.

4.Tipuri de date

În funcție de scopul pentru care sunt folosite, datele pot avea diferite tipuri. Prin alegerea unui tip de
dată a unei variabile, de fapt alegem modul în care este reprezetată informația în memorie, spațiul de
memorie ocupat și precizia cu care poate fi reprezentate valorile dorite.

https://wiki.mta.ro/ Printed on 2022/10/05 09:10


2022/10/05 09:10 5/9 Tipuri de date

5.Funcții de intrare/ieșire

Pentru a putea scrie un program care să interacționeze cu utilizatorul, un programator trebuie sa


folosească funcții de intrare/ieșire. În cazul limbajului C, pot fi utilizate funcțiile printf și scanf. Afişarea
datelor pe ecran cu un format specificat se realizează apelând funcţia printf(). Această funcţie este
declarată în fişierul antet stdio.h şi are următoarea sintaxă:

int printf(format, expresie1,expresie2,...., expresie n);

Efect:

Se evaluează expresiile şi se scriu în ordine valorile acestora, în forma specificată de parametrul


format.
În caz de succes, funcţia returnează numărul de caractere afişate.

Parametrul format este un şir de caractere care poate conţine specificatori de format şi, eventual, alte
caractere. În paramentrul format trebuie să existe câte un specificator de format pentru fiecare
expresie din lista de parametri (specificatorul 1 corespunde expresiei 1, specificatorul 2, corespunde
expresiei 2 etc.). Celelalte caractere din parametrul format vor fi afişate pe ecran în poziţiile
corespunzătoare. Un specificator de format are următoarea sintaxă:

% [ind] [lg] [.prec] [l|L] literă_tip

Un specificator de format începe cu caracterul %, trebuie să conţină obligatoriu o literă care să indice
tipul expresiei corespunzătoare şi, eventual, alte elemente opţionale.

Litera care indică tipul poate fi:

d pentru tipul int afişat în baza 10

Cursuri Academia Tehnică Militară "Ferdinand I" - https://wiki.mta.ro/


Last update: 2022/10/05 08:23 c:1:prog:lab:lab2 https://wiki.mta.ro/c/1/prog/lab/lab2

o pentru tipul int afişat în baza 8


u pentru tipul unsigned int afişat în baza 10
x,X pentru tipul int afişat în baza 16
f pentru tipul float afişat în formatul parte_intreaga.parte_fractionara
e,E pentru tipul float afişat în format exponenţial cifra.parte_zecimalae±exponent
g se aplică una dintre conersiile corespunzătoare literei f sau literei e (cea care se reprezintă cu
un număr minim de caractere).
c pentru tipul char; afişează pe ecran caracterul corespunzător
s expresia este un şir de caractere care va fi afişat pe ecran

Opţional înainte de literă_tip poate să apară litera l sau L (pentru long int sau long double).

Opţional poate fi specificat lg – numărul minim de caractere pe care se va realize afişarea.

Pentru expresiile de tip real sau şir de caractere se poate specifica şi precizia prec. Pentru valorile reale, aceasta indică
numărul de cifre de la partea zecimală care vor fi afişate. Pentru şiruri de caractere, precizia indică numărul de
caractere din şir care se afişează.

Exemplu:

#include <stdio.h>
void main()
{
int a=15;
printf("Acest sir se afiseaza ca atare\n");
printf("\tvariabila a are valoarea: %d sau %o sau %x\n",a,a,a);
}

Citirea datelor cu format specfificat se realizează apelând funcţia scanf(). Această funcţie permite
citirea datelor sub controlul unui format specificat. Ea este declarată în fişierul antet stdio.h şi are
următorul format:

int scanf(format, adr_var1, adr_var2,…adr_varn);

Funcţia parcurge succesiunea de caractere introdusă de la tastatură şi extrage valorile care trebuie
citite conform formatului specificat. Valorile citite sunt memorate în ordine în variabilele specificate
prin adresa lor în lista de parametri ai funcţiei scanf(). Adresa unei variabile se obţine cu ajutorul
operatorului de referenţiere &. Funcţia scanf() returnează numărul de valori citite correct. În cazul
unei erori, citirea se întrerupe în poziţia în care a fost întâlnită eroarea. Parametrul format este un şir
de caractere care poate conţine specificatori de format, caractere albe şi alte caractere. Specificatorul
de format are următoarea sintaxă:

% [*] [lg] [l/L] litera_tip

Exemplu:

#include <stdio.h>
void main()
{
int a;
scanf("%d", &a);
printf("\tVariabila a are valoarea: %d sau %o sau %x\n", a, a, a);

https://wiki.mta.ro/ Printed on 2022/10/05 09:10


2022/10/05 09:10 7/9 Tipuri de date

Pentru mai multe informații în legătură cu aceste două funcții accesați link-urile următoare:

http://www.cplusplus.com/reference/cstdio/printf/
http://www.cplusplus.com/reference/cstdio/scanf/

6.Exerciții

1. Completați următorul tabel:

2. Reprezentați în virgulă fixă numerele 3.75 și 15.0625.

3. Reprezentați binar numerele -5 și -114.

4. Folosind Convertorul (de la link-ul de mai sus) pentru numerele reale, determinați cea mai mică
valoare pozitivă pe care o poate avea un număr în simplă precizie.

5. Scrieți un program în care să declarați și să inițializați câte o variabilă, fiecare inițializată cu valori
menționate în bazele 2, 8, 10 și 16. Afișați toate aceste variabile, fiecare pe câte un rand.

6. Scrieti un program care:

a. citeste de la tastatura numerele: 214000000, 32000, 65000, 429000000, 3.4e+30, 3.4e-500,


1.5e+200 si le memoreaza in variabilele corespunzatoare.
b. citeste de la tastatura numarul 5.6784 iar apoi il afiseza cu doua si cu trei zecimale.
c. citeste de la tastatura 3 numere intregi, de 2 cifre, de 3 cifre si de 4 cifre si le afiseaza
aliniate la dreapta.

Ex:

12
123
1234

d. citeste de la tastatura un numar intreg in baza 10 si il afiseaza in baza 10, in baza opt si in
baza 16.

7. Scrieti un program in care declarați trei variabile de tip int si:

le afisati cu semn (inclusiv pe cele pozitive);


le afisati aliniate la dreapta;
le afisati in baza 10, baza 8 si baza 16, fiecare variabila pe cate un rand si valorile in baza 10,8

Cursuri Academia Tehnică Militară "Ferdinand I" - https://wiki.mta.ro/


Last update: 2022/10/05 08:23 c:1:prog:lab:lab2 https://wiki.mta.ro/c/1/prog/lab/lab2

si 16 separate prin tab (Indiciu : \t);

Exemplu:

8. Scrieţi un program care va citi de la tastatură 3 intregi, h, m, s, reprezentând ora, minutul şi


secunda dintr-un anumit moment al zilei. Afişarea se va face sub forma HH:MM:SS (2 cifre pentru
fiecare, chiar daca valorile sunt mai mici decat 10).

Exemplu:

Intrare Ieșire

h=15 15:02:03

m=2

s=3

Nu vor fi folosite bucle repetitive sau structuri decizionale.

9. Sursa: Cerchez E., Şerban M., Programarea în limbajul C/C++ pentru liceu / pag. 42. Se
consideră un număr natural format din 5 cifre, ABCDE. Să se afişeze un tringhi format din cifrele
numărului astfel:

C
BCD
ABCDE

Nu se vor folosi bucle repetitive sau construcții decizionale.

10. Se consideră un număr real, x, reprezentând un unghi exprimat în radiani. Să se convertească în


grade, minute şi secunde valoarea lui x.

Hint: Va trebui să folosiți conversii de tip.

https://wiki.mta.ro/ Printed on 2022/10/05 09:10


2022/10/05 09:10 9/9 Tipuri de date

From:
https://wiki.mta.ro/ - Cursuri Academia Tehnică Militară "Ferdinand I"

Permanent link:
https://wiki.mta.ro/c/1/prog/lab/lab2

Last update: 2022/10/05 08:23

Cursuri Academia Tehnică Militară "Ferdinand I" - https://wiki.mta.ro/

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