🚀 De la C++ la Python

Transformarea unui Sistem de Management Parcare

📚 Despre acest Tutorial

Acest tutorial interactiv vă arată cum să transformați un program C++ într-un program Python echivalent. Vom folosi ca exemplu un Sistem de Management pentru Parcare care gestionează locuri de parcare, calculează tarife și generează rapoarte.

🏗️ Structuri → Clase

Învățați cum struct din C++ devine class în Python

📝 Sintaxă Simplificată

Fără declarații de tip, fără punto și virgulă

🔄 Arrays → Liste

De la array-uri statice la liste dinamice

🎯 Management Automat

Fără malloc/free sau new/delete

🐍 Inițiere în Python - Start Rapid

Pentru Programatori C++/Java care Încep cu Python

1. Instalare Python

🪟 Windows

  1. Descarcă de la python.org
  2. Rulează installer-ul
  3. ✅ Bifează "Add Python to PATH"
  4. Click "Install Now"
# Verificare în Command Prompt:
python --version
# Output: Python 3.12.x

🐧 Linux/Mac

# Linux (Ubuntu/Debian):
sudo apt update
sudo apt install python3 python3-pip

# Mac (cu Homebrew):
brew install python3

# Verificare:
python3 --version

2. Medii de Dezvoltare Recomandate

🆚 VS Code (Recomandat) Gratuit

Avantaje:

  • ✅ Lightweight și rapid
  • ✅ IntelliSense pentru Python
  • ✅ Debugging integrat
  • ✅ Terminal integrat

Instalare Extensie Python:

  1. Deschide VS Code
  2. Ctrl+Shift+X (Extensions)
  3. Caută "Python"
  4. Install extensia Microsoft
🔷 PyCharm Professional

Avantaje:

  • ✅ IDE complet pentru Python
  • ✅ Refactoring avansat
  • ✅ Analiză cod în timp real
  • ✅ Suport pentru frameworks

Alternative Simple:

  • 🔸 IDLE - Vine cu Python
  • 🔸 Jupyter Notebook - Pentru învățare
  • 🔸 Replit - Online, fără instalare

3. Concepte Fundamentale Python

📋 Primul Program Python

# Fișier: hello.py

# Comentariu pe o linie (ca // din C++)

"""
Comentariu pe mai multe linii
(ca /* */ din C++)
"""

# 1. Print simplu
print("Hello, World!")

# 2. Variabile - fără declarare de tip!
nume = "Maria"          # string
varsta = 25            # int
inaltime = 1.75        # float
student = True         # bool

# 3. Input de la utilizator
nume = input("Cum te cheamă? ")
print(f"Salut, {nume}!")

# 4. Funcție simplă
def saluta(nume):
    return f"Bună, {nume}!"

mesaj = saluta("Ion")
print(mesaj)

⚠️ Diferențe Critice față de C++

  • Indentarea e OBLIGATORIE! - înlocuiește {}
  • Nu există ; la sfârșitul liniilor
  • Tipuri dinamice - se determină automat
  • Case sensitive - True ≠ true

✅ Convenții Python (PEP 8)

  • nume_variabila - snake_case
  • NumeClasa - PascalCase
  • CONSTANTA - UPPER_CASE
  • 4 spații pentru indentare

4. Sintaxă Esențială - Tranziție Rapidă

🔄 Echivalențe C++ → Python

Concept C++ Python
Include/Import #include <iostream> import sys
Main Function int main() { } if __name__ == "__main__":
Print cout << "text"; print("text")
Input cin >> var; var = input()
Arrays int arr[10]; arr = []
For Loop for(int i=0; i<10; i++) for i in range(10):
Null/None NULL / nullptr None
Boolean true / false True / False

🚀 Exemplu Complet - Mini Program

calculator.cpp
#include <iostream>
using namespace std;

int aduna(int a, int b) {
    return a + b;
}

