Capitolul 3.2.IF-ELSE
:: Programare :: C & C++ :: Capitolul 3
Pagina 1 din 1
Capitolul 3.2.IF-ELSE
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.
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.
Subiecte similare
» Capitolul 3.3. ELSE-IF
» Capitolul 3.5. WHILE si FOR
» Capitolul 4.10. Recursivitate
» Capitolul 3.4. Switch
» Capitolul 3.8. Continue
» Capitolul 3.5. WHILE si FOR
» Capitolul 4.10. Recursivitate
» Capitolul 3.4. Switch
» Capitolul 3.8. Continue
:: Programare :: C & C++ :: Capitolul 3
Pagina 1 din 1
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum
|
|