Documente Academic
Documente Profesional
Documente Cultură
INSTRUCŢIUNILE IF ŞI SWITCH
Noţiuni teoretice
Definiţie. Dacă S1 şi S2 sunt structuri şi E este o condiţie, atunci o structură
alternativă are forma:
Dacă E atunci
S1
Altfel
S2
Mecanismul de executare:
• Se evaluează condiţia E.
• Dacă ea este îndeplinită, se execută structura S1, altfel se execută structura S2.
• Se trece apoi la execuţia structurii de după structura alternativă.
Structura alternativă suportă şi forma în care se renunţă la ramura Altfel:
Dacă E atunci
S1
Mecanismul de executare:
• Se evaluează condiţia E.
• Dacă este îndeplinită, se execută structura S1, altfel se trece la structura următoare.
În poziţia din dreapta se trece expresia a cărei valoare de adevăr determină execuţia
instrucţiunii sau blocului de instrucţiuni din partea stângă. Dacă valoarea ei este nulă, se
trece la instrucţiunea următoare. În caz contrar, se execută instrucţiunea subordonată, apoi
se trece la instrucţiunea următoare.
Ramura alternativă a structurii se introduce prin instrucţiunea otherwise, astfel că
forma extinsă a structurii alternative se prezintă sub forma:
if
otherwise
Expresia din dreapta poate fi compusă, utilizând operatorii logici din paleta
Boolean.
14 2. Structuri alternative. Instrucţiunile IF şi SWITCH
Expresia compusă cu operatorul Şi Logic este nenulă numai dacă ambele expresii
componente sunt nenule.
Operatorul Sau Logic returnează valoare nenulă când cel puţin una din expresiile
componente este nenulă.
Se dă în continuare lista completă a valorilor de adevăr ale unei expresii în funcţie
de valorile expresiilor componente şi de operatorii logici utilizaţi.
E1 E2 E1 ∧ E2 E1 ∨ E2 E ¬E
1 1 1 1 1 0
1 0 0 1 0 1
0 1 0 1
0 0 0 0
Urmărind tabelele de mai sus se observă că operatorul Şi Logic poate fi înlocuit prin
operatorul de înmulţire iar Sau logic prin adunare. De remarcat că orice valoare nenulă
semnifică Adevărat.
Propunere de algoritm. Argumentele formale ale funcţiei sunt cele două numere
iar data de ieşire valoarea sumei sau produsului lor. Se poate utiliza o structură alternativă,
în care condiţia include două expresii legate prin Şi Logic.
ex_1( a , b ) := a⋅ b if a ≠ 0 ∧ b ≠ 0 ex_1( 4 , 5) = 20
a + b otherwise ex_1( 0 , 5) = 5
ex_1( a , b ) := a⋅ b if a⋅ b ex_1( 4 , 5) = 20
a + b otherwise ex_1( 0 , 5) = 5
Exerciţiul 2. Se citesc trei numere, a, b şi c, dintre care primele două în ordine strict
crescătoare. Să se decidă dacă al treilea este situat în intervalul determinat de celelalte două.
Exerciţiul 3. Să se scrie o funcţie care să returneze cel mai mare din trei numere
citite de la dispozitivul de intrare.
Instrucţiunea If în limbajul C
if (E) I1 else I2
Mecanismul de executare:
• Se evaluează expresia E.
• Dacă valoarea acesteia este nenulă, se execută instrucţiunea I1.
• Dacă valoarea expresiei E este 0, se execută I2.
if (E) I1
Propunere de algoritm. Se va testa mai întâi dacă numerele sunt ambele diferite de
0, ceea ce implică ca produsul lor să fie nenul. Dacă nu este îndeplinită condiţia, se afişează
mesajul solicitat. Dacă egalitatea este îndeplinită, se verifică dacă variabilele au acelaşi
16 2. Structuri alternative. Instrucţiunile IF şi SWITCH
semn, ceea ce se reduce la a verifica semnul produsului lor. În funcţie de acesta se afişează
suma sau produsul. Datele vor fi, în acest exemplu, de tip integer.
#include<stdio.h>
#include<conio.h>
main(){
int a,b;
printf(ʺIntroduceti numerele:\nʺ);
scanf(ʺ%i%iʺ,&a,&b);
if(!(a*b))printf(ʺDate incorecteʺ);
else{
if(a*b>0)
printf(ʺSuma numerelor %i si %i este %i.ʺ,a,b,a+b);
else
printf(ʺProdusul numerelor %i si %i este %i.ʺ,a,b,a*b);
}
getch();}
Exerciţiul 5. Să se scrie o funcţie care să verifice dacă trei numere întregi citite de la
tastatură pot constitui lungimile laturilor unui triunghi. În caz afirmativ, să se specifice dacă
triunghiul format este oarecare, isoscel sau echilateral.
Propunere de algoritm. Asupra fiecărui număr trebuie pusă condiţia ca să fie strict
pozitiv. În plus, suma oricăror două dintre ele trebuie să fie strict mai mică decât al treilea.
Dacă aceste condiţii sunt verificate, se studiază tipul triunghiului. Dacă oricare două numere
sunt egale şi diferite de al treilea, triunghiul este isoscel, iar dacă toate trei sunt egale,
triunghiul este echilateral.
#include<stdio.h>
#include<conio.h>
main(){
int a,b,c;
printf(ʺIntroduceti numerele:\nʺ);
scanf(ʺ%i%i%iʺ,&a,&b,&c);
if((a<=0)+(b<=0)+(c<=0)+(a+b<=c)+(a+c<=b)+(b+c<=a))
printf(ʺNu se poate forma un triunghi.ʺ);
else{
if((a==b)*(a==c))
printf(ʺTriunghiul este echilateral.ʺ);
else {
if((a==b)+(a==c)+(b==c))
printf(ʺTriunghiul este isoscel.ʺ);
else printf(ʺTriunghiul este oarecare.ʺ);
}
}
getch();
}
2. Structuri alternative. Instrucţiunile IF şi SWITCH 17
Întreg a, b, c
Citeşte a, b, c
Dacă a<b atunci
Dacă c<a atunci Scrie c, a, b
Altfel
Dacă c<b atunci Scrie a, c, b
Altfel Scrie a, b, c
Altfel
Dacă c<b atunci Scrie c, b, a
Altfel
Dacă c<a atunci Scrie b, c, a
Altfel Scrie b, a, c
#include<stdio.h>
#include<conio.h>
main(){
int a,b,c;
printf(ʺIntroduceti numerele:\nʺ);
scanf(ʺ%i%i%iʺ,&a,&b,&c);
if(a<b)
if(c<a)printf(ʺ%i,%i,%iʺ,c,a,b);
else
if(c<b)printf(ʺ%i,%i,%iʺ,a,c,b);
else printf(ʺ%i,%i,%iʺ,a,b,c);
else
if(c<b) printf(ʺ%i,%i,%iʺ,c,b,a);
else
if(c<a)printf(ʺ%i,%i,%iʺ,b,c,a);
else printf(ʺ%i,%i,%iʺ,b,a,c);
getch();}
switch (E)
{
case E1: I1; break;
case E2: I2; break;
……………………
case En: In; break;
[default: In+1]
}
18 2. Structuri alternative. Instrucţiunile IF şi SWITCH
Mecanismul de executare:
• Se evaluează expresia E;
• Dacă aceasta este egală cu Ei, se execută Ii, altfel se execută In+1. Dacă nu există
instrucţiunea break, se execută, în ordine, instrucţiunile Ii, Ii+1, ... In, altfel se
execută In+1.
Ramura default este opţională.
Exerciţiul 7. Să se scrie o funcţie care să afişeze suma, produsul, câtul sau diferenţa
a două numere, în funcţie de opţiunea făcută de utilizator.
#include<stdio.h>
#include<conio.h>
main(){
int a,b;
char opt;
printf(ʺIntroduceti numerele:\nʺ);
scanf(ʺ%i%iʺ,&a,&b);
printf(ʺTastati s pentru suma, p pentru produs, c pentru cat sau d pentru
diferenta\nʺ);
opt=getch();
switch(opt)
{
case ʹsʹ:printf(ʺSuma este %iʺ,a+b);break;
case ʹpʹ:printf(ʺProdusul este %iʺ,a*b);break;
case ʹcʹ:printf(ʺCatul este %.3fʺ,(float)a/b);break;
case ʹdʹ:printf(ʺDiferenta este %iʺ,a-b);break;
default:printf(ʺOptiune incorectaʺ);
}
getch();}
Temă de lucru
1. Se citesc trei numere naturale. Să se afişeze, dacă există, acel număr care este egal cu suma
celorlalte două.
2. Se citesc trei numere întregi. Să se specifice dacă există două de semn pozitiv.