Invatare Atomica

IF-ELSE-IF si decizii multiple

Progres lectie:
0%
🎯

Obiectivul lectiei

Vei invata sa exprimi decizii cu mai mult de doua ramuri folosind structura if-elif-else, sa combini conditii cu operatorii logici and, or, not si sa alegi structura potrivita (cascada vs. structuri imbricate) pentru fiecare problema.

Dupa aceasta lectie vei putea:

  • Sa scrii o cascada de decizii cu if-elif-else in Python (echivalentul else if)
  • Sa folosesti corect operatorii logici and, or, not in conditii
  • Sa construiesti decizii pe intervale (ex: incadrarea unei note in calificative)
  • Sa intelegi cum se evalueaza o cascada: prima conditie adevarata castiga, restul se ignora
  • Sa folosesti structuri if imbricate cand deciziile depind una de alta
  • Intensiv: sa scrii echivalentul in C++ (else if, switch) si sa folosesti match-case / operatorul ternar

Incearca singur!

Provocare:

Un magazin acorda reduceri in functie de suma cumparata: sub 100 lei → fara reducere, intre 100 si 500 lei → 10%, peste 500 lei → 20%. Scrie in pseudocod sau in cuvinte deciziile, in ordinea in care le-ai verifica. Cate ramuri are problema?

💡 Ai nevoie de un indiciu?

Problema are 3 ramuri, deci ai nevoie de if, o ramura elif (altfel daca) si else (altfel). Ordinea conteaza: verifica intervalele de la mic la mare, ca fiecare conditie sa "prinda" doar cazul ei.

Aceasta este exact structura if-elif-else pe care o invatam azi!

1

1. Recapitulare: doua ramuri cu if-else

Structura if-else alege intre doua variante: daca o conditie este adevarata se executa primul bloc, altfel se executa blocul else. In Python, blocul unei ramuri este delimitat prin indentare (4 spatii), nu prin acolade.
# nota = 7
if nota >= 5:
    print("Promovat")
else:
    print("Corigent")
Output real (pentru nota = 7):
Promovat
Cu doua ramuri putem raspunde la intrebari de tip DA/NU. Dar multe probleme au mai mult de doua cazuri - pentru ele avem nevoie de o cascada.
2

2. Decizii multiple cu if-elif-else

Cand ai mai multe cazuri care se exclud reciproc, folosesti elif (prescurtare de la "else if"). Programul verifica conditiile de sus in jos: prima conditie adevarata castiga, blocul ei se executa, iar restul cascadei este sarit complet. Ramura else (optionala) prinde toate cazurile ramase.
# nota = 8
if nota < 5:
    print("Insuficient")
elif nota < 7:
    print("Suficient")
elif nota < 9:
    print("Bine")
else:
    print("Foarte bine")
Output real (pentru nota = 8):
Bine
De ce intervalele se verifica de la mic la mare? Pentru nota 8: 8 < 5 este fals, 8 < 7 este fals, 8 < 9 este adevarat → afiseaza Bine si se opreste. Nu mai trebuie sa scriem elif 7 <= nota < 9: faptul ca am ajuns la a treia ramura garanteaza deja ca nota e cel putin 7.
3

3. Operatorii logici: and, or, not

O conditie poate combina mai multe verificari cu operatorii logici:
  • and (SI) - adevarat doar daca ambele parti sunt adevarate
  • or (SAU) - adevarat daca cel putin una dintre parti este adevarata
  • not (NU) - inverseaza valoarea de adevar
varsta = 20
are_permis = True
if varsta >= 18 and are_permis:
    print("Poate conduce")
else:
    print("Nu poate conduce")

temp = 35
if temp < 0 or temp > 30:
    print("Vreme extrema")
else:
    print("Vreme normala")

ploua = False
if not ploua:
    print("Iesim afara")
Output real:
Poate conduce
Vreme extrema
Iesim afara
Tabel de adevar (cazurile cheie): True and False = False; True or False = True; not False = True. Cu acesti trei operatori poti exprima orice conditie compusa.
4

4. Structuri if imbricate (nested)

Uneori o decizie are sens doar in interiorul alteia. Atunci punem un if in interiorul altui if - se numeste structura imbricata. Indentarea suplimentara arata pe ce nivel se afla fiecare decizie. Exemplu: determinarea cadranului unui punct dupa semnele coordonatelor x si y.
x = 10
y = -3
if x > 0:
    if y > 0:
        print("Cadranul I")
    else:
        print("Cadranul IV")
else:
    if y > 0:
        print("Cadranul II")
    else:
        print("Cadranul III")
