Citirea și Scrierea Datelor, Tipuri de Variabile și Cum Vorbești cu Calculatorul – Materie BAC

Bun, hai să vorbim despre lucrul fără de care niciun program nu ar putea funcționa: DATELE. Nu e doar despre numere (cuvânt rece) și texte. E despre cum păstrăm informația în memorie, cum o citim de la utilizator și cum o prezentăm înapoi. E un proces atât de fundamental încât dacă ar fi să-l elimini, programarea ar fi ca un telefon fără microfon și difuzor – ai partea de procesare, dar nu poți comunica cu lumea. Dar aici intervine și partea tehnică: tipurile diferite de date și cum le gestionăm corect.

1. Variabilele – “Cutiile cu Etichete” din Memorie
Gândește-te la ele ca la cutii de depozitare etichetate din memoria calculatorului: fiecare cutie poate stoca un anumit tip de obiect, are o etichetă (nume) și o locație fixă. Să le vedem caracteristicile.

Ce este o Variabilă?
O variabilă este o locație de memorie cu un nume, care poate stoca valori ce se pot modifica în timpul execuției programului.

Analogie cu cutiile din depozit:

  • Numele variabilei = Eticheta pe cutie (“BECURI”, “SURUBE M4”, “MANERE”)
  • Tipul variabilei = Ce fel de obiecte poți pune în cutie (doar becuri, doar șuruburi, etc.)
  • Valoarea variabilei = Ce conține cutia acum (3 becuri, 50 de șuruburi, 2 mânere)
  • Adresa din memorie = Numărul raftului din depozit (locul fizic)

2. Tipurile Fundamentale de Variabile (Cei “Fab Four” ai Datelor)
Acestea sunt tipurile de bază pe care le întâlnești în aproape toate limbajele, inclusiv C++ și Pascal.

1. ÎNTREG (INTEGER) – Numerele fără virgulă

  • Ce stochează: Numere întregi: -3, 0, 15, 1000
  • Când îl folosești: Contoare, vârste, număr de elemente, ani
  • Limitări: Nu poate stoca fracții! 5/2 = 2 (se pierde restul!)
  • Analogie: Cutie pentru ouă. Poți pune 3 ouă, dar nu “3 și jumătate ouă”.

În C++:

int varsta = 25;
int numarOua = 12;
int temperatura = -5; // Da, și negative!

În Pascal:

var
  varsta: integer;
  numarOua: integer;
  temperatura: integer;
begin
  varsta := 25;
  numarOua := 12;
  temperatura := -5;

2. REAL (FLOAT/DOUBLE) – Numerele cu virgulă

  • Ce stochează: Numere cu parte zecimală: 3.14, -2.5, 0.75
  • Când îl folosești: Preturi, medii, temperaturi precise, calcule științifice
  • Precauții: Calculele cu numere reale pot avea erori mici de rotunjire
  • Analogie: Cântar de bucătărie. Poți cântări 250.5g de făină.

În C++:

float pret = 19.99;
double pi = 3.14159265359; // double = mai precis decât float

În Pascal:

var
  pret: real;
  pi: real;
begin
  pret := 19.99;
  pi := 3.14159265359;

3. CARACTER (CHAR) – Un singur simbol

  • Ce stochează: Un singur caracter: ‘A’, ‘7’, ‘$’, ‘ ‘
  • Când îl folosești: Inițiale, răspunsuri da/nu (Y/N), coduri de o literă
  • Detaliu tehnic: De fapt stochează un cod numeric (ASCII/Unicode)
  • Analogie: Un singur pește într-un acvariu mic.

În C++:

char initiala = 'M';
char raspuns = 'D'; // D pentru DA
char simbol = '#';

În Pascal:

var
  initiala: char;
  raspuns: char;
begin
  initiala := 'M';
  raspuns := 'D';

4. TEXT (STRING) – Șirul de caractere

  • Ce stochează: Siruri de caractere: “Salut”, “Ana are mere”, “Str. Libertății 15”
  • Când îl folosești: Nume, adrese, mesaje, parole
  • Importanță: Folosește ghilimele! “A” e string, ‘A’ e char.
  • Analogie: Un acvariu mare cu mai mulți pești înșirați.

În C++:

#include <string> // Trebuie inclus!
using namespace std;

string nume = "Maria";
string adresa = "Bulevardul Unirii 22";

În Pascal:

var
  nume: string;
  adresa: string;
begin
  nume := 'Maria';       // În Pascal, folosim apostroafe
  adresa := 'Bulevardul Unirii 22';

3. BOOLEAN (BOOL) – Valoarea de Adevăr

  • Ce stochează: Doar două valori: ADEVĂRAT (true) sau FALS (false)
  • Când îl folosești: Condiții, stări (estePornit, esteGasit, arePermisiune)
  • Analogie: Un întrerupător: fie e pornit (true), fie e oprit (false).

În C++:

bool estePornit = true;
bool esteGasit = false;
bool arePermisiune = (varsta >= 18); // Va fi true sau false

În Pascal:

var
  estePornit: boolean;
  esteGasit: boolean;
begin
  estePornit := true;
  esteGasit := false;
  arePermisiune := (varsta >= 18);

4. Citirea Datelor – Cum Ascultă Programul
Acum că avem cutiile (variabilele), trebuie să învățăm cum să le umplem cu date de la utilizator.

Regula de Aur a Citirii:
Mereu anunță utilizatorul ce vrei de la el! Nu-l lăsa să ghicească.

În C++ – cu cin (citește-in):

#include <iostream>
using namespace std;

int main() {
    int varsta;
    string nume;
    double inaltime;

    // Mai întâi întrebăm (afișăm un mesaj)
    cout << "Care este numele tau? ";
    cin >> nume;  // Citește până la primul spațiu

    cout << "Buna, " << nume << "! Cati ani ai? ";
    cin >> varsta;

    cout << "Si cat de inalt esti (in metri)? ";
    cin >> inaltime;

    cout << "Multumim! Ai " << varsta << " ani si " 
         << inaltime << "m inaltime." << endl;

    // CITIREA CU GETLINE pentru fraze întregi:
    string propozitie;
    cout << "Spune-mi ceva interesant: ";
    cin.ignore(); // Ignoră Enter-ul rămas din citirea anterioară
    getline(cin, propozitie); // Citește toată linia cu spații
    cout << "Ai spus: " << propozitie << endl;

    return 0;
}

În Pascal – cu readln (citește-linia):

program CitireDate;
var
  varsta: integer;
  nume: string;
  inaltime: real;
  propozitie: string;
begin
  // Întrebăm și citim
  write('Care este numele tau? ');
  readln(nume);

  write('Buna, ', nume, '! Cati ani ai? ');
  readln(varsta);

  write('Si cat de inalt esti (in metri)? ');
  readln(inaltime);

  writeln('Multumim! Ai ', varsta, ' ani si ', 
          inaltime:0:2, 'm inaltime.'); // :0:2 = formatare cu 2 zecimale

  // Citirea unei propoziții întregi e mai simplă în Pascal
  writeln('Spune-mi ceva interesant: ');
  readln(propozitie);
  writeln('Ai spus: ', propozitie);
end.

Probleme comune la citire și soluții:

  1. Problema: cin >> se oprește la spațiu
    Soluție: Folosește getline(cin, variabila) pentru text cu spații
  2. Problema: Amestec de cin >> și getline()
    Soluție: Pune cin.ignore() între ele
  3. Problema: Utilizatorul introduce text în loc de număr
    Soluție: (Avansat) Verifică starea fluxului sau folosește citire ca text și conversie

5. Scrierea Datelor – Cum Vorbește Programul
Dacă citirea e microfonul, scrierea e difuzorul programului.

Regula de Aur a Scrierii:
Fii clar și informat! Formatează-ți mesajele frumos.

În C++ – cu cout (scrie-out):

#include <iostream>
#include <iomanip> // Pentru manipularea afișării
using namespace std;

int main() {
    string produs = "Laptop";
    double pret = 2499.99;
    int garantie = 24;

    // Afișare simplă
    cout << "Produs: " << produs << endl;
    cout << "Pret: " << pret << " lei" << endl;

    // Formatare cu 2 zecimale fixe
    cout << fixed << setprecision(2);
    cout << "Pret formatat: " << pret << " lei" << endl;

    // Afișare pe coloane
    cout << setw(15) << left << "Produs:" 
         << setw(10) << right << produs << endl;
    cout << setw(15) << left << "Pret:" 
         << setw(10) << right << pret << " lei" << endl;
    cout << setw(15) << left << "Garantie:" 
         << setw(10) << right << garantie << " luni" << endl;

    return 0;
}

În Pascal – cu writeln/write (scrie-linia/scrie):

program ScriereDate;
var
  produs: string;
  pret: real;
  garantie: integer;
begin
  produs := 'Laptop';
  pret := 2499.99;
  garantie := 24;

  // Afișare simplă
  writeln('Produs: ', produs);
  writeln('Pret: ', pret:0:2, ' lei'); // :0:2 = 2 zecimale

  // Afișare formatată pe coloane
  writeln('Produs:':15, produs:10);
  writeln('Pret:':15, pret:10:2, ' lei');
  writeln('Garantie:':15, garantie:10, ' luni');

  // write vs writeln
  write('Acesta ramane pe '); // Fără linie nouă
  write('aceeasi linie. ');
  writeln('Acesta trece la linie noua.'); // Cu linie nouă
  writeln('Acesta e pe linie separata.');
end.

Trucuri utile pentru afișare:

  1. endl în C++ sau writeln în Pascal = trece la linie nouă
  2. \n în C++ în interiorul textului = aceeași trecere la linie nouă
   cout << "Linia 1\nLinia 2\n";
  1. Tabulare: \t în C++ pentru aliniere
   cout << "Nume:\tAna\tPrenume\tMaria";

6. Conversii între Tipuri – “Transformările Magice”
Uneori trebuie să convertim dintr-un tip în altul. Atenție la pierderi!

În C++:

// Conversie implicită (automată)
int numarIntreg = 10;
double numarReal = numarIntreg; // OK: 10 → 10.0

// Conversie explicită (forțată)
double pi = 3.14;
int piIntreg = (int)pi; // 3.14 → 3 (PIERDERE DE PRECIZIE!)

// Conversie text ↔ număr
#include <string>
string text = "123";
int numar = stoi(text); // string to int: "123" → 123

int altNumar = 456;
string altText = to_string(altNumar); // int to string: 456 → "456"

În Pascal:

// Conversie implicită
var
  numarIntreg: integer;
  numarReal: real;
begin
  numarIntreg := 10;
  numarReal := numarIntreg; // 10 → 10.0

// Conversie explicită
  numarReal := 3.14;
  numarIntreg := trunc(numarReal); // 3.14 → 3 (taie zecimale)
  // SAU: numarIntreg := round(numarReal); // rotunjeste: 3.14 → 3, 3.6 → 4

// Conversie text ↔ număr
  str(numarIntreg, altText); // număr → text
  val(altText, numarIntreg, codEroare); // text → număr

În concluzie, să-ți spun ceva practic:
Variabilele sunt memoria programului tău, citirea este auzul lui, iar scrierea este vocea lui. Fără aceste trei elemente, un program ar fi ca un creier izolat într-un borcan – ar putea procesa, dar nu ar putea comunica cu lumea.

Dar comunicarea cu un calculator poate fi, paradoxal, o sursă de erori dacă nu e abordată cu precizie, validare și gândire anticipativă.

Așa că ai grijă la tipurile tale de date. Alege-le cu înțelepciune. Validează-ți intrările. Formatează-ți ieșirile. Pentru că puterea de a procesa informația este goală fără abilitatea de a o primi și de a o prezenta corect. Și această putere vine cu o responsabilitate: să fii clar și precis.

Gestionarea corectă a datelor este o parte integrală a programării de calitate. Ai grijă de ea cu aceeași seriozitate.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *