Pe scurt
Un program lucrează cu valori de feluri diferite. Numărul de elevi dintr-o clasă este un număr întreg; înălțimea unui elev poate cere un număr cu parte zecimală; răspunsul la întrebarea „are manualul?” este adevărat sau fals; inițiala unui nume este un caracter. Felul valorii se numește tip de date.
Tipul te ajută să alegi operațiile potrivite. Poți aduna 3 elevi și 2 elevi și obții 5 elevi. Nu are sens să aduni direct inițialele lor ca pe numere. În unele limbaje, calculatorul poate transforma automat anumite valori, dar o transformare neașteptată poate produce un rezultat greșit. De aceea e bine să știi ce fel de valoare păstrează fiecare variabilă.
Gândește-te la împărțirea a 7 obiecte în două cutii. Dacă vrei câte obiecte întregi intră în fiecare, obții 3 și rămâne 1. Dacă măsori o cantitate care poate fi împărțită, precum de apă, jumătatea este . Aceeași operație, cu tipuri și sensuri diferite, cere rezultate diferite.
Tipul logic are numai două valori: adevărat și fals. Condiția „5 este mai mare decât 3” dă adevărat; „5 este mai mic decât 3” dă fals. Un caracter poate fi, de exemplu, litera „A”. Când citești un program, întreabă pentru fiecare valoare: „Este un întreg, o măsură cu zecimale, un răspuns logic sau un caracter?” Răspunsul te ajută să previi operații nepotrivite.
Exemplu rezolvat — ce tip are fiecare informație? Pentru fișa unui elev programul păstrează patru informații. Alegi tipul pentru fiecare:
- Numărul de absențe: 3. Este un număr întreg, deci tip întreg.
- Media: 8,75. Are parte zecimală, deci tip real.
- Elevul are manualul: da sau nu. Răspunsul are doar două valori, deci tip logic.
- Inițiala numelui: litera M. Este un singur semn, deci tip caracter.
Dacă ai încerca să păstrezi media 8,75 într-un număr întreg, partea zecimală s-ar pierde și ai obține 8. Dacă ai aduna inițiala M cu un număr, rezultatul nu ar mai avea sens pentru nume. Alegerea tipului înainte de a scrie programul previne astfel de erori.
În detaliu
Un tip de date stabilește mulțimea valorilor, operațiile permise și spațiul ocupat în memorie. În C++ tipurile simple sunt: bool (valorile true și false), char (un caracter, memorat ca un cod întreg), int (întreg), long long (întreg mai mare), float și double (numere reale, memorate aproximativ). Prefixul unsigned exclude valorile negative și dublează domeniul pozitiv. Pe calculatoarele uzuale int ocupă 4 octeți și reprezintă valori de la la , iar long long ocupă 8 octeți. Operatorul sizeof afișează dimensiunea unui tip.
Exemplul 1 — dimensiunile tipurilor. Programul afișează în octeți dimensiunile tipurilor char, bool, int, float, double și long long:
#include <iostream>
using namespace std;
int main() {
cout << sizeof(char) << ' ' << sizeof(bool) << ' ' << sizeof(int) << ' '
<< sizeof(float) << ' ' << sizeof(double) << ' ' << sizeof(long long);
return 0;
}
Ieșirea este 1 1 4 4 8 8. Un int poate memora valori diferite, iar un long long poate memora valori până la .
Exemplul 2 — caractere și numere. Fiecare caracter are un cod; în codul ASCII 'A' este 65. Expresia 'A' + 1 are tipul int și valoarea 66, iar (char)('A' + 1) este caracterul 'B'. Împărțirea depinde de tipurile operanzilor: 7 / 2 este 3 (cât întreg), 7 / 2.0 este 3,5, iar (double)7 / 2 este tot 3,5, pentru că primul operand a fost convertit la real înainte de împărțire.
cout << 'A' + 1 << ' ' << (char)('A' + 1) << ' ' << 7 / 2 << ' ' << 7 / 2.0;
Secvența afișează 66 B 3 3.5. Atribuirea unui real într-un întreg trunchiază: după int x = 3.9; variabila x are valoarea 3.
Exemplul 3 — tipul logic. O valoare de tip bool este true sau false. Când se afișează fără formatare, ele apar ca 1 și 0; orice valoare nenulă atribuită unui bool devine true, deci după bool b = 5; afișarea lui b dă 1. Rezultatul unei comparații este tot logic: (7 > 3) + (2 > 5) este . Din cauza reprezentării aproximative, numerele reale nu se compară sigur prin egalitate: 0.1 + 0.2 == 0.3 este fals (0), pe când 0.5 + 0.25 == 0.75 este adevărat (1), pentru că 0,5, 0,25 și 0,75 se reprezintă exact în binar.
Exemplul 4 — domeniul unui tip. Un tip fără semn nu poate reprezenta valori negative: pentru unsigned int u = 0;, instrucțiunea u--; nu produce , ci cea mai mare valoare a tipului, 4294967295. Un int care ar trebui să memoreze nu poate; pentru aceasta se folosește long long: (long long)2147483647 + 1 este 2147483648. Domeniul trebuie verificat înainte de a alege tipul. Pentru valori de ordinul miliardelor, int nu este suficient, iar pentru o sumă a mai multor astfel de valori nici măcar long long nu trebuie ales fără o estimare a rezultatului maxim.
Exemplul 5 — cifra ca număr și numărul ca cifră. Caracterele cifrelor au coduri consecutive: '0' are codul 48, '7' are codul 55. Valoarea numerică a cifrei se obține prin scădere, '7' - '0' dă , iar cifra scrisă ca simbol se obține prin adunare, (char)('0' + 5) este caracterul '5'. Fără scăderea lui '0', expresia '7' + 1 ar da 56, nu 8.
Exemplul 6 — media și restul pentru numere negative. Pentru int a = 7, b = 2; instrucțiunea double m = (a + b) / 2; calculează întâi ca împărțire între întregi, deci m este 4. Media corectă se obține cu (a + b) / 2.0, adică . La numere negative, câtul întreg se trunchiază spre zero: -17 / 5 este , iar restul are semnul deîmpărțitului, -17 % 5 fiind . Relația rămâne adevărată.
Pentru admitere
Stabilește tipurile înainte să calculezi o expresie. 7/2 este 3, dar 7/2.0 este 3,5. Atribuirea unui rezultat real într-o variabilă întreagă îi pierde partea fracționară. O expresie de forma double y = 7 / 2; calculează întâi împărțirea întreagă, 3, și abia apoi o convertește la real, deci y este 3, nu 3,5. Verifică și domeniul valorilor admise: nu presupune că un tip numeric poate memora orice număr. Un caracter dintr-o expresie aritmetică se comportă ca numărul lui de cod, iar în afișare contează tipul variabilei: aceeași valoare 99 apare ca 99 într-un int și ca c într-un char. Compararea cu == a două numere reale calculate nu este sigură.
Exemplu în formatul examenului. Ce se afișează în urma executării secvenței de mai jos?
int x = 3.9;
double y = 7 / 2;
char c = 'a' + 2;
cout << x << ' ' << y << ' ' << c;
- a)
3 3.5 c - b)
4 3 c - c)
3 3 c - d)
3 3 99
Răspunsul corect este c). Atribuirea int x = 3.9; păstrează partea întreagă, deci . Expresia 7 / 2 are operanzi întregi și dă 3, valoare care se memorează în y ca 3. Codul lui 'a' este 97, iar este codul lui 'c'; variabila c este de tip char, deci se afișează litera c. Varianta d) ar apărea dacă c ar fi de tip int.
Al doilea exemplu în formatul examenului. Ce se afișează în urma executării secvenței de mai jos?
int a = 7, b = 2;
double m = (a + b) / 2;
char d = '0' + 5;
cout << m << ' ' << d << ' ' << -17 / 5 << ' ' << -17 % 5;
- a)
4.5 5 -3 -2 - b)
4 5 -3 -2 - c)
4 53 -3 -2 - d)
4 5 -4 3
Răspunsul corect este b). Împărțirea are operanzi întregi și dă 4, apoi m primește 4. Codul lui '0' este 48, deci este codul lui '5', iar d este de tip char și se afișează 5. Câtul -17 / 5 este , iar restul este . Varianta a) face împărțirea reală, varianta c) afișează codul în loc de caracter, iar varianta d) rotunjește câtul în jos.
Greșeli frecvente
- Greșit:
7 / 2produce3.5când ambii operanzi sunt întregi.Corect: rezultatul este câtul întreg3. - Greșit:
int x = 3.9;rotunjește la 4.Corect: partea zecimală se elimină șixeste 3. - Greșit: un caracter și un număr nu pot fi legate între ele.Corect: fiecare caracter are un cod numeric, iar
'A' + 1are valoarea 66.
Pentru părinți
Copilul exersează clasificarea valorilor.
- Scrieți „7 elevi”, „1,5 litri”, „adevărat” și „A”.
- Cereți-i să spună tipul fiecărei valori.
- Împărțiți imaginar 7 obiecte în două cutii.
- Comparați cu împărțirea a 7 litri de apă.
Întrebați-l: „De ce rezultatele acestor două împărțiri nu se scriu la fel?”
Testează-te pe această lecție
Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.
Înainte și după
Surse și referințe
Redactare proprie, conform programei:
- OMEN 3393/2017, anexa 2, Informatică și TIC, pp. 11–12; isj.tm.edu.ro
- OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa X; plan de încadrare: OMECI 3410/2009, anexa 1, p. PDF 1–14; forum.isj.hd.edu.ro; filiera tehnologică: OMECI 3412/2009, anexa 2, tabel X, legislatie.just.ro
- OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa X; rocnee.eu
- UNSTPB, Regulament admitere licență 2026, Anexa II-1.2 p. Anx II-14 și Anexa XI-3 p. Anx XI-6–7 (PDF p. 64, 120–121); admitere.pub.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 3 și 6; aplicabilitatea 2027: OMEC 5211/2026, art. 3 alin. (10); edu.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 3–4; edu.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 5–6; edu.ro
Documente consultate
- OMEN 3393/2017, anexa 2, Informatică și TIC, clasa a VII-a, p. 12; UNSTPB, admitere 2026, anexa XI-3, p. Anx XI-6–7
- Programa școlară de informatică, clasa a X-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
- Programa de bacalaureat la informatică, matematică-informatică (anexa 2 la OMECTS 4800/2010), Ministerul Educației, p. 3 și 6; edu.ro
- Subiectele și baremele Bacalaureatului 2026; subiecte2026.edu.ro
Desene: Redactare proprie (desen original), conform OMEN 3393/2017, anexa 2, Informatică și TIC VII; isj.tm.edu.ro