Output real (pentru x = 10, y = -3):
Cadranul IV
Imbricare vs. cascada: foloseste elif cand cazurile sunt "in serie" (un singur criteriu, mai multe intervale - ca la note). Foloseste imbricarea cand a doua intrebare are sens doar dupa raspunsul la prima (aici intrebam de y separat in fiecare ramura a lui x).
5

5. EXCLUSIV INTENSIV (C++) else if si switch

Aceasta sectiune este exclusiv pentru regimul intensiv informatica (al doilea limbaj, C++). In C++ blocurile se delimiteaza cu acolade { } (sau o singura instructiune fara acolade), iar cascada se scrie else if (doua cuvinte). Conditia se pune obligatoriu in paranteze.
#include <iostream>
using namespace std;
int main() {
    int nota = 8;
    if (nota < 5)
        cout << "Insuficient" << endl;
    else if (nota < 7)
        cout << "Suficient" << endl;
    else if (nota < 9)
        cout << "Bine" << endl;
    else
        cout << "Foarte bine" << endl;
    return 0;
}
Output real (compilat cu g++ -std=c++17, pentru nota = 8):
Bine
Cand alegi intre valori discrete (zi a saptamanii, optiune de meniu), C++ ofera switch. Fiecare case are nevoie de break, altfel executia "curge" in case-ul urmator (fall-through). Doua case consecutive fara cod intre ele grupeaza valori (aici 6 si 7 = weekend).
#include <iostream>
using namespace std;
int main() {
    int zi = 3;
    switch (zi) {
        case 1: cout << "Luni" << endl; break;
        case 6:
        case 7: cout << "Weekend" << endl; break;
        default: cout << "Zi lucratoare" << endl;
    }
    return 0;
}
Output real (compilat cu g++ -std=c++17, pentru zi = 3):
Zi lucratoare
6

6. EXTINDERE INTENSIV match-case si operatorul ternar

Continut de extindere pentru intensiv. Python (de la versiunea 3.10) are propria structura pentru valori discrete: match-case. Spre deosebire de switch din C++, nu are nevoie de break: dupa un case potrivit, executia iese automat. case _ este cazul implicit (orice altceva), iar | grupeaza valori.
zi = 3
match zi:
    case 1:
        print("Luni")
    case 6 | 7:
        print("Weekend")
    case _:
        print("Zi lucratoare")

# operator ternar: o decizie scrisa pe o singura linie
nota = 4
rezultat = "Promovat" if nota >= 5 else "Picat"
print(rezultat)
Output real (pentru zi = 3, nota = 4):
Zi lucratoare
Picat
Operatorul ternar valoare_daca_adevarat if conditie else valoare_daca_fals condenseaza un if-else simplu intr-o singura expresie - util cand vrei doar sa atribui o valoare in functie de o conditie.

Exercitii practice

Exercitiul 1 (Nivel minim) - Pozitiv, negativ sau zero

Scrie un program Python care citeste un numar intreg n si afiseaza "Pozitiv", "Negativ" sau "Zero", folosind o cascada if-elif-else. Atentie la ordinea ramurilor.

Exercitiul 2 (Nivel standard) - Calificativul notei

Citeste o nota intre 1 si 10 si afiseaza calificativul: sub 5 → "Insuficient", 5-6 → "Suficient", 7-8 → "Bine", 9-10 → "Foarte bine". Foloseste operatorii logici (and) sau ordonarea intervalelor pentru a incadra corect fiecare caz.

Exercitiul 3 (Nivel performanta) - Tipul triunghiului intensiv: rezolva si in C++

Citeste trei laturi a, b, c. Mai intai verifica daca pot forma un triunghi (suma oricaror doua laturi > a treia). Daca da, afiseaza tipul: "Echilateral" (toate egale), "Isoscel" (exact doua egale) sau "Oarecare". Foloseste conditii compuse cu and si structuri imbricate. La intensiv, scrie aceeasi solutie si in C++.

Ce ai invatat astazi

  • Cascada if-elif-else pentru decizii cu mai multe ramuri (prima conditie adevarata castiga)
  • Operatorii logici and, or, not pentru conditii compuse
  • Decizii pe intervale (incadrarea unei note in calificative)
  • Structuri if imbricate, cand o decizie depinde de alta
  • Intensiv: else if si switch in C++; match-case si operatorul ternar in Python

Urmatoarea lectie

Continua cu Bucla FOR - cum repetam automat un grup de instructiuni de un numar cunoscut de ori.

Continua →