Invatare Atomica

Variabile si tipuri de date

Progres lectie:
0%
🎯

Obiectivul lectiei

Vei invata cum sa stochezi informatii in programe, ce tipuri de date exista in Python si C++, si cum sa converesti corect intre ele.

Dupa aceasta lectie vei putea:

  • Sa explici ce este o variabila si de ce are nevoie de un tip de date
  • Sa enumeri tipurile de date principale: int, float/double, str/string, bool
  • Sa declari si sa initializezi variabile corect in Python si C++
  • Sa converesti intre tipuri (int, float, str) si sa intelegi impartirea intreaga vs reala
  • Sa identifici diferentele dintre Python (tipare dinamica) si C++ (tipare statica)

Incearca singur!

🎯 INCEARCA

Provocare:

In matematica, folosim litere pentru a reprezenta numere necunoscute (ex: x = 5). In programare facem la fel, dar fiecare valoare are si un tip. Gandeste-te ce fel de informatie ai stoca in:

  • o variabila numita varsta
  • o variabila numita nume
  • o variabila numita esteMajor
  • o variabila numita medie
💡 Vezi raspunsul

varsta → un numar intreg, deci int (ex: 15)

nume → un text/sir de caractere, deci str/string (ex: "Maria")

esteMajor → adevarat sau fals, deci bool (ex: False)

medie → un numar cu zecimale, deci float/double (ex: 9.75)

1

1. Ce este o variabila?

O variabila este un nume dat unei zone de memorie in care programul stocheaza o valoare. Are trei lucruri: un nume, o valoare si un tip de date (care spune ce fel de valoare poate tine).
Analogie sigura:

Gandeste-te la o variabila ca la o cutie etichetata: eticheta este numele (varsta), continutul este valoarea (15), iar forma cutiei este tipul (intreg). Poti schimba continutul, dar eticheta ramane la fel.

2

2. Tipuri de date principale

Cele mai folosite tipuri de date, cu numele lor in Python si C++:

TipPythonC++Exemplu
Numar intregintint42, -7, 0
Numar real (zecimal)floatfloat / double3.14, -2.5
Text (sir de caractere)strstring"Hello"
Logic (adevarat/fals)boolboolTrue / False (Py), true / false (C++)

In Python, functia type() iti spune tipul unei valori:

# Tipul se deduce automat din valoare
varsta = 15
medie = 9.75
nume = "Maria"
esteMajor = False

print(type(varsta))
print(type(medie))
print(type(nume))
print(type(esteMajor))
Output real (rulat cu python):
<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>
3

3. Declarare si initializare in Python

In Python nu scrii tipul: el este dedus automat din valoarea pe care o atribui (tipare dinamica). A declara = a aduce variabila in existenta; a initializa = a-i da prima valoare.

# Declarare + initializare intr-o singura linie
varsta = 15
nume = "Maria"
medie = 9.75
esteMajor = False

# Afisare
print(varsta)
print(nume)
print(type(esteMajor))
Output real (rulat cu python):
15
Maria
<class 'bool'>
⚠ Atentie

Numele unei variabile NU poate incepe cu o cifra si nu poate contine spatii. Foloseste nume sugestive: medieElev, nu m. Python face diferenta intre litere mari si mici: nota si Nota sunt doua variabile diferite.

4

4. Conversii intre tipuri si impartirea

Uneori ai o valoare de un tip dar ai nevoie de altul. Conversia (type casting) se face cu int(), float(), str(). Important: input() intoarce mereu text!

# Conversii
text = "42"
numar = int(text)         # string -> int
print(numar + 8)

nota = float("9.50")      # string -> float
print(nota)

