Biblioteca
Tutora
BibliotecaInformatică și TIC › clasa a VI-a

Structuri de control – repetitive

Prezentarea și utilizarea structurilor repetitive cu număr cunoscut și necunoscut de pași.

Evaluarea Națională

De ce avem nevoie de repetiție

Multe probleme cer executarea acelorași pași de mai multe ori: afișarea numerelor de la 1 la 100, adunarea a 20 de note, verificarea fiecărei cifre a unui număr. A scrie de 100 de ori „scrie i” ar fi absurd — pentru asta există structurile repetitive (buclele): un grup de instrucțiuni, numit corpul buclei, se execută în mod repetat, cât timp o condiție permite acest lucru.

Orice buclă corectă are trei ingrediente, iar lipsa oricăruia este sursa clasică de greșeli:

Dacă actualizarea lipsește sau condiția nu poate deveni niciodată falsă, obținem o buclă infinită — algoritmul nu se mai termină, încălcând proprietatea de finitudine. Exemplu de buclă infinită: i ← 1; cât timp i <= 5 execută scrie i — fără i ← i + 1 în corp, i rămâne mereu 1 și afișarea nu se oprește niciodată. Întrebarea „de ce nu se termină algoritmul?” are aproape întotdeauna acest răspuns: variabila din condiție nu se modifică în corpul buclei.

Structura pentru – număr cunoscut de pași

Când știm dinainte de câte ori se repetă pașii, folosim structura pentru (for). Ea are o variabilă de control (contor) care ia pe rând valorile dintr-un interval:

Contorul i ia valorile 1, 2, 3, 4, 5, iar corpul se execută de 5 ori, afișând 1 2 3 4 5. Contorul crește automat cu 1 la fiecare pas (sau cu alt pas dacă se precizează — inclusiv pas negativ pentru numărare descrescătoare: pentru i de la 10 la 1 cu pasul -1).

Calculul numărului de execuții este întrebare de test garantată: pentru i de la a la b (cu pasul 1), corpul se execută de b − a + 1 ori. Deci de la 3 la 8 înseamnă 8 − 3 + 1 = 6 execuții, nu 5 — plus-unu-ul uitat este cea mai răspândită greșeală aritmetică a capitolului.

Exemplu util — suma primelor n numere naturale:

Pentru n = 4: s crește 0 → 1 → 3 → 6 → 10; se afișează 10. Observă inițializarea s ← 0 înaintea buclei — fără ea, suma pornește de la o valoare întâmplătoare. Iar dacă intervalul e gol (de la 5 la 2 cu pas 1), corpul nu se execută niciodată, iar algoritmul afișează 0.

Structura cât timp – test inițial

Când nu știm dinainte de câte ori se repetă pașii, dar știm condiția de continuare, folosim structura cât timp (while):

Mecanismul: condiția se verifică ÎNAINTE de fiecare execuție a corpului. Dacă e adevărată, corpul se execută și se revine la verificare; dacă e falsă, bucla se încheie. Consecința de reținut, punctată în subiecte: dacă la prima verificare condiția e deja falsă, corpul nu se execută deloc — de zero ori.

Exemplu clasic — numărarea cifrelor unui număr:

Urmărire: n=407, c=1, n devine 40; c=2, n devine 4; c=3, n devine 0; condiția 0 > 0 e falsă, stop. Se afișează 3 — numărul are 3 cifre.

De altfel, perechea de operații restul împărțirii la 10 (ultima cifră) și câtul împărțirii la 10 (numărul fără ultima cifră) este motorul aproape tuturor problemelor cu cifre de la această clasă: sumă de cifre, oglinditul (inversul) unui număr, prima cifră.

Greșeala tipică de urmărire: executarea corpului „încă o dată, de siguranță” după ce condiția a devenit falsă. Nu — în clipa în care verificarea eșuează, execuția sare imediat la instrucțiunea de după buclă.

Structura repetă – până când – test final

A treia structură repetitivă verifică condiția la sfârșit:

Corpul se execută, apoi se verifică condiția: dacă e falsă, se repetă; dacă e adevărată, bucla se oprește. Două diferențe esențiale față de cât timp — amândouă cerute la examen:

Această inversare a condiției este capcana numărul unu a capitolului: la transformarea unei bucle cât timp în repetă–până când, condiția se neagă. „Cât timp n > 0” devine „până când n <= 0” — nu „până când n > 0”, cum scriu grăbiții, ceea ce ar opri bucla exact când ar trebui să continue.

Utilizare tipică: validarea datelor citite. Vrem o notă între 1 și 10:

Citirea se face măcar o dată (firesc — nu avem ce valida înainte să citim), și se reia cât timp valoarea e în afara intervalului.

Rezumatul comparativ care trebuie știut pe de rost: pentru — număr cunoscut de repetări; cât timp — test inițial, corpul posibil de 0 ori, condiție de continuare; repetă–până când — test final, corpul minimum o dată, condiție de oprire.

Algoritmi uzuali și trasarea execuției

Algoritmii repetitivi standard ai clasei a VI-a, de recunoscut din prima privire:

Trasarea execuției se face cu un tabel: câte o coloană pentru fiecare variabilă și câte o linie pentru fiecare pas al buclei. Exemplu:

Tabel: i=1, s=0+1=1; i=2, s=1+4=5; i=3, s=5+9=14. Se afișează 14.

Reguli de aur la trasare, unde se pierd punctele: scrie valorile după FIECARE pas, nu doar la final; verifică de câte ori se execută corpul (b − a + 1 la pentru); nu uita că la cât timp corpul poate rula de 0 ori, iar la repetă–până când rulează minimum o dată; și oprește-te EXACT când condiția o cere — nici un pas mai devreme, nici unul mai târziu.

De reținut

structură repetitivă (buclă)
structură de control prin care un grup de instrucțiuni (corpul buclei) se execută în mod repetat, sub controlul unei condiții
structura pentru
buclă cu număr cunoscut de pași, controlată de un contor care parcurge un interval de valori
contor (variabilă de control)
variabila structurii pentru, care ia pe rând valorile din interval și se modifică automat cu pasul dat
structura cât timp
buclă cu test inițial: condiția de continuare se verifică înaintea fiecărei execuții, deci corpul se poate executa de zero ori
structura repetă–până când
buclă cu test final: corpul se execută cel puțin o dată, iar bucla se oprește când condiția devine adevărată
buclă infinită
buclă a cărei condiție nu poate deveni niciodată falsă, de regulă pentru că variabila din condiție nu se modifică în corp; încalcă finitudinea
acumulator
variabilă care adună sau înmulțește pe rând valorile prelucrate; se inițializează cu 0 pentru sumă și cu 1 pentru produs
numărul de execuții la pentru
pentru i de la a la b cu pasul 1, corpul se execută de b − a + 1 ori
ultima cifră a unui număr
restul împărțirii numărului la 10; eliminarea ultimei cifre se face prin câtul împărțirii la 10

Greșeli frecvente

Greșit: Uitarea actualizării variabilei din condiție, ceea ce produce buclă infinită
Corect: În corpul buclei, variabila care apare în condiție trebuie modificată (ex. i ← i + 1), altfel condiția nu devine niciodată falsă
Greșit: Numărarea execuțiilor de la a la b ca b − a, fără plus unu
Corect: Pentru i de la a la b cu pasul 1, corpul se execută de b − a + 1 ori: de la 3 la 8 înseamnă 6 execuții, nu 5
Greșit: Copierea condiției neschimbate la transformarea din cât timp în repetă–până când
Corect: Condiția se neagă: cât timp n > 0 devine repetă … până când n <= 0, pentru că până când exprimă oprirea, nu continuarea
Greșit: Inițializarea produsului cu 0
Corect: Acumulatorul de produs se inițializează cu 1; pornit de la 0, produsul rămâne 0 indiferent de valorile înmulțite
Greșit: Executarea corpului lui cât timp măcar o dată, chiar dacă condiția e falsă de la început
Corect: La cât timp testul este inițial: dacă prima verificare eșuează, corpul se execută de zero ori; doar repetă–până când garantează minimum o execuție

