Appearance
Conversia din cat timp in executa ... cat timp
Regula
executa ... cat timp foloseste aceeasi conditie ca cat timp — ambele continua cat timp e adevarata. Singura diferenta e momentul testului: executa verifica la final si executa corpul cel putin o data, pe cand cat timp poate sa nu-l execute deloc. De aceea invelim totul intr-un daca care protejeaza prima iteratie.
// cat timp: // executa cat timp echivalent:
┌ cat timp C executa ┌ daca C atunci ← protectie (corp minim 0 ori)
│ <instructiuni> │ ┌ executa
└■ │ │ <instructiuni>
│ └ cat timp C ← aceeasi conditie, fara inversare
└■Exemplu
Problema: Suma cifrelor unui numar natural.
// Cu cat timp: // Cu executa cat timp:
citeste n citeste n
S ← 0 S ← 0
┌ cat timp n ≠ 0 executa ┌ daca n ≠ 0 atunci
│ S ← S + n % 10 │ ┌ executa
│ n ← [n/10] │ │ S ← S + n % 10
└■ │ │ n ← [n/10]
scrie S │ └ cat timp n ≠ 0
└■
scrie SDe ce functioneaza
- Conditia ramane neschimbata. Ambele instructiuni continua cat timp conditia e adevarata — spre deosebire de conversia in
repeta ... pana cand, unde conditia trebuia inversata. (executa ... cat timpestedo...while, nurepeat...until.) daca-ul de protectie acopera cazul in care conditia e falsa de la inceput:cat timpnu ar executa corpul deloc, darexecutal-ar executa o data.daca Cne asigura ca intram in bucla doar daca trebuie.
Cand poti renunta la `daca`
Daca esti sigur ca la prima trecere conditia e mereu adevarata (ex. citesti pana la o valoare valida — macar o citire are loc oricum), daca-ul e inutil si scrii direct:
┌ executa
│ <instructiuni>
└ cat timp C