De ce avem nevoie de ALTFEL?
In lectia anterioara ai invatat structura DACA... ATUNCI . Ea verifica o conditie si executa ceva doar cand conditia este adevarata. Dar ce se intampla cand conditia este falsa ? Nimic! Programul pur si simplu trece mai departe fara sa faca nimic special. Uneori insa avem nevoie sa facem ceva diferit in fiecare caz.
Gandeste-te la un semafor: cand este verde , treci strada. Dar cand este rosu , nu stai pur si simplu - tu astepti . Ai doua actiuni diferite pentru cele doua situatii. Exact asta face structura DACA... ALTFEL : iti permite sa alegi intre doua drumuri diferite.
Iata un exemplu simplu din viata de zi cu zi:
DACA ploua ATUNCI
ia umbrela
ALTFEL
ia ochelari de soare
Observa ca in ambele cazuri faci ceva. Nu exista situatia in care nu faci nimic. Asta este puterea structurii DACA... ALTFEL: intotdeauna se executa ceva, fie pe ramura "adevarat", fie pe ramura "fals". Este ca o bifurcatie pe drum: mergi fie la stanga, fie la dreapta, dar nu poti sta pe loc.
Diferenta fata de DACA... ATUNCI simplu este clara: la DACA... ATUNCI, daca conditia e falsa, nu se intampla nimic. La DACA... ALTFEL, daca conditia e falsa, se executa blocul de dupa ALTFEL. Mereu ai o actiune, indiferent de rezultat.
In programare, aceasta structura se numeste structura alternativa sau ramificatie . Ea exista in toate limbajele de programare din lume: Python, C++, Java, JavaScript - toate au echivalentul lui DACA... ALTFEL. Scratch foloseste blocuri vizuale colorate, dar logica din spatele lor este identica cu cea din limbajele profesionale.
Un alt mod de a intelege structura: gandeste-te la un intrerupator de lumina . Daca este in pozitia SUS, lumina este aprinsa. Daca este in pozitia JOS, lumina este stinsa. Nu exista o a treia pozitie - mereu este ori sus, ori jos. La fel functioneaza si DACA... ALTFEL: mereu una din cele doua ramuri se executa.
Cum functioneaza in jocuri?
In jocurile video, structura DACA... ALTFEL este folosita la fiecare pas. Gandeste-te la ce se intampla cand un personaj incearca sa deschida o usa:
DACA jucatorul are cheia ATUNCI
deschide usa
afiseaza "Usa s-a deschis!"
ALTFEL
usa ramane inchisa
afiseaza "Ai nevoie de o cheie!"
Alte exemple din jocuri care folosesc DACA... ALTFEL:
- Vieti: DACA ai vieti ramase ATUNCI continua jocul, ALTFEL Game Over
- Scor: DACA scorul > 100 ATUNCI ai castigat, ALTFEL continua sa joci
- Timp: DACA timpul nu s-a terminat ATUNCI continua, ALTFEL timpul a expirat
- Coliziune: DACA personajul atinge un obstacol ATUNCI pierde o viata, ALTFEL continua drumul
Sa urmarim pas cu pas un exemplu: jucatorul are scorul 85 si verificam daca a castigat (scor > 100). Conditia "85 > 100" este FALSA , deci se executa ramura ALTFEL: "continua sa joci". Daca scorul ar fi fost 120, conditia "120 > 100" ar fi ADEVARATA si s-ar afisa "Ai castigat!".
Important: in DACA... ALTFEL, doar una dintre cele doua ramuri se executa. Niciodata nu se executa ambele. Este ca un comutator cu doua pozitii: fie "pornit", fie "oprit", niciodata amandoua.
Cand alegi intre doua actiuni
Folosesti "daca...altfel" cand ai exact doua variante posibile : una cand conditia e adevarata, alta cand e falsa. Este perfect pentru situatii de tip "ori asa, ori asa" din viata reala.
Iata cateva exemple concrete din viata unui elev de clasa a 6-a:
- La scoala: DACA nota este >= 5 ATUNCI "Ai trecut!" ALTFEL "Mai invata!"
- Acasa: DACA ai terminat temele ATUNCI poti iesi afara ALTFEL stai si invata
- La magazin: DACA ai suficienti bani ATUNCI cumpara produsul ALTFEL pune-l inapoi
- Pe strada: DACA semaforul e verde ATUNCI traverseaza ALTFEL asteapta
Dar cand NU ai nevoie de DACA... ALTFEL? Cand vrei sa faci ceva doar intr-un caz, fara actiune in celalalt. De exemplu: "DACA ploua ATUNCI ia umbrela" - daca nu ploua, pur si simplu nu faci nimic special. In acest caz, DACA... ATUNCI simplu este suficient.
O regula simpla: daca poti spune "in caz contrar, fac altceva", ai nevoie de DACA... ALTFEL. Daca in caz contrar nu faci nimic, DACA... ATUNCI simplu este de ajuns.
Gandeste-te la DACA... ALTFEL ca la o furculita in drum: intotdeauna mergi pe unul din cele doua drumuri. Nu poti sta pe loc si nu poti merge pe ambele simultan. Drumul pe care mergi depinde de raspunsul la intrebare (conditie).
Blocul daca...altfel in Scratch
In Scratch, blocul "daca... altfel" se gaseste in categoria Control (blocurile portocalii). Il gasesti chiar sub blocul "daca... atunci" pe care l-ai invatat deja. Blocul arata diferit: are forma de C dublu , cu doua "guri" unde poti pune blocuri.
Structura blocului in Scratch arata asa:
daca
<conditie>
atunci
[blocuri care se executa cand conditia e ADEVARATA]
altfel
[blocuri care se executa cand conditia e FALSA]
sfarsit
In gura de sus pui blocurile care se executa cand conditia este adevarata (ramura ATUNCI). In gura de jos pui blocurile care se executa cand conditia este falsa (ramura ALTFEL). In spatiul hexagonal de sus pui conditia - un bloc verde de comparatie sau un bloc de senzori.
Ca sa gasesti blocul, deschide Scratch, mergi la categoria Control si cauta blocul care are cuvintele "daca", "atunci", "altfel". Este mai mare decat blocul simplu "daca... atunci" pentru ca are doua spatii in loc de unul.
Un sfat util: poti trage si elibera blocuri in oricare din cele doua guri. Poti pune cate blocuri vrei in fiecare gura - de la un singur bloc la zeci de blocuri. Scratch le va incadra automat.
Comparatie vizuala intre cele doua blocuri de control:
- Blocul "daca... atunci" - are o singura gura (forma de C simplu). Arata ca litera C: are un spatiu in interior unde pui blocuri. Daca conditia e falsa, nu se intampla nimic.
- Blocul "daca... altfel" - are doua guri (forma de C dublu). Este mai inalt decat blocul simplu. Prima gura este pentru actiunea de pe ramura ATUNCI, a doua gura este pentru actiunea de pe ramura ALTFEL.
Retine: ambele blocuri au un spatiu hexagonal in partea de sus, unde pui conditia. Conditia trebuie sa fie un bloc cu forma hexagonala (colturi ascutite), cum ar fi blocurile de comparatie verzi (<, =, >) sau blocurile de senzori albastre ("atinge marginea?", "tasta apasata?").
Exemplu pas cu pas: Par sau Impar
Sa construim impreuna un program in Scratch care verifica daca un numar introdus de utilizator este par sau impar . Vom folosi structura DACA... ALTFEL.
Pas 1: Intreaba utilizatorul ce numar vrea sa verifice. Foloseste blocul "intreaba ... si asteapta" din categoria Senzori (albastru). Scrie: "Spune un numar!"
Pas 2: Raspunsul utilizatorului se salveaza automat in variabila "raspuns" (tot din Senzori).
Pas 3: Pune blocul "daca... altfel" din Control.
Pas 4: In spatiul conditiei, pune: "raspuns mod 2 = 0" . Operatorul "mod" (din categoria Operatori, blocul verde) calculeaza restul impartirii. Daca restul impartirii la 2 este 0, numarul este par.
Pas 5: In gura de sus (ATUNCI), pune: "spune 'Numarul este PAR!'"
Pas 6: In gura de jos (ALTFEL), pune: "spune 'Numarul este IMPAR!'"
Trasarea algoritmului: Sa verificam cu numarul 7. Raspunsul este 7. Calculam: 7 mod 2 = 1 (restul impartirii lui 7 la 2 este 1). Conditia "1 = 0" este FALSA, deci se executa ramura ALTFEL si sprite-ul spune "Numarul este IMPAR!". Corect! Acum sa verificam cu 12: 12 mod 2 = 0. Conditia "0 = 0" este ADEVARATA, deci se executa ramura ATUNCI: "Numarul este PAR!". Corect!
Exemplu: Verificarea varstei
Sa construim un alt program care verifica daca o persoana este majora (are 18 ani sau mai mult) sau minora . Este un exemplu clasic de DACA... ALTFEL.
Algoritmul in pseudocod (limbaj uman):
CITESTE varsta
DACA
varsta >= 18
ATUNCI
SCRIE "Esti adult!"
ALTFEL
SCRIE "Esti minor - ai nevoie de insotitor!"
In Scratch, construim asa: blocul "intreaba Cati ani ai? si asteapta", apoi blocul "daca...altfel" cu conditia "raspuns >= 18". Pe ramura ATUNCI punem "spune Esti adult!", pe ramura ALTFEL punem "spune Esti minor - ai nevoie de insotitor!".
Trasarea pas cu pas pentru varsta = 25:
- Utilizatorul introduce: 25
- Variabila "raspuns" devine 25
- Se verifica: 25 >= 18? DA (ADEVARAT)
- Se executa ramura ATUNCI: sprite-ul spune "Esti adult!"
Trasarea pas cu pas pentru varsta = 10:
- Utilizatorul introduce: 10
- Variabila "raspuns" devine 10
- Se verifica: 10 >= 18? NU (FALS)
- Se executa ramura ALTFEL: sprite-ul spune "Esti minor - ai nevoie de insotitor!"
Observa cum algoritmul da raspunsul corect in ambele cazuri. Acesta este avantajul structurii DACA... ALTFEL: mereu ofera un raspuns, indiferent de ce introduce utilizatorul.
Schema logica (flowchart)
O schema logica (flowchart) este un desen care arata cum functioneaza un algoritm. Fiecare tip de actiune are o forma speciala. Pentru structura DACA... ALTFEL, folosim un romb (forma de diamant) care contine conditia.
Elementele unei scheme logice:
- Oval (capsula) - START si STOP (inceputul si sfarsitul programului)
- Paralelogram - Citire si Scriere (input/output)
- Dreptunghi - Prelucrare (calcule, atribuiri)
- Romb (diamant) - Decizie (conditie DACA... ALTFEL)
- Sageti - Directia in care merge algoritmul
Din romb ies doua sageti : una marcata cu DA (conditia e adevarata) si una marcata cu NU (conditia e falsa). Fiecare sageata duce la blocul de actiuni corespunzator. Dupa ce ambele ramuri se termina, ele se unesc inapoi intr-un singur fir.
Sa desenam mental schema logica pentru verificarea varstei:
- Oval: START
- Paralelogram: CITESTE varsta
- Romb: varsta >= 18?
- Sageata DA: Paralelogram: SCRIE "Esti adult!"
- Sageata NU: Paralelogram: SCRIE "Esti minor!"
- Ambele sageti se unesc
- Oval: STOP
Schemele logice te ajuta sa vizualizezi algoritmul inainte de a-l programa. Multi programatori profesionisti deseneaza schema logica pe hartie inainte de a scrie cod. Este ca un plan de constructie pentru o casa: te ajuta sa vezi daca totul se leaga corect.
Un exercitiu util: ia o foaie de hartie si deseneaza schema logica pentru exemplul cu ploaia (DACA ploua ATUNCI ia umbrela ALTFEL ia ochelari de soare). Incepe cu ovalul START, apoi paralelogramul pentru citirea conditiei "ploua?", rombul cu decizia, cele doua ramuri cu actiunile, apoi unirea ramurilor si ovalul STOP. Compara cu schema unui coleg pentru a vedea daca ati desenat la fel.
In clasele urmatoare vei invata sa desenezi scheme logice si mai complexe, cu bucle (repetitii) si cu mai multe decizii. Dar fundamentul este acelasi: fiecare decizie este un romb cu doua sageti, DA si NU.
Exemplu: Nota de trecere
Sa construim un program care verifica daca un elev a luat nota de trecere (nota >= 5). Vom trasa algoritmul pentru mai multe valori ca sa intelegem perfect cum functioneaza.
Algoritmul in pseudocod:
CITESTE nota
DACA
nota >= 5
ATUNCI
SCRIE "Felicitari, nota de trecere!"
ALTFEL
SCRIE "Trebuie sa mai inveti!"
Trasare pentru nota = 9: Se verifica: 9 >= 5? DA. Se executa ramura ATUNCI: "Felicitari, nota de trecere!"
Trasare pentru nota = 3: Se verifica: 3 >= 5? NU. Se executa ramura ALTFEL: "Trebuie sa mai inveti!"
Trasare pentru nota = 5: Se verifica: 5 >= 5? DA (5 este egal cu 5, iar >= inseamna "mai mare sau egal"). Se executa ramura ATUNCI: "Felicitari, nota de trecere!"
Cazul limita nota = 5 este important! Operatorul >= include si egalitatea. Daca am fi folosit doar > (strict mai mare), atunci nota 5 ar fi cazut pe ramura ALTFEL, ceea ce ar fi incorect. Cand scrii conditii, gandeste-te bine daca vrei sa incluzi si egalitatea sau nu.
In Scratch, operatorii de comparatie se gasesc in categoria Operatori (verde). Ai la dispozitie: < (mai mic), = (egal) si > (mai mare). Pentru ">=" trebuie sa combini doi operatori cu un bloc SAU, dar cel mai simplu este sa inversezi conditia: in loc de "nota >= 5" poti folosi "NU (nota < 5)".
DACA... ALTFEL imbricat
Uneori doua optiuni nu sunt suficiente. De exemplu, la un examen nu vrei doar "trecut" sau "picat", ci vrei sa clasifici nota: "Foarte bine", "Bine", "Suficient" sau "Insuficient". Pentru asta, pui un DACA... ALTFEL in interiorul altui DACA... ALTFEL . Aceasta tehnica se numeste imbricare (nesting).
Algoritmul in pseudocod pentru clasificarea notei:
CITESTE nota
DACA
nota >= 9
ATUNCI
SCRIE "Foarte bine!"
ALTFEL
DACA
nota >= 7
ATUNCI
SCRIE "Bine!"
ALTFEL
DACA
nota >= 5
ATUNCI
SCRIE "Suficient!"
ALTFEL
SCRIE "Insuficient!"
Trasare pentru nota = 8:
- Se verifica: 8 >= 9? NU. Se merge pe ramura ALTFEL.
- In ALTFEL, se verifica: 8 >= 7? DA. Se executa: "Bine!"
- Nu mai verifica celelalte conditii (s-a gasit deja ramura potrivita).
Trasare pentru nota = 4:
- Se verifica: 4 >= 9? NU. Se merge pe ALTFEL.
- Se verifica: 4 >= 7? NU. Se merge pe ALTFEL.
- Se verifica: 4 >= 5? NU. Se merge pe ALTFEL.
- Se executa ultima ramura ALTFEL: "Insuficient!"
In Scratch, pui blocul daca...altfel in interiorul gurii ALTFEL a altui bloc daca...altfel. Poti avea oricate niveluri, dar peste 3-4 niveluri codul devine greu de urmarit. In practica, 2-3 niveluri sunt suficiente pentru majoritatea situatiilor.
Gandeste-te la imbricare ca la cutiile chinezesti: o cutie in alta cutie, in alta cutie. Fiecare cutie este un nivel de decizie. Cu cat ai mai multe cutii, cu atat este mai greu sa le deschizi pe toate - la fel si in programare, prea multe niveluri fac codul confuz.
Un alt exemplu de imbricare din viata reala: la restaurant, chelnerul te intreaba "Vreti desert?" (prima decizie). Daca DA, te intreaba "Tort sau inghetata?" (a doua decizie, imbricata). Daca ai ales tort, te intreaba "Cu frisca sau fara?" (a treia decizie). Fiecare intrebare depinde de raspunsul anterior.
Greseli frecvente si sfaturi
Cand lucrezi cu structura DACA... ALTFEL, exista cateva greseli frecvente pe care le fac incepatorii. Sa le analizam pe fiecare ca sa le eviti:
Greseala 1: Uiti sa pui actiuni pe ramura ALTFEL. Daca lasi gura de jos goala, inseamna ca nu ai nevoie de ALTFEL - foloseste mai bine un DACA... ATUNCI simplu. Scopul lui ALTFEL este tocmai sa faci ceva diferit cand conditia e falsa.
Greseala 2: Conditia nu acopera toate cazurile. De exemplu, daca verifici "nota > 5" in loc de "nota >= 5", nota 5 cade pe ramura ALTFEL, ceea ce ar fi gresit daca 5 este nota de trecere. Gandeste-te mereu la cazurile limita!
Greseala 3: Pui conditia invers. Daca vrei sa verifici "ploua?", asigura-te ca ramura ATUNCI contine actiunea pentru cand ploua, nu invers. O conditie pusa invers face programul sa functioneze pe dos.
Greseala 4: Confunzi = cu ==. In Scratch acest lucru nu este o problema (exista un singur bloc de egalitate), dar in alte limbaje de programare = inseamna "atribuie" si == inseamna "compara". Retine aceasta diferenta pentru viitor.
Sfaturi practice:
- Testeaza programul cu cel putin 3 valori: una care face conditia adevarata, una care o face falsa si una la limita (exact pe granita conditiei)
- Citeste conditia cu voce tare: "DACA numarul este mai mare decat 5" - are sens?
- Deseneaza schema logica pe hartie inainte de a programa in Scratch
- Numeste variabilele clar: "varsta", "nota", "scor" - nu "x" sau "n"
- Verifica mereu ca ambele ramuri sa faca ceva logic - o ramura goala inseamna ca nu ai nevoie de ALTFEL
- Cand ai dubii daca conditia e corecta, traseaz-o pe hartie cu 3 valori diferite si vezi daca rezultatul este cel asteptat
Exercitii practice
Exercitiul 1 (Nivel minim) - Analiza deciziilor
Gandeste-te la situatii din viata reala in care iei decizii de tip DACA... ALTFEL. Raspunde la urmatoarele intrebari:
- Descrie 3 situatii din viata ta de zi cu zi care functioneaza ca DACA... ALTFEL (de exemplu: "DACA am bani suficienti ATUNCI cumpar gustarea, ALTFEL beau apa de la robinet").
- Pentru fiecare situatie, scrie clar care este conditia, ce se intampla pe ramura ATUNCI si ce se intampla pe ramura ALTFEL.
- Poti gasi o situatie din viata reala unde ai nevoie de DACA... ALTFEL imbricat (cu mai mult de 2 variante)? Descrie-o.
- De ce este importanta structura DACA... ALTFEL in programare? Ce s-ar intampla daca n-ar exista?
Raspunde numerotat: 1. ... 2. ... 3. ... 4. ...
Sfat: gandeste-te la situatii de la scoala, de acasa, din jocuri sau din sport. Cu cat exemplele sunt mai concrete, cu atat raspunsul este mai bun.
Indicii pentru raspunsuri bune:
- Scrie conditia exact: "DACA temperatura > 30 grade ATUNCI..."
- Fii specific cu actiunile: nu doar "fac ceva", ci "iau umbrela din dulap"
- Pentru imbricare, gandeste-te la situatii cu 3 sau mai multe optiuni
- La intrebarea 4, gandeste-te ce ar face un program fara ALTFEL: ar ignora complet cazul negativ
Exercitiul 2 (Nivel standard) - Mini-proiect: Joc de ghicit in Scratch
Creeaza in Scratch un joc simplu in care sprite-ul alege un numar secret (intre 1 si 10), iar utilizatorul trebuie sa-l ghiceasca. Programul spune daca a ghicit sau nu, si daca numarul este mai mare sau mai mic decat cel ales.
Cerinte obligatorii:
⭐ Bonus (pentru nota maxima):
- Adauga un DACA... ALTFEL imbricat pe ramura ALTFEL: daca raspunsul e mai mic decat numarul secret, spune "Prea mic!", altfel spune "Prea mare!"
- Adauga un contor de incercari si afiseaza de cate ori a incercat utilizatorul
- Pune jocul intr-o bucla "repeta pana cand" ca sa permita mai multe incercari
- Schimba costumul sprite-ului in functie de raspunsul corect sau gresit
Salveaza proiectul in Scratch cu numele "Joc_Ghiceste_NumeleTau" si partajeaza link-ul cu profesorul.
Exercitiul 3 (Nivel performanta) - Compunere
Cerinta: Scrie un text de 8-10 randuri in care explici cum functioneaza structura DACA... ALTFEL. Foloseste un exemplu concret din viata reala si descrie pas cu pas cum ar arata algoritmul: care este conditia, ce se intampla cand este adevarata si ce se intampla cand este falsa. Explica si de ce aceasta structura este utila in programare.
Indicii pentru structurarea raspunsului:
- Incepe prin a explica ce inseamna DACA... ALTFEL cu cuvintele tale
- Da un exemplu concret (nu doar "daca ploua ia umbrela" - fi creativ!)
- Scrie pseudocodul pentru exemplul tau
- Explica diferenta fata de DACA... ATUNCI simplu
- Incheie cu un argument despre utilitatea structurii in programare
Cuvinte cheie de folosit: conditie, adevarat, fals, ramura, alternativa, decizie, algoritm, structura
Format: Scrie raspunsul in caiet sau intr-un document Word cu paragrafe coerente. Foloseste cel putin 5 din cuvintele cheie de mai sus.
Structura recomandata:
- Paragraful 1: Defineste DACA... ALTFEL si explica rolul fiecarei parti
- Paragraful 2: Exemplul concret cu pseudocodul complet
- Paragraful 3: Diferenta fata de DACA... ATUNCI si cand alegi fiecare varianta
- Paragraful 4: De ce este importanta aceasta structura in programare