Capitolul 3.2.IF-ELSE

Vezi subiectul anterior Vezi subiectul urmator In jos

Capitolul 3.2.IF-ELSE

Mesaj  zooky la data de Mier Mar 18, 2009 12:09 pm

Instructiunea If-Else este folosita pentru luarea de decizii. Formal, sintaxa ei este:

if(expresie)
instructiune-1
else
instructiune-2

unde partea "else" este optionala. "Expresia" este evaluata; daca este "adevarata" (adica, are o valoare nenula), "instructiune-1" este executata. Daca ea este "falsa" ("expresia" este zero) si daca exista partea cu "else", se executa in schimb "instructiune-2".
Deoarece un "if" testeaza pur si simplu valoarea numerica a unei expresii, sint posibile anumite prescurtari de cod. Cel mai clar exemplu este scriind

if(expresie)

in loc de

if(expresie != 0)

Citeodata, acest lucru este natural si clar. Altadata poate parea cifrat.
Deoarece partea cu "else" a unui if-else este optionala, se poate ajunge la o ambiguitate cind se omite un else dintr-o secventa imbricata de if-uri. Aceasta este rezolvata, ca de obicei, asa: else este asociat cu if-ul anterior cel mai apropiat, care nu face pereche cu un "if". De exemplu, in:

if (n > 0)
if (a > b)
z = a;
else
z = b;

else face pereche cu if cel mai dinauntru, asa cum am aratat prin tabulare. Daca nu dorim aceasta, trebuie sa folosim acolade pentru a forta asocierea potrivita:

if (n > 0) {
if (a > b)
z = a;
}
else
z = b;

Ambiguitatea este vatamatoare indeosebi in situatii ca urmatoarea:

if (n > 0)
for (i = 0; i < n; i++)
if (s[i] > 0) {
printf("...");
return(i);
}
else /* WRONG */
printf("error- n is zero \n");

Tabularea arata neechivoc ceea ce dorim, dar compilatorul nu intelege acest mesaj, si-l asociaza pe else cu if-ul cel mai dinauntru. Acest tip de eroare poate fi foarte greu de gasit.
Apropo, sa notam ca exista un punct si virgula dupa z = a in:

if (a > b)
z = a;
else
z = b;

Aceasta deoarece, gramatical, dupa if urmeaza o instructiune si o instructiune de asignare de tipul z = a se termina intodeauna cu punct si virgula.
avatar
zooky
Moderator
Moderator

Numarul mesajelor : 147
Data de inscriere : 15/03/2009
Varsta : 24
Localizare : Cernatesti City

Vezi profilul utilizatorului http://e-learning.forumhit.ro

Sus In jos

Vezi subiectul anterior Vezi subiectul urmator Sus


 
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum