Invatare Atomica

Bucle in Scratch - Repetitie Automata

Progres lectie:
0%
🎯

Obiectivul lectiei

Trebuie sa scrii acelasi cod de 100 de ori... Desenarea figurilor geometrice e imposibila... Animatiile sunt greoaie... Programele tale sunt uriase si greu de citit...

Dupa aceasta lectie vei putea:

  • Sa folosesti blocul 'repeta de [n] ori' pentru actiuni repetitive
  • Sa folosesti blocul 'repeta la infinit' pentru animatii continue
  • Sa combini buclele cu conditii pentru a crea comportamente complexe
  • Sa opresti o bucla infinita folosind 'opreste tot' sau 'opreste acest script'
  • Sa optimizezi un program inlocuind actiuni repetate cu bucle

Incearca singur!

🎮 Incearca tu!

Provocare: Deseneaza un Patrat Perfect!

Inainte sa invatam teoria, sa experimentam puterea buclelor! Vom crea un cod care deseneaza un patrat perfect folosind repetitie.

  1. Deschide Scratch si creeaza un proiect nou
  2. Adauga extensia "Pen" (Click pe butonul cu + din stanga jos, alege "Pen")
  3. Sterge sprite-ul pisica si adauga un sprite Arrow (sageata)
  4. Adauga "when green flag clicked" (Evenimente - galben)
  5. Sub el, pune "pen down" (Pen - verde inchis) pentru a desena
  6. Acum cauta blocul "repeat 4" (Control - portocaliu)
  7. In interiorul blocului "repeat 4", pune:
    • "move 100 steps" (Motion - albastru inchis)
    • "turn 90 degrees" (Motion - albastru inchis)
  8. Apasa green flag si priveste! Sageata deseneaza un patrat perfect!
  9. Experimenteaza: Schimba "repeat 4" cu "repeat 6" si vezi ce figura obtii!
CODUL TAU SCRATCH:
when [green flag] clicked
pen down
repeat (4)
    move (100) steps
    turn ↻ (90) degrees
end
De ce functioneaza? Un patrat are 4 laturi egale si 4 colturi de 90 de grade. In loc sa scrii de 4 ori "move + turn", bucla repeta automat codul de 4 ori!
💡 Indiciu #1: Nu gasesti extensia Pen?
Click pe butonul cu "+" (Add Extension) din coltul din stanga jos al Scratch. In lista care apare, cauta si click pe "Pen". Acum vei avea o noua categorie verde inchis cu blocuri pentru desenare!
💡 Indiciu #2: Patratul nu e inchis complet?
Verifica ca ai pus EXACT 90 de grade in "turn". Daca pui mai mult sau mai putin, colturilenu vor fi drepte. De asemenea, asigura-te ca "move" si "turn" sunt AMBELE in interiorul blocului "repeat 4"!
💡 Indiciu #3: Cum desenez alte figuri?
Triunghi: repeat 3, turn 120 degrees
Hexagon (6 laturi): repeat 6, turn 60 degrees
Octogon (8 laturi): repeat 8, turn 45 degrees
Formula: Unghi de rotatie = 360 / numar laturi

🌟 Provocare Bonus (optional)

Creeaza o spirala! Foloseste "forever" in loc de "repeat 4", si adauga "change [lungime] by 5" inainte de "move (lungime) steps". Sageata va desena o spirala care creste progresiv!

1

1. Continut

🔄
Ce sunt Buclele?
Definitie: O bucla este o structura de programare care REPETA un set de instructiuni de mai multe ori. In loc sa scrii acelasi cod de 100 de ori, il pui intr-o bucla care il executa automat de 100 de ori!
Analogie din viata ta: Buclele sunt ca un playlist pe repeat! Daca asculti aceeasi melodie de 10 ori, nu dai play manual de 10 ori - pui melodia pe "repeat". La fel si in programare: pui codul in bucla si el se repeta automat!

De ce sunt importante buclele?

  • Eficienta: Scrii COD SCURT in loc de cod lung si repetitiv
  • 🎨 Creativitate: Desenezi figuri complexe si creezi animatii fluide
  • 🧹 Organizare: Codul tau e mai usor de citit si modificat
  • ♾️ Continuitate: Poti crea actiuni care ruleaza la nesfarsit (jocuri, animatii)
Inainte de bucle, daca voiai sa desenezi un cerc cu 360 de puncte, trebuia sa scrii 360 de blocuri "move" si "turn"! Cu bucle, faci asta cu doar 3 blocuri: repeat 360, move 1, turn 1.
2

2. Continut

♾️
Bucla "forever" (La Infinit)
Definitie: Bucla "forever" (pentru totdeauna) executa codul din interiorul sau LA NESFARSIT. Se repeta continuu pana cand programul este oprit manual (apasand butonul rosu STOP).
Analogie din viata ta: E ca un motor care merge la infinit! Masina care face ture pe circuit nu se opreste decat daca tu apesi frana. La fel, bucla "forever" ruleaza continuu pana ii spui tu sa se opreasca.

Cand folosesti bucla "forever"?

  • 🎮 Jocuri: Verificarea continua a coliziunilor si controalelor
  • 🎬 Animatii: Miscari repetitive (plimbare, plutire, rotire)
  • 🔊 Reactii: Ascultare continua pentru input de la utilizator
  • 📊 Actualizari: Update constant al scorului, vietilor, cronometrului

📋 Exemplu: Sprite care se misca si ricoseaza

when [green flag] clicked
forever
move (10) steps
if on edge, bounce

Explicatie: Sprite-ul se misca cu 10 pasi inainte PENTRU TOTDEAUNA. Cand atinge marginea, ricoseaza. Aceasta bucla ruleaza LA INFINIT pana cand apesi STOP. Perfect pentru un joc de tip "bouncing ball"!

Bucla "forever" nu se opreste singura! Trebuie sa apesi butonul rosu STOP din Scratch. Daca pui prea multe actiuni grele in "forever" (de exemplu, multe calcule complexe), programul poate incetini!
3

3. Continut

🔢
Bucla "repeat N" (Repeta de N ori)
Definitie: Bucla "repeat N" (repeta de N ori) executa codul din interiorul sau EXACT de un numar fix de ori (N). Dupa ce termina toate repetitiile, programul continua cu urmatorul bloc.
Analogie din viata ta: E ca sa faci genuflexiuni! Daca iti propui sa faci 20 de genuflexiuni, le numeri: 1, 2, 3... 20, si apoi te opresti. La fel, bucla "repeat 20" numara repetitiile si se opreste automat la 20.

Cand folosesti bucla "repeat N"?

  • 📐 Figuri geometrice: Patrat (4), triunghi (3), hexagon (6)
  • 🔊 Sunete repetate: Reda sunet de 5 ori
  • 🎨 Clonare: Creeaza 10 clone ale unui sprite
  • Efecte vizuale: Flash de 3 ori (show/hide alternativ)

📋 Exemplu: Desenare hexagon (6 laturi)

when [green flag] clicked
pen down
repeat (6)
move (80) steps
turn ↻ (60) degrees

Explicatie: Hexagonul are 6 laturi egale si 6 colturi de 60 de grade (360/6 = 60). Bucla "repeat 6" executa "move + turn" de 6 ori, desenand cele 6 laturi. Dupa ce termina, programul se opreste.

Formula pentru figuri regulate: Unghi de rotatie = 360 / numar de laturi. Patrat: 360/4 = 90°. Triunghi: 360/3 = 120°. Cerc aproximativ: 360/360 = 1° (360 de laturi mici).
4

4. Continut

⏸️
Bucla "repeat until" (Repeta pana cand)
Definitie: Bucla "repeat until" (repeta pana cand) executa codul PANA CAND o conditie devine ADEVARATA. Se repeta continuu cat timp conditia e FALSA, si se OPRESTE imediat ce conditia devine ADEVARATA.
Analogie din viata ta: E ca sa alergi pana ajungi la finish! Continui sa alergi (repetarea) PANA CAND atingi linia de finish (conditia). Cand atingi linia, te opresti automat. Nu stii exact cate pasi vor fi, dar stii CAND sa te opresti!

Diferenta fata de "forever" si "repeat N":

Bucla Se opreste? Cand?
forever NU (infinit) Doar la STOP manual
repeat N DA Dupa N repetitii
repeat until DA Cand conditia devine DA

📋 Exemplu: Sprite care merge pana atinge marginea

when [green flag] clicked
repeat until <touching [edge]?>
move (5) steps
say [Am ajuns la margine!]

Explicatie: Sprite-ul merge cu 5 pasi inainte PANA CAND atinge marginea. Nu stim cate repetitii vor fi (depinde de pozitia initiala), dar stim ca se va opri automat cand atinge marginea. Dupa oprire, spune un mesaj.

ATENTIE la bucla infinita ascunsa! Daca conditia din "repeat until" nu devine NICIODATA adevarata, bucla va rula la infinit ca "forever"! Exemplu: "repeat until <1 = 2>" ruleaza la infinit pentru ca 1 nu va fi niciodata egal cu 2!
5

5. Continut

🪆
Bucle Imbricate (Nested Loops)
Definitie: Buclele imbricate sunt bucle puse INAUNTRUL altor bucle. Bucla interioara se executa COMPLET pentru fiecare iteratie a buclei exterioare. E ca un ceas: secundele (bucla interioara) fac o tura completa pentru fiecare minut (bucla exterioara).
Analogie din viata ta: E ca o saptamana de scoala! Bucla exterioara = zilele (5 zile). Bucla interioara = orele de curs (6 ore pe zi). Pentru fiecare ZI (bucla exterioara), ai 6 ORE (bucla interioara se executa complet). Total: 5 zile × 6 ore = 30 ore!

Cum functioneaza buclele imbricate?

1. Bucla exterioara incepe prima iteratie

2. Bucla interioara ruleaza COMPLET (toate iteratiile ei)

3. Bucla exterioara trece la a doua iteratie

4. Bucla interioara ruleaza DIN NOU complet

5. Process se repeta pana bucla exterioara termina

📋 Exemplu: Grila de patrate 3×3

when [green flag] clicked
go to x:(-100) y:(100)
pen down
repeat (3) // Randul
repeat (4) // Un patrat
move (50) steps
turn ↻ (90) degrees
change x by (60) // Trecem la urmatorul patrat
set x to (-100) // Reset coloana
change y by (-60) // Trecem pe randul urmator

Explicatie: Bucla exterioara (repeat 3) controleaza randurile. Pentru FIECARE rand, bucla interioara (repeat 4) deseneaza un patrat COMPLET. Rezultat: 3 randuri × 3 patrate/rand = grila 3×3 cu 9 patrate!

Numar total de executii = Iteratii bucla exterioara × Iteratii bucla interioara. Exemplu: repeat 5 cu repeat 10 inauntru = 5 × 10 = 50 executii totale ale codului cel mai interior!
Poti imbrica cate bucle vrei (3, 4, chiar 5 niveluri), dar de obicei 2-3 niveluri sunt suficiente. Prea multe imbricate fac codul greu de citit si pot incetini programul!
6

6. Continut

🔗
Combinarea Buclelor cu Conditii
Definitie: Poti combina bucle cu conditii (if-then) pentru a crea logica complexa. Bucla se repeta, iar in fiecare iteratie, conditia decide daca se executa anumite actiuni sau nu. E cea mai puternica combinatie din programare!
Analogie din viata ta: E ca sa mergi prin padure si sa culeги ciuperci! Mergi continuu (bucla forever), dar culeги ciuperci DOAR daca vezi una comestibila (conditia if). Nu te opresti din mers, dar iei decizia "culeg sau nu" la fiecare pas!

Cazuri frecvente de combinare:

Forever + If (Verificare continua)

Verifica MEREU o conditie. Folosit in jocuri pentru detectarea coliziunilor, tastatură, mouse.

Exemplu: forever { if <touching enemy> then { game over } }

Repeat N + If (Filtrare)

Repeta de N ori, dar executa ceva DOAR daca conditia e adevarata in acea iteratie.

Exemplu: repeat 10 { if <numar par> then { stamp } } → Stampileaza doar la iteratii pare

Repeat Until cu If inauntru (Cautare)

Cauta ceva anume, verificand conditii suplimentare pe parcurs.

Exemplu: repeat until <touching edge> { if <touching coin> then { collect } move }

📋 Exemplu: Joc simplu de evitare

when [green flag] clicked
set [scor] to (0)
forever
move (10) steps
if <touching [edge]?> then
turn ↻ (180) degrees
if <touching [Coin]?> then
change [scor] by (1)
play sound [coin]
if <touching [Enemy]?> then
say [Game Over!]
stop [all]

Explicatie: Bucla "forever" misca sprite-ul continuu. In FIECARE iteratie, verifica 3 conditii: (1) Atinge marginea? → se intoarce. (2) Atinge moneda? → mareste scorul. (3) Atinge inamicul? → game over. Logica complexa creata prin combinatie!

Nu pune "wait" inainte de "if" in bucla "forever"! Daca scrii "forever { wait 1 sec, if <key pressed> }", verificarea e lenta si reactivitatea scade. Pune "wait" DUPA "if" sau in interiorul "if"-ului!
7

7. Continut

⚠️
Bucle Infinite vs Bucle Controlate
Definitie: O bucla infinita ruleaza LA NESFARSIT fara sa se opreasca (intentionat sau accidental). O bucla controlata are o conditie de oprire clara si se va termina la un moment dat. Ambele au utilizari, dar trebuie folosite CORECT!
Analogie din viata ta: Bucla infinita intentionata = un ventilator care merge mereu (vrei sa mearga continuu). Bucla infinita accidentala = usa care se inchide si se redeschide la infinit pentru ca e blocata (nu vrei asta, e o problema!). Bucla controlata = un conometru care numara pana la 0 si apoi se opreste.

Tipuri de bucle infinite:

Tip Exemplu Status
INTENTIONATA (OK) forever { move, check collision } ✅ Buna
ACCIDENTALA (BUG) repeat until <1=2> { } ❌ Rea
CONTROLATA repeat 10 { say "Hi" } ✅ Buna
Cum eviti bucle infinite accidentale? (1) Verifica ca conditia din "repeat until" POATE deveni adevarata. (2) Testeaza programul cu numere mici inainte de numere mari. (3) Daca programul ingheata, apasa STOP rapid!
Cand folosesti "forever" intentionat? In jocuri (game loop), animatii (plimbare continua), ascultatori de evenimente (verificare taste), actualizari de status (cronometru). E NORMAL si UTIL!
In Scratch, daca programul ruleaza prea mult intr-o bucla fara "wait" sau alte blocuri grele, ecranul se poate ingheta pentru ca browserul nu are timp sa actualizeze vizualul. Adauga "wait 0.01 seconds" in bucle forever pentru a preveni inghetarea!

Exercitii practice

Exercitiul 1 (Nivel minim) -

Exercitiu Creativ
Desenator Geometric - Figuri Multiple

Creeaza un program Scratch care deseneaza 3 figuri geometrice diferite folosind bucle:

  1. Patrat: repeat 4, move 80 steps, turn 90 degrees
  2. Hexagon: repeat 6, move 70 steps, turn 60 degrees
  3. Stea cu 8 colturi: repeat 8, move 60 steps, turn 135 degrees
  4. Provocare: Foloseste "pen up", "pen down" si "go to x: y:" pentru a pozitiona fiecare figura in colturile diferite ale scenei
  5. Bonus: Adauga "set pen color to" si "change pen color by 10" pentru a face fiecare latura colorata diferit!

Exercitiul 2 (Nivel standard) -

Exercitiu Logic
Countdown Timer cu Bucla

Creeaza un cronometru cu numaratoare inversa de la 10 la 0:

  1. Creeaza o variabila "timp" si seteaz-o la 10
  2. Foloseste "repeat 10" pentru numaratoare
  3. In bucla: "say (timp) for 1 seconds" → "change [timp] by -1"
  4. Dupa bucla, afiseaza "Timpul a expirat!"
  5. Provocare avansata: Adauga un sunet "beep" pentru fiecare secunda si un sunet "alarm" la final
  6. Provocare extra: Schimba culoarea sprite-ului cand "timp" < 5 (rosu = avertisment!)

Exercitiul 3 (Nivel performanta) -

Exercitiu Avansat
Joc "Colecteaza Stele" cu Forever + If

Creeaza un joc simplu unde un sprite colecteaza stele:

  1. Sprite jucator (pisica):
    • forever { if key pressed → move in that direction }
    • 4 if-uri pentru up/down/left/right
  2. Sprite stea:
    • forever { wait 2 sec → go to random position }
    • if touching [Pisica] → change [scor] by 1, play sound, hide, wait 0.5, show
  3. Conditie de castig: Cand scor = 10 → say "Ai castigat!", stop all
  4. Provocare: Adauga un sprite "Bomba" care scade scorul cu 1 daca il atingi!

Exercitiul 4 (Nivel performanta) -

Exercitiu Master
Grila de Stampile cu Bucle Imbricate

Creeaza o grila de stampile 5×5 folosind bucle imbricate:

  1. Alege un sprite mic (balon, stea, inima)
  2. Seteaza pozitia de start: x: -180, y: 180 (colt stanga-sus)
  3. Bucla exterioara (repeat 5): controleaza RANDURILE (y)
  4. Bucla interioara (repeat 5): controleaza COLOANELE (x)
  5. In bucla interioara: stamp, change x by 80
  6. Intre bucle (dupa interioara): set x to -180, change y by -80
  7. Provocare: Schimba culoarea sau marimea la fiecare stamp pentru un efect rainbow!

Ce ai invatat astazi

  • Forever loop:Repeta la infinit, folosit pentru jocuri si animatii continue
  • Repeat N:Repeta de un numar fix de ori (N), perfect pentru figuri geometrice
  • Repeat until:Repeta PANA CAND o conditie devine adevarata
  • Bucle imbricate:Bucle in bucle, total executii = exterior × interior
  • Bucle + Conditii:Forever cu if pentru verificare continua si reactii
  • Bucle infinite:Intentionate (OK) vs accidentale (bug - verifica conditia!)
  • Aplicatii practice:Desenare figuri, animatii, jocuri, cronometr, grile de obiecte

Urmatoarea lectie

Continua cu lectia urmatoare pentru a aprofunda cunostintele.

Continua →