Sunteți pe pagina 1din 9

Structuri alternative și iterative în C#

În cadrul acestui capitol sunt prezentate principalele aspecte referitoare la structurile


alternative și repetitive aferente limbajului C#.

Structurile alternative
Structurile alternative permit executarea unor anumite secvențe de cod (ramificarea
codului), în funcție de valoarea unei variabile sau au unei expresii logice. Cele două tipuri de
structuri alternative ce pot fi utilizate în C# sunt:
 secvența if-else-if – include o expresie logică și, în funcție de valoarea ei, conduce la
ramificarea în două direcții posibile. În cazul în care există mai mult de două secvențe
ramificate, atunci pot fi folosite secvențele if-else-if imbricate;
 secvența switch – include o expresie logică și oferă mai multe ramificații, permițând
executarea mai multor secvențe de cod, în funcție de valoarea de adevăr a expresiei logice.

Structura alternativă if-else-if


Această structură alternativă permite alegerea și executarea unei secvențe de
instrucțiuni din două sau mai multe posibile, în funcție de valoarea de adevăr a expresiei logice
incluse. Forma generală este următoarea:
if (condiție)
secvență de instrucțiuni;
[else if(condiție)
secvență de instrucțiuni;
else if(condiție)
secvență de instrucțiuni;

else
secvență de instrucțiuni;]

Condițiile specificate sunt evaluate și se va executa secvența de instrucțiuni care va fi


aferentă condiției evaluate cu valoare de adevăr. Astfel, în exemplul următor se cere
utilizatorului să introducă media studentului, iar în funcție de ceea ce s-a introdus, se va afișa
pe ecran mesajul corespunzător (se va afișa doar un mesajul (din cele patru) pentru care se
returnează o valoare de adevăr aferente condiției logice specificate).
Următorul exemplu cere utilizatorului introducerea unui caracter și verifică dacă acesta
este o cifră, un caracter alfabetic (literă mare sau mică), un semn de punctuație sau spațiu.
Dacă ceea ce s-a introdus este altceva, se va afișa mesajul corespunzător.

Structura alternativă switch


Structura alternativă switch…case se poate utiliza pentru a selecta o secvență de instrucțiuni
din mai multe posibile, în baza valorii unei variabile sau a unei expresii, care este scrisă în
interiorul lui switch. Se va executa secvența de instrucțiuni asociată cu un anumit case a cărui
valoare este egală cu cea a valorii sau expresiei specificate în structura alternativă. Secvențele
de instrucțiuni se vor executa până când este întâlnite instrucțiunea break în interiorul secvenței
ce se execută. În cazul în care nu este întâlnit nici un caz care să respecte condiția specificată,
atunci se va executa secvența de instrucțiuni precedată de cuvântul cheie default.
Orice structură repetitivă se finalizează atunci când este întâlnită instrucțiunea break.
Atunci când este întâlnită instrucțiunea break, toate instrucțiunile de după aceasta, nu se mai
execută, programul continuându-și execuția cu prima instrucțiune de după instrucțiunea
repetitivă. În acest context, utilizarea lui break în interiorul instrucțiunii switch are același efect,
cauzând oprirea execuției celorlalte instrucțiuni de după aceasta. De asemenea, în cadrul unui
program, pot fi folosite mai multe instrucțiuni break.
Forma generală a acestei instrucțiuni este următoarea:
switch (nume_variabilă)
{
case valoare_1:
secvență_instrucțiuni;
..............
break;
case valoare _2:
secvență_instrucțiuni;
..............
break;
............

............
default:
secvență_instrucțiuni;
..............
break;
}

Codul sursă prezentat în exemplul următor evidențiază modul în care instrucțiunea


switch poate fi folosită. Astfel, utilizatorul trebuie să introducă un întreg, preluat în variabila
number. Apoi, valoarea acestei variabile este testată prin intermediul celor patru secvențe case.
Mai concret, la nivelul fiecărei secvențe case, se testează dacă numărul introdus este 1 sau 2
sau 3 sau 4. Atunci când valoarea introdusă este identică cu cea specificată la nivelul unui
case, se va executa corpul de instrucțiuni asociat. Spre exemplu, dacă utilizatorul introduce
numărul 2, atunci se execută al doilea case, iar pe ecran va apărea mesajul: S-a apasat tasta
1! Apoi, instrucțiunea break determină abandonarea execuției celorlalte alternative case,
executându-se prima instrucțiune de după switch.
În cazul în care nu există nicio potrivire la nivelul tuturor case-urilor, atunci se va executa
secvența de instrucțiuni aferentă clauzei default.
Instrucțiunea switch poate fi testată doar cu valori întregi sau de tip caracter. În cazul în
care variabila testată este de tipul char, atunci valoarea cu care se va testa în fiecare case
(caracterul) va fi inclus între caractere apostrof (spre exemplu: case ‘a’). De asemenea,
trebuie specificat faptul că switch compară doar caractere alfabetice care nu sunt majuscule.
Pentru a evita eventualele erori ce pot apărea, se poate folosi declarația:
nume_var_caracter=char.ToLower(nume_var_caracter);
Iterații
Iterația reprezintă secvența care permite executarea repetată a unui bloc de instrucțiuni
tot atât timp cât expresia logică evaluată are valoare de adevăr. Există structuri repetitive cu
test (while și do while) sau cu contor (for și foreach).
Structura repetitivă cu test inițial: WHILE
While permite executarea repetată a unei secvențe de instrucțiuni atât timp cât expresia
logică evaluată are valoare de adevăr. Această expresie logică este evaluată la începutul
structurii repetitive, iar dacă valoarea ei de adevăr este evaluată ca nefiind adevărată, atunci
corpul de instrucțiuni aferent nu se execută niciodată. Sintaxa este următoarea:
while(expresie logică)
{
...........................
...........................
// secvența de instrucțiuni care se va executa repetat
}