int main() {
    int x, y;
    cout << "Primul număr: ";
    cin >> x;
    cout << "Al doilea număr: ";
    cin >> y;
    
    int suma = aduna(x, y);
    cout << "Suma: " << suma << endl;
    
    return 0;
}
calculator.py
def aduna(a, b):
    return a + b

def main():
    x = int(input("Primul număr: "))
    y = int(input("Al doilea număr: "))
    
    suma = aduna(x, y)
    print(f"Suma: {suma}")

# Punct de intrare
if __name__ == "__main__":
    main()

📚 Resurse pentru Învățare

📖 Documentație:
  • 🔗 python.org/tutorial
  • 🔗 docs.python.org
  • 🔗 realpython.com
🎮 Practică:
  • 🔗 hackerrank.com/python
  • 🔗 leetcode.com
  • 🔗 codewars.com
1. Structuri de Date: struct vs class

În C++ folosim struct pentru a grupa date, iar în Python folosim class cu un constructor __init__.

C++ struct
struct LocParcare {
    int  numarLoc;
    int  etaj;
    char tip[100];
    bool ocupat;
    char numarMasina[100];
    int  oraIntrare;
    
    void afisare() {
        cout << "Loc" << numarLoc;
        cout << "Etaj:" << etaj;
    }
};
Python class
class LocParcare:
    def __init__(self):
        # Nu declarăm tipurile!
        self.numar_loc = 0
        self.etaj = 0  
        self.tip = ""      # string direct
        self.ocupat = False
        self.numar_masina = ""
        self.ora_intrare = 0
    
    def afisare(self):
        print(f"Loc {self.numar_loc}")
        print(f"Etaj: {self.etaj}")
💡 Puncte Cheie:
  • • Python folosește self în loc de this
  • • Constructor se numește __init__
  • • Nu există declarații de tip (int, char, bool)
  • • String-urile sunt native, nu char[]
  • • Indentarea înlocuiește acoladele {}
2. Arrays vs Liste Dinamice
C++ - Array Static Fixed Size
struct Parcare {
    LocParcare locuri[100];  // Maxim 100
    int nrLocuri = 0;
    
    void adaugaLoc(LocParcare l) {
        locuri[nrLocuri] = l;
        nrLocuri++;
    }
    
    int pozitieLoc(int numar) {
        for (int i = 0; i < nrLocuri; i++)
            if (locuri[i].numarLoc == numar)
                return i;
        return -1;
    }
};
Python - Listă Dinamică Dynamic Size
class Parcare:
    def __init__(self):
        self.locuri = []  # Listă goală, crește dinamic
        # Nu mai avem nevoie de contor!
    
    def adauga_loc(self, loc):
        self.locuri.append(loc)  # Adaugă la sfârșit
    
    def pozitie_loc(self, numar):
        for i, loc in enumerate(self.locuri):
            if loc.numar_loc == numar:
                return i
        return -1
⚠️ Diferențe Importante:
  • • C++: Array cu dimensiune fixă (100 locuri maxim)
  • • Python: Listă care crește automat după necesitate
  • • Python: len(lista) înlocuiește contorul manual
  • • Python: enumerate() oferă index și valoare simultan
3. Input/Output și String-uri
C++ - cin/cout iostream
void ocupaLoc() {
    char txt[100] = "";
    char nrMasina[100];
    
    cout << "Numar loc: ";
    cin.getline(txt, 100);
    int numar = atoi(txt);
    
    cout << "Numar masina: ";
    cin.getline(nrMasina, 100);
    
    // strcpy pentru copiere string
    strcpy(locuri[p].numarMasina, nrMasina);
}
Python - input/print Built-in
def ocupa_loc(self):
    # Input returnează string direct
    numar = int(input("Număr loc: "))
    nr_masina = input("Număr mașină: ").strip()
    
    # Atribuire directă, fără strcpy!
    self.locuri[p].numar_masina = nr_masina
    
    # f-string pentru formatare elegantă
    print(f"Loc {numar} ocupat!")

🎯 F-Strings în Python