# Impartirea: reala (/) vs intreaga (//) vs rest (%)
x = 7
y = 2
print(x / y)               # impartire reala
print(x // y)              # cat intreg
print(x % y)               # rest
print(int(3.99))          # trunchiere catre 0
print(str(2026) + "!")    # int -> string pentru concatenare
Output real (rulat cu python):
50
9.5
3.5
3
1
3
2026!
⚠ Capcana frecventa

int(3.99) da 3, nu 4 — conversia la intreg trunchiaza (taie zecimalele), nu rotunjeste. Pentru rotunjire foloseste round().

5

5. Acelasi lucru in C++ EXCLUSIV INTENSIV

⚡ Sectiune doar pentru intensiv informatica

C++ se preda doar la profilul intensiv, ca al doilea limbaj. In C++ tipul trebuie declarat explicit (tipare statica) si fiecare instructiune se termina cu ;.

#include <iostream>
#include <string>
using namespace std;

int main() {
    int varsta = 15;
    string nume = "Maria";
    double medie = 9.75;
    bool esteMajor = false;

    cout << varsta << endl;
    cout << nume << endl;
    cout << medie << endl;
    cout << esteMajor << endl;   // bool se afiseaza 0 sau 1
    return 0;
}
Output real (compilat g++ -std=c++17, apoi rulat):
15
Maria
9.75
0

Doua diferente importante pe care le vezi in output:

  • In C++, bool false se afiseaza ca 0 (in Python ar fi False).
  • In C++, impartirea a doi int da tot un int (catul intreg), spre deosebire de / din Python.
#include <iostream>
using namespace std;
int main() {
    int x = 7, y = 2;
    cout << x / y << endl;          // int / int -> cat intreg
    cout << x % y << endl;          // rest
    cout << (double)x / y << endl;  // cast la double -> impartire reala
    cout << sizeof(int) << " " << sizeof(double) << " " << sizeof(char) << endl;
    return 0;
}
Output real (compilat g++ -std=c++17, apoi rulat):
3
1
3.5
4 8 1

sizeof arata cati octeti (bytes) ocupa fiecare tip in memorie: int = 4, double = 8, char = 1. In Python interpretorul gestioneaza memoria automat.

Exercitii practice

Exercitiul 1 (Nivel minim) - Alege tipul corect

Ce tip de date (int, float, str, bool) ai folosi pentru fiecare?

  • numarul de pagini ale unei carti
  • pretul unui produs (ex: 12.99 lei)
  • numele unui oras
  • daca un elev a trecut clasa (da/nu)

Raspuns asteptat: int, float, str, bool.

Vezi rezolvarea

Rezolvare, subpunct cu subpunct:

  1. numarul de pagini ale unei carti -> int (valoare intreaga, fara zecimale: o carte are 320 de pagini, nu 320.5)
  2. pretul unui produs (12.99 lei) -> float (are zecimale)
  3. numele unui oras -> str (text, sir de caractere, se scrie intre ghilimele)
  4. daca un elev a trecut clasa (da/nu) -> bool (doar doua valori posibile: True/False)

In Python ai scrie: pagini = 320, pret = 12.99, oras = "Piatra Neamt", aTrecut = True. Tipul se deduce automat din valoare (tipare dinamica), exact cum s-a aratat in lectie cu type().

Exercitiul 2 (Nivel standard) - Conversie si impartire

Scrie un program Python care porneste de la total = 17 bomboane si copii = 5, apoi afiseaza cate bomboane primeste fiecare copil (impartire intreaga) si cate raman (rest).

Solutie posibila:

# Distribuire bomboane
total = 17
copii = 5
print("Fiecare primeste:", total // copii)
print("Raman:", total % copii)
Output real (rulat cu python):
Fiecare primeste: 3
Raman: 2
Vezi rezolvarea

Pas cu pas:

  1. Declari variabilele: total = 17 si copii = 5.
  2. Cate bomboane primeste fiecare copil = catul impartirii intregi: total // copii -> 17 // 5 = 3.
  3. Cate raman = restul impartirii: total % copii -> 17 % 5 = 2.
  4. Afisezi cu print(), punand text si numar separate prin virgula: print("Fiecare primeste:", total // copii) si print("Raman:", total % copii).

Rezultat asteptat la rulare: Fiecare primeste: 3 si Raman: 2 (verifica: 3 x 5 + 2 = 17, corect).

Exercitiul 3 (Nivel performanta) - Fisa elev in ambele limbaje

Declara variabile pentru o fisa de elev: nume, clasa, medie, estePromovat, apoi afiseaza-le pe o singura linie. Compara cum apare valoarea booleana in Python vs C++.

Solutie Python:

nume = "Andrei Pop"
clasa = "9A"
medie = 8.75
estePromovat = True
print(f"Elev: {nume}, Clasa: {clasa}, Media: {medie}, Promovat: {estePromovat}")
Output real (rulat cu python):
Elev: Andrei Pop, Clasa: 9A, Media: 8.75, Promovat: True

Solutie C++ EXCLUSIV INTENSIV:

#include <iostream>
#include <string>
using namespace std;
int main() {
    string nume = "Andrei Pop";
    string clasa = "9A";
    double medie = 8.75;
    bool estePromovat = true;
    cout << "Elev: " << nume << ", Clasa: " << clasa
         << ", Media: " << medie << ", Promovat: " << estePromovat << endl;
    return 0;
}
Output real (compilat g++ -std=c++17, apoi rulat):
Elev: Andrei Pop, Clasa: 9A, Media: 8.75, Promovat: 1

Observa diferenta: in Python apare True, in C++ apare 1. Acelasi concept (logic), afisat diferit.

Vezi rezolvarea

Schita de rezolvare (nu recopia solutia de mai sus fara sa o intelegi):

  1. Alege tipul dupa valoare: text intre ghilimele -> str/string (nume, clasa); numar cu zecimale -> float/double (medie); adevarat/fals -> bool (estePromovat).
  2. In Python declari si initializezi direct, fara sa scrii tipul (nume = "..."). In C++ scrii tipul explicit inaintea numelui si pui ; la final.
  3. Afisezi tot pe o singura linie: in Python cu un singur print(f"..."), in C++ inlantuind mai multe << la cout.
  4. Capcana de urmarit: estePromovat apare diferit -> True in Python, dar 1 (sau 0 pentru fals) in C++, fara text.

Criterii de evaluare: toate cele 4 variabile au tipul corect in ambele limbaje; afisarea e pe o singura linie cu etichete clare; explici in cuvinte proprii de ce bool arata diferit in cele doua limbaje.

Ce ai invatat astazi

  • Ce este o variabila: nume + valoare + tip de date
  • Tipurile principale: int, float/double, str/string, bool
  • Cum se declara si initializeaza variabile in Python (automat) si C++ (explicit)
  • Conversii intre tipuri si diferenta dintre impartirea reala (/), intreaga (//) si rest (%)
  • Diferentele Python (tipare dinamica) vs C++ (tipare statica, ; obligatoriu, bool ca 0/1)

Vrei mai mult?

Provocare: Scrie un program Python care citeste un numar total de secunde (ex: 3725) si il converteste in ore, minute si secunde, folosind doar // si %. Verifica manual: 3725 secunde = 1h 2m 5s.

De gandit: int(3.99) da 3, nu 4 - trunchiaza, nu rotunjeste. De ce crezi ca a fost aleasa trunchierea (taierea simpla a zecimalelor) ca regula standard in aproape toate limbajele de programare, in loc de rotunjire?

Dincolo de lectie: Alegerea tipului de date conteaza si in afara clasei: cand se creeaza o baza de date pentru un magazin online, fiecare coloana primeste un tip fix (numar intreg pentru stoc, text pentru nume) tocmai ca sa se rezerve corect spatiul de memorie si sa nu se poata introduce, din greseala, text intr-o coloana de pret.

Urmatoarea lectie

Continua cu Expresii aritmetice si logice — vei combina variabilele de azi cu operatori si vei invata precedenta acestora.

Continua →