Test — 6 întrebări ca la examen

1. De câte ori se execută corpul buclei: pentru i de la 4 la 9 execută scrie i?
  1. 5 ori
  2. 6 ori
  3. 9 ori
  4. 4 ori
Vezi răspunsul
6 ori. Numărul de execuții este 9 − 4 + 1 = 6: contorul ia valorile 4, 5, 6, 7, 8, 9. Varianta 5 este capcana clasică a scăderii simple 9 − 4, care uită că ambele capete se numără.
2. Care structură repetitivă garantează că instrucțiunile din corp se execută cel puțin o dată?
  1. cât timp
  2. pentru, întotdeauna
  3. repetă–până când
  4. nicio structură nu garantează asta
Vezi răspunsul
repetă–până când. La repetă–până când testul este la final, deci corpul rulează obligatoriu înainte de prima verificare. La cât timp — distractorul simetric — testul este la început, iar corpul poate rula de zero ori; la pentru, un interval gol înseamnă tot zero execuții.
3. Se execută: i ← 10; cât timp i < 10 execută scrie i; i ← i + 1. De câte ori se execută corpul buclei?
  1. de 10 ori
  2. o singură dată
  3. de zero ori
  4. la nesfârșit
Vezi răspunsul
de zero ori. Prima verificare: 10 < 10 este falsă, deci corpul nu se execută deloc — la cât timp testul e inițial. Varianta „o singură dată” descrie comportamentul lui repetă–până când, nu al lui cât timp.
4. Bucla: i ← 1; cât timp i <= 5 execută scrie i — nu conține i ← i + 1 în corp. Ce se întâmplă la execuție?
  1. se afișează 1 2 3 4 5 și bucla se oprește
  2. bucla nu se execută deloc
  3. se afișează 1 la nesfârșit — buclă infinită
  4. se afișează doar 5
Vezi răspunsul
se afișează 1 la nesfârșit — buclă infinită. Fără actualizare, i rămâne mereu 1, condiția 1 <= 5 rămâne mereu adevărată și afișarea nu se oprește niciodată — bucla infinită încalcă finitudinea. Prima variantă descrie bucla corectă, CU incrementare — exact ce lipsește aici.
5. Se execută: s ← 0; pentru i de la 1 la 4 execută s ← s + i; scrie s. Ce valoare se afișează?
  1. 4
  2. 10
  3. 24
  4. 0
Vezi răspunsul
10. s acumulează 1 + 2 + 3 + 4 = 10. Varianta 24 e capcana pentru cei care înmulțesc (1×2×3×4 — ar fi produsul), iar 4 pentru cei care rețin doar ultima valoare a contorului în loc de sumă.
6. Bucla „cât timp n > 0 execută pașii P” trebuie rescrisă cu repetă–până când, păstrând același comportament pentru n > 0 inițial. Forma corectă este:
  1. repetă P până când n > 0
  2. repetă P până când n <= 0
  3. repetă P până când n = 0 sau n > 0
  4. repetă P cât timp n <= 0
Vezi răspunsul
repetă P până când n <= 0. Până când exprimă condiția de OPRIRE, deci ea este negația condiției de continuare: n > 0 negat dă n <= 0. Prima variantă — cea mai tentantă, pentru că păstrează condiția neschimbată — ar opri bucla exact atunci când cât timp ar continua-o.
Deschide varianta interactivă — cu AI care îți explică
← Structuri de control – secvențială și alternativăMediu de programare vizuală – inițiere →
BiologieChimieEconomieFilosofieFizicăGeografieInformatică și TICIstorieLogică și argumentareMatematicăPsihologieLimba și literatura română