Python oferă f-strings pentru formatare elegantă:

nume = "Maria"
varsta = 25
print(f"Salut, {nume}! Ai {varsta} ani.")
# Output: Salut, Maria! Ai 25 ani.
4. Operatori Logici și Control Flow
C++ Operatori
// Operatori logici
if (ocupat && etaj == 2) { }
if (liber || gratuit) { }
if (!ocupat) { }

// Operator ternar
cout << (ocupat ? "DA" : "NU");
Python Operatori
# Operatori logici - cuvinte!
if ocupat and etaj == 2:
if liber or gratuit:
if not ocupat:

# Operator ternar Python
print("DA" if ocupat else "NU")
C++ Switch/Case
switch (optiune) {
    case 1:
        adaugaLoc();
        break;
    case 2:
        ocupaLoc();
        break;
    default:
        cout << "Invalid";
}
Python if/elif/else
# Python nu are switch!
if optiune == 1:
    adauga_loc()
elif optiune == 2:
    ocupa_loc()
else:
    print("Invalid")
C++ Bucle
// Bucla clasică
for (int i = 0; i < nrLocuri; i++) {
    cout << locuri[i].numarLoc;
}

// While
while (running) {
    // cod
}
Python Bucle
# Iterare directă
for loc in self.locuri:
    print(loc.numar_loc)

# Cu index
for i, loc in enumerate(self.locuri):
    print(f"{i}: {loc.numar_loc}")

# While
while True:  # True cu majusculă!
    # cod
5. Gestionarea Erorilor

Python oferă un sistem elegant de gestionare a erorilor cu try/except:

C++ - Verificare Manuală
char txt[100];
cin.getline(txt, 100);
int numar = atoi(txt);

// atoi returnează 0 pentru input invalid
if (numar == 0 && txt[0] != '0') {
    cout << "Număr invalid!";
}
Python - Try/Except
try:
    numar = int(input("Număr: "))
except ValueError:
    print("Număr invalid!")
    numar = 0

# Sau într-o funcție:
def citeste_numar(mesaj):
    while True:
        try:
            return int(input(mesaj))
        except ValueError:
            print("Vă rog un număr valid!")
6. Funcționalități Avansate Python

🚀 Caracteristici Unice Python

Parametri Impliciți

def elibereaza_loc(self, numar, 
                  tarif=10):  # Valoare implicită
    # Poate fi apelat cu sau fără tarif
    suma = durata * tarif

List Comprehensions

# Filtrare elegantă
locuri_libere = [loc for loc in self.locuri 
                 if not loc.ocupat]

# În loc de bucla clasică

🎮 Demo Interactiv - Diferențe Cheie

Apasă un buton pentru a vedea diferențele!

7. Avantaje Python vs C++
  • Cod mai scurt și mai lizibil: Python elimină boilerplate code-ul
  • Management automat al memoriei: Nu mai ai nevoie de delete/free
  • String-uri puternice built-in: Fără strcpy, strcat, buffer overflows
  • Liste dinamice native: Cresc și scad automat după necesitate
  • Debugging mai ușor: Erori clare și stack trace detaliat
  • Biblioteci extinse: Ecosistem bogat pentru orice necesitate
  • Dezvoltare rapidă: Focus pe logică, nu pe detalii low-level

📊 Comparație Finală - Linii de Cod

~300
Linii C++
➡️
~200
Linii Python

33% mai puțin cod, 100% funcționalitate!

8. Cum să Rulezi Codul
C++ Compilare & Rulare
# Compilare
g++ -o parcare parcare.cpp

# Rulare
./parcare
Python Rulare Directă
# Rulare directă - interpretat!
python parcare.py

# Sau
python3 parcare.py

⚡ Concluzie

Transformarea de la C++ la Python aduce simplitate și productivitate. Codul devine mai ușor de citit, de întreținut și de extins. Python este perfect pentru aplicații unde viteza de dezvoltare și claritatea codului sunt prioritare!