Atunci când expresia logică este evaluată ca fiind falsă, atunci controlul programului este
transferat instrucțiunii imediat următoare structurii repetitive. Astfel, următorul program cere
utilizatorului să introducă două numere întregi și două caractere, iar apoi afișează, folosind o
structură repetitivă cu test inițial, toate numerele întregi cuprinse între nr1 și nr2 precum și toate
caracterele cuprinse între ch1 și ch2. În cazul în care nr1 nu este mai mic decât nr2 sau
caracterul ch1 este situat alfabetic după caracterul ch2 (expresia logică este evaluată cu
valoarea de adevăr false încă de la prima evaluare), atunci secvența de instrucțiuni nu se va
executa repetat niciodată. Dacă expresia este evaluată cu valoare de adevăr, se va afișa
repetat valoarea întregului nr1, respectiv (în cea de-a doua structură repetitivă) a caracterului
ch1, care apoi este incrementat la fiecare iterație. Secvența de instrucțiuni se va executa
repetat cât timp nr1<=nr2, respectiv cât timp ch1<ch2 pentru cea de-a doua structură repetitivă.
Structura repetitivă cu test final: DO WHILE
Similar structurii repetitive cu test inițial, și cea cu test final permite executarea repetată
a unei secvențe de atât timp cât expresia logică evaluată (testul final) este evaluat cu valoarea
de adevăr. Diferența dintre cele două structuri repetitive constă în faptul că, în cazul celei cu
test final, secvența de instrucțiuni se execută cel puțin odată, deoarece evaluarea expresiei
logice se face la sfârșitul blocului de instrucțiuni ce se va executa repetat. În acest sens,
instrucțiunea do…while presupune executarea corpului de instrucțiuni cel puțin odată. Sintaxa
acesteia este următoarea:
do {
................
................
// secvența de instrucțiuni care se va executa repetat
} while(expresie logică);
Structura repetitivă cu contor
Structura repetitivă cu contor se utilizează atunci când se dorește executarea repetată
a unei secvențe de instrucțiuni și se cunoaște numărul de iterații ce se vor realiza. Sintaxa
acesteia este următoarea:
for(inițializarea variabile; expresie logică; incrementare/decrementare variabilă)
{
secvență de instrucțiuni
}
unde:
 inițializarea variabile se referă la atribuirea unei valori inițiale variabilelor care controlează
structura repetitivă;
 expresie logică este o condiție booleană cu semnificația că secvența de instrucțiuni se va
executa repetat atât timp cât această condiție este evaluată cu valoarea de adevăr
adevărat; atunci când condiția logică devine falsă, se abandonează structura repetitivă și
se execută instrucțiunea imediat următoare structurii repetitive;
 incrementare/decrementare variabilă se referă la modificarea (la fiecare iterație) valorii
variabilei care controlează structura repetitivă.
Exemplu:

În exemplul prezentat anterior, este folosită o structură repetitivă cu contor pentru a


prelua zece numere întregi de la tastatură. În cazul în care se introduce un număr prim, atunci
se abandonează structura repetitivă. În acest sens, s-a folosit instrucțiunea break care are rolul
de a abandona execuția unei structuri repetitive. În cazul în care există mai multe structuri
repetitive imbricate, break permite abandonarea doar a structurii repetitive în interiorul căreia
apare, controlul fiind transferat instrucțiunii repetitive de la nivelul superior.
În ceea ce privește cele trei expresii aferente structurii repetitive, trebuie menționat faptul
că există posibilitatea ca oricare dintre cele trei să lipsească, existând chiar posibilitatea (cu
toate că este întâlnită destul de rar în practică) ca toate cele trei expresii să lipsească. În acest
sens, codul sursă din exemplul următor este o formă modificată a exemplului prezentat
anterior, în care, în cadrul sintaxei structurii repetitive, s-au eliminat toate expresiile aferente.
În acest sens, devine obligatorie utilizarea instrucțiunii break, care va permite ieșirea din
structura repetitivă.
Așa cum se poate observa, în cadrul instrucțiunii for au fost eliminate toate expresiile. În acest
sens, inițializarea variabilei de control s-a făcut înaintea instrucțiunii for, în timp ce
incrementarea variabilei de control realizându-se la sfârșitul secvenței de instrucțiuni aferente
structurii repetitive. De asemenea, expresia logică este și ea inclusă în interiorul secvenței de
instrucțiuni, astfel încât atunci când condiția testat (i==10) devine adevărată, atunci se
abandonează secvența de instrucțiuni aferentă lui for prin intermediul instrucțiunii break.

Instrucțiunea continue
Instrucțiunea continue are rolul de a forța neexecutarea secvenței de instrucțiuni din
interiorul structurii repetitive, făcând saltul către secvența de incrementare aferentă. Spre
deosebire de instrucțiunea break, continue întrerupe execuția secvenței de instrucțiuni, fără
însă să abandoneze structura repetitivă, ci permițând executarea următoarei iterații.
Astfel, codul sursă din exemplul următor permite însumarea doar a numerelor întregi
pare dintre 1 și 10. Atunci când se ajunge la un număr impar, instrucțiunea continue nu permite
execuția liniei S = S + i;, realizând saltul către secvența de incrementare i++. Astfel, la final,
variabile S va avea valoarea 30.

S-ar putea să vă placă și