Invatare Atomica

Bucla Repeta - Repeta de N Ori

Progres lectie:
0%
🎯

Obiectivul lectiei

Scrii acelasi cod de 10 ori... Programul are 100 de linii pentru ceva simplu... Modifici o bucata si trebuie sa o schimbi in 10 locuri... Este imposibil de gestionat!

Dupa aceasta lectie vei putea:

  • Sa descrii structura repetitiva cu contor (PENTRU i DE LA v1 LA v2 EXECUTA ... SFARSIT_PENTRU) in pseudocod formal
  • Sa identifici cand este nevoie de o bucla cu numar fix de iteratii intr-un algoritm
  • Sa reprezentezi bucla cu contor folosind schema logica cu simboluri corecte (romb pentru conditia contorului)
  • Sa scrii algoritmi care repeta o secventa de un numar cunoscut de ori
  • Sa transformi algoritmi cu pasi repetati in algoritmi cu bucle
  • Sa descrii structura repetitiva conditionata anterior (CAT TIMP conditie EXECUTA ... SFARSIT) si sa o diferentiezi de celelalte doua tipuri

Incearca singur!

🎮 Incearca tu!

Provocare: Deseneaza un patrat!

Inainte sa invatam teoria, sa vedem de ce avem nevoie de bucle. Incearca sa scrii pseudocod pentru a desena un patrat cu latura de 100 de pixeli.

  1. Deschide Scratch sau notepad pentru pseudocod
  2. Gandeste-te: ce actiuni trebuie sa repeti pentru un patrat?
  3. Un patrat are 4 laturi egale si 4 colturi de 90 de grade
  4. Scrie codul fara a folosi bucle (varianta lunga)
  5. Acum incearca sa il optimizezi - vezi unde se repeta codul
  6. Numara cate linii de cod ai scris
VARIANTA FARA BUCLA (12 linii):
START
  mergi 100 pasi inainte
  roteste-te 90 grade dreapta
  mergi 100 pasi inainte
  roteste-te 90 grade dreapta
  mergi 100 pasi inainte
  roteste-te 90 grade dreapta
  mergi 100 pasi inainte
  roteste-te 90 grade dreapta
STOP

VARIANTA CU BUCLA (5 linii):
START
  repeta de 4 ori:
    mergi 100 pasi inainte
    roteste-te 90 grade dreapta
STOP
Observa diferenta! Cu bucla ai redus codul de la 12 linii la 5 linii. Imaginează-ți daca voiai sa desenezi un hexagon (6 laturi) sau un cerc (360 de puncte)!
💡 Indiciu #1: Cum identific ce trebuie repetat?
Cauta actiuni identice sau foarte similare care apar una dupa alta. Pentru patrat: "mergi 100 + roteste 90" apare de 4 ori consecutiv. Acestea sunt actiunile pe care le pui intr-o bucla!
💡 Indiciu #2: Cum stiu de cate ori sa repet?
Numara de cate ori apare modelul! Patrat = 4 laturi → repeta de 4 ori. Triunghi = 3 laturi → repeta de 3 ori. Pentagon = 5 laturi → repeta de 5 ori. Numarul de repetari este egal cu numarul de laturi!
💡 Indiciu #3: Cum implementez in Scratch?
In Scratch: Control (orange) → "repeat (4)". Pune inauntru: Motion → "move (100) steps" si Motion → "turn right (90) degrees". Apasa green flag si urmareste!

🌟 Provocare Bonus (optional)

Incearca sa desenezi in Scratch:

  • Triunghi echilateral (3 laturi, 120 grade)
  • Hexagon regulat (6 laturi, 60 grade)
  • Stea cu 5 colturi (hint: roteste 144 grade! — aceasta NU urmeaza formula de jos)

Formula pentru poligoane regulate: unghi rotatie = 360 / numar laturi (ex: triunghi = 360/3 = 120°, hexagon = 360/6 = 60°). Atentie: pentru stele formula este diferita — steaua cu 5 colturi foloseste 144° (unghi exterior al stelei, nu al pentagonului).

1

1. Ce este bucla "Repeta de N ori"?

🔁
Ce este bucla "Repeta de N ori"?
Definitie: Bucla "repeta de N ori" (sau bucla cu numar fix de iteratii) este o structura de control care executa un bloc de instructiuni de un numar CUNOSCUT de ori. N este un numar intreg pozitiv care spune de cate ori se repeta executia.
Analogie din viata ta: Este ca un antrenament de fotbal! Antrenorul spune: "Faceti 10 genuflexiuni!" Tu stii exact ca trebuie sa faci 10, nu 9, nu 11. Numeri: 1, 2, 3... 10 si te opresti. La fel si calculatorul - executa codul de N ori si se opreste automat!

Componentele buclei:

Component Descriere Exemplu
Numar iteratii (N) De cate ori se repeta bucla repeta de 5 ori
Corp bucla Instructiunile care se repeta mergi 10 pasi + roteste 15 grade
Contor implicit Numara automatt: 1, 2, 3... N iteratia 1, iteratia 2, ..., iteratia 5
In cele mai multe limbaje de programare, contorul IMPLICIT incepe de la 1 si merge pana la N. In Scratch, nu vezi contorul dar el exista in fundal!
Daca pui N = 0, bucla NU se executa deloc! Daca pui un numar negativ, majoritatea limbajelor dau eroare sau il trateaza ca 0.
2

2. Diagrama de flux a buclei

📊
Simbolul buclei in diagrama de flux
Reprezentare in schema logica: Bucla cu contor (PENTRU i DE LA 1 LA N EXECUTA) se reprezinta prin secventa: dreptunghi (initializare contor) → romb ◆ (conditia: i ≤ N?) → dreptunghi (corpul buclei) → dreptunghi (incrementare: i = i + 1) → sageata inapoi la romb. Atentie: conditia de decizie se deseneaza INTOTDEAUNA cu romb ◆, nu cu dreptunghi — exact ca la IF/ELSE din Lectia 2!
START
i = 1  ▶ dreptunghi (initializare)
◆ i ≤ N (4) ?  ← ROMB (decizie)
DA ↓
mergi 100 pasi
roteste 90 grade
i = i + 1  ▶ dreptunghi (incrementare)
↑ revine la romb (re-verifica i ≤ N?)
NU ↓
STOP
Regula de baza a schemei logice: Orice decizie (conditie verificata) se deseneaza cu un romb ◆. Dreptunghiul se foloseste DOAR pentru actiuni si procese (initializare, incrementare, calcule, miscare). Aceasta regula este valabila atat pentru IF/ELSE (Lectia 2) cat si pentru conditia buclei cu contor!

Exemplu complet: Schema logica pentru desenarea unui triunghi echilateral

START

[i = 1]           ← dreptunghi (initializare)

◆ i ≤ 3 ? ◆    ← ROMB (conditia contorului)
DA ↓      NU →→→ STOP

[mergi 120 pasi]  ← dreptunghi (actiune)

[roteste 120°]   ← dreptunghi (actiune)

[i = i + 1]       ← dreptunghi (incrementare)

↑↑↑ revine la romb (re-verifica i ≤ 3?)

Trasare pas cu pas: i=1: 1≤3=DA → executa → i=2; i=2: 2≤3=DA → executa → i=3; i=3: 3≤3=DA → executa → i=4; i=4: 4≤3=NU → iese. Corpul buclei s-a executat de exact 3 ori. Conditia (rombul) este verificata INAINTE de executia corpului — aceasta se numeste structura conditionata anterior.

3

3. Contorul de iteratii

🔢
Contorul de iteratii (variabila de control)
Definitie: Contorul de iteratii este o variabila speciala care numara de cate ori s-a executat bucla. In multe limbaje (C, Java, Python), il vezi explicit: for (i = 1; i <= N; i++). In Scratch, este implicit (ascuns).

Cum functioneaza contorul:

  1. Initializare: Contorul incepe de la 1 (sau 0, depinde de limbaj)
  2. Verificare: Inainte de fiecare iteratie, se verifica: contor ≤ N?
  3. Executie: Daca DA, se executa corpul buclei
  4. Incrementare: Dupa executie, contorul creste cu 1 (contor++)
  5. Reluare: Se revine la pasul 2 (verificare)
  6. Iesire: Cand contor > N, bucla se opreste

🎯 Exemplu: Urmarirea contorului pentru N = 5

Iteratie Valoare contor Conditie (contor ≤ 5) Actiune
- 0 (initial) - Initializare
1 1 ✓ ADEVARAT (1 ≤ 5) Executa corpul buclei
2 2 ✓ ADEVARAT (2 ≤ 5) Executa corpul buclei
3 3 ✓ ADEVARAT (3 ≤ 5) Executa corpul buclei
4 4 ✓ ADEVARAT (4 ≤ 5) Executa corpul buclei
5 5 ✓ ADEVARAT (5 ≤ 5) Executa corpul buclei
- 6 ✗ FALS (6 > 5) IESI din bucla!

Observa: Corpul buclei se executa de exact 5 ori (pentru contor = 1, 2, 3, 4, 5). Cand contorul ajunge la 6, conditia devine falsa si bucla se opreste.

In Scratch, poti face contorul VIZIBIL creand o variabila numita "contor" si facand "set contor to 1" la inceput, apoi "change contor by 1" in bucla. Bifaza "show" pentru a vedea valoarea pe ecran in timp real!
Nu confunda "repeta N ori" cu "repeta PANA CAND contor = N"! Prima este o bucla cu numar fix (o sa invatam in lectia viitoare despre bucla cu conditie). Aici, N este cunoscut de la inceput!
4

4. Bucla "repeat" in Scratch

🐱
Bucla "repeat" in Scratch
Implementare: In Scratch, blocul "repeat (N)" se gaseste in categoria Control (portocaliu). Blocurile pe care le pui inauntru se executa de N ori. Este una dintre cele mai folosite structuri in programarea Scratch!

Cum se foloseste in Scratch:

  1. Click pe categoria Control
  2. Trage blocul repeat (10) in zona de script
  3. Schimba numarul 10 cu cate iteratii vrei (ex: 4 pentru patrat)
  4. Trage blocuri Motion, Looks, Sound inauntrul buclei
  5. Apasa green flag si urmareste executia!

🎮 Exemplu complet: Animatie de dans

when [green flag ▼] clicked
repeat (6)
next costume
wait (0.2) seconds

Ce face: Schimba costume-ul (aspect) pisicii de 6 ori, cu o pauza de 0.2 secunde intre fiecare schimbare. Rezultat: o animatie fluida de dans cu 6 cadre!

🎨 Exemplu: Deseneaza o spirala colorata

when [green flag ▼] clicked
pen down
repeat (36)
move (10) steps
turn ↻ (10) degrees
change pen color by (10)
change x by (1)

Ce face: Deseneaza o spirala cu 36 de segmente. La fiecare iteratie: se misca 10 pasi, se roteste 10 grade, schimba culoarea pixului si se deplaseaza putin in dreapta (x+1). Rezultat: o spirala curcubeu frumoasa!

Pentru a vedea cat de rapid se executa bucla, adauga un bloc "wait (0.1) seconds" in interiorul ei. Astfel poti urmari fiecare iteratie ca in slow motion!
Atentie la buclele imbricate! "repeat (10)" care contine "repeat (10)" = 10 × 10 = 100 de executii! Asigura-te ca intelegi combinatia inainte de a porni programul.
5

5. Tabele de urmarire (Trace Tables)

📝
Tabele de urmarire (Trace Tables)
Definitie: O tabela de urmarire este un instrument pentru a verifica manual executia unui program. Creezi un tabel cu coloane pentru fiecare variabila si randuri pentru fiecare iteratie. Umpli tabelul pas cu pas pentru a urmari valorile.

Cum se creeaza o tabela de urmarire:

  1. Identifica toate variabilele din program (inclusiv contorul implicit)
  2. Creeaza cate o coloana pentru fiecare variabila
  3. Adauga o coloana pentru "Iteratie" sau "Pas"
  4. Adauga coloane pentru output (ce se afiseaza/deseneaza)
  5. Simuleaza executia manual, rand cu rand
Nota: pseudocod vs. Scratch. In pseudocod scriem "repeta de N ori" fara a folosi un contor in corpul buclei — exact ca in Scratch, unde blocul repeat (N) numara iteratiile intern dar nu expune nicio variabila accesibila. Exemplele de mai jos folosesc numai variabile declarate explicit (suma, produs). Cand vei invata un limbaj text (Python, C), vei putea accesa si contorul — dar nu este nevoie la acest nivel.

📊 Exemplu: Tabela pentru adunarea repetata a lui 5 (fara contor vizibil)

START
  suma = 0
  PENTRU i DE LA 1 LA 5 EXECUTA
    suma = suma + 5
  SFARSIT_PENTRU
  afiseaza suma
STOP
Iteratia Suma (inainte) Operatie Suma (dupa)
- 0 initializare 0
1 0 suma = 0 + 5 5
2 5 suma = 5 + 5 10
3 10 suma = 10 + 5 15
4 15 suma = 15 + 5 20
5 20 suma = 20 + 5 25
- 25 afiseaza Output: 25

Rezultat final: suma = 25 (corect: 5 adaugat de 5 ori = 5 x 5 = 25)

🎯 Exercitiu: Completeaza tabelul pentru inmultire

produs = 1
repeta de 4 ori:
  produs = produs * 2
afiseaza produs
Iteratia Produs (inainte) Operatie Produs (dupa)
- 1 initializare 1
1 1 produs = 1 * 2 2
2 2 produs = 2 * 2 4
3 4 produs = 4 * 2 8
4 8 produs = 8 * 2 16
- 16 afiseaza Output: 16

Rezultat: 2⁴ = 16 (produs inmultit cu 2 de 4 ori)

Tabelele de urmarire sunt ESENTIALE pentru debugging! Daca programul tau nu face ce crezi ca ar trebui, scrie o tabela de urmarire pentru a vedea unde se pierde logica.
6

6. Aplicatii practice ale buclei

🚀
Aplicatii practice ale buclei

Cand folosim "repeta de N ori":

Domeniu Exemplu Numar iteratii
Geometrie Deseneaza patrat, hexagon, stea Numar laturi (4, 6, 5)
Animatie Schimba 10 costume-uri pentru dans Numar cadre (10)
Sunet Canta melodia "La multi ani" de 3 ori Numar repetari (3)
Matematica Calculeaza suma primelor 100 de numere Interval numeric (100)
Jocuri Creeaza 5 inamici la start Numar obiecte (5)
Input Citeste notele a 20 de elevi Numar date (20)
Regula de aur: Foloseste "repeta de N ori" cand STII DINAINTE de cate ori trebuie sa repeti. Daca nu stii (ex: "repeta pana ajungi la perete"), foloseste alte tipuri de bucle (pe care le vei invata in lectia urmatoare)!

🎓 Aplicatie in viata reala: Generator de parole

Vrei sa generezi o parola de 8 caractere aleatorii.

parola = ""
caractere = "abcdefghijklmnopqrstuvwxyz0123456789"

repeta de 8 ori:
  pozitie_aleatoare = numar_aleatoriu_intre(0, 35)
  caracter = caractere[pozitie_aleatoare]
  parola = parola + caracter

afiseaza parola

Rezultat posibil: "x7k2m9qw" (se schimba la fiecare rulare pentru ca sunt caractere aleatorii!)

7

7. Structura conditionata anterior (CAT TIMP)

🔄
Structura repetitiva conditionata anterior: CAT TIMP
Definitie: Structura repetitiva conditionata anterior verifica conditia INAINTE de a executa corpul buclei. Daca conditia este falsa de la inceput, corpul nu se executa niciun moment. In pseudocodul romanesc standard, se scrie:

CAT TIMP <conditie> EXECUTA
    <instructiuni>
SFARSIT
Analogie din viata ta: Este ca sa mananci pizza: "CAT TIMP mai este pizza in cutie EXECUTA mananca o felie SFARSIT". Daca cutia e deja goala de la inceput, nu faci nicio actiune. Compara cu "REPETA...PANA CAND cutia e goala" — acolo iei cel putin o felie, chiar daca nu mai e nimic (bug!).

Cele trei tipuri de structuri repetitive (conform OMEN 3393/2017):

Tip Pseudocod formal Conditia verificata Executii minime
Conditionata anterior CAT TIMP c EXECUTA
  ...corp...
SFARSIT
INAINTE de corp 0 (daca c=fals)
Conditionata posterior REPETA
  ...corp...
PANA CAND c
DUPA corp 1 (intotdeauna)
Cu contor PENTRU i DE LA v1 LA v2 EXECUTA
  ...corp...
SFARSIT_PENTRU
INAINTE de corp (i≤v2) 0 (daca v1>v2)

Exemplu: Numarare pana la valoare necunoscuta (CAT TIMP)

Pseudocod formal:
START
  n = 1
  CAT TIMP n ≤ 10 EXECUTA
    afiseaza n
    n = n + 1
  SFARSIT
STOP

Schema logica:
START ↓ [n=1] ↓ ◆n≤10? ↓DA [afiseaza n] ↓ [n=n+1] ↓ ↑inapoi la romb
                         NU → STOP

De ce se numeste "conditionata anterior"? Rombul (conditia) este plasat INAINTEA corpului in schema logica. Fluxul este: conditie → (daca DA) corp → revine la conditie. Daca la prima verificare conditia e falsa, corpul nu se executa niciodata.

Cand se foloseste CAT TIMP? Cand nu stii dinainte de cate ori se va repeta, dar stii CONDITIA de continuare. Exemple: "Cat timp mai ai vieti in joc, joaca"; "Cat timp nu ai gasit un numar prim, cauta urmatorul"; "Cat timp fisierul are date de citit, citeste".
In Scratch, nu exista un bloc exact "cat timp", dar il poti simula cu repeat until (repeta pana cand NOT conditie). De exemplu, "CAT TIMP atingi culoarea alba" devine "repeat until (NOT touching color white)".

Exercitii practice

Exercitiul 1 (Nivel minim) - Analiza algoritmului

Exercitiu Teoretic
Analiza Algoritmului

Analizeaza urmatorul pseudocod si completeaza tabela de urmarire:

x = 10
y = 0
PENTRU i DE LA 1 LA 5 EXECUTA
    y = y + x
    x = x - 2
SFARSIT_PENTRU
afiseaza x
afiseaza y

Sarcina: Creeaza o tabela cu coloanele: Iteratia, x (inainte), y (inainte), Operatii, x (dupa), y (dupa). Completeaza fiecare rand si gaseste valorile finale ale lui x si y.

Exercitiul 2 (Nivel standard) - Animatie fade in Scratch

Exercitiu Scratch
Creeaza o animatie cu efect fade

In Scratch, creeaza un program care face sprite-ul sa devina transparent treptat (fade out effect).

Cerinte:

  • La start, sprite-ul este complet opac (ghost effect = 0)
  • Foloseste o bucla "repeat (10)"
  • La fiecare iteratie, creste ghost effect cu 10
  • Adauga o pauza de 0.2 secunde intre iteratii
  • La final, sprite-ul este complet transparent (ghost effect = 100)

Exercitiul 3 (Nivel performanta) - Generator de labirint in Scratch

Exercitiu Creativ
Proiect: Generator de labirint

Creeaza in Scratch un program care deseneaza un labirint simplu folosind bucle.

Idee:

  1. Activeaza "pen down" pentru a desena
  2. Foloseste bucle imbricate: "repeat (5)" in exterior, "repeat (4)" in interior
  3. Bucla interioara deseneaza un patrat mic
  4. Intre patrate, misca sprite-ul fara a desena (pen up → move → pen down)
  5. Rezultat: o grila de 5×4 patrate = cadrul unui labirint!

Exercitiul 4 (Nivel performanta) - Calcul factorial in pseudocod

Exercitiu Matematic
Calculeaza factorial

Scrie un algoritm in pseudocod care calculeaza factorialul unui numar N (ex: 5! = 1×2×3×4×5 = 120).

Cerinte:

  • Input: N = 5
  • Foloseste o variabila "factorial" initializata cu 1
  • Foloseste bucla "repeta de N ori" cu o variabila i care incepe la 1 si creste cu 1 la fiecare iteratie (in pseudocod / limbaj text; in Scratch creezi manual variabila i si o incrementezi cu change i by 1)
  • La fiecare iteratie: factorial = factorial × i
  • Output: factorial = 120

Ce ai invatat astazi

  • Conceptul:Bucla cu contor (conditionata anterior) - executa cod de N ori; conditia verificata INAINTE de corp
  • Schema logica:Romb ◆ pentru conditia contorului, dreptunghi pentru actiuni (nu dreptunghi pentru conditie!)
  • Contor:Variabila care numara iteratiile (1, 2, 3... N)
  • Scratch:Blocul "repeat (N)" din categoria Control (portocaliu)
  • Aplicatii:Desene geometrice, animatii, calcule matematice
  • Tabele:Instrumente de verificare a valorilor la fiecare pas
  • Avantaj:Cod mai scurt, mai curat si usor de intretinut
  • CAT TIMP:Structura conditionata anterior - conditia verificata inainte; 0 executii minime
  • Pseudocod formal:PENTRU i DE LA v1 LA v2 EXECUTA ... SFARSIT_PENTRU / CAT TIMP c EXECUTA ... SFARSIT

Urmatoarea lectie

Continua cu lectia urmatoare pentru a aprofunda cunostintele.

Continua →