Sunteți pe pagina 1din 6

STRUCTURI ALTERNATIVE.

INSTRUCŢIUNILE IF ŞI SWITCH

Formularea temei. Înţelegerea mecanismului structurilor alternative şi a


instrucţiunilor If şi Switch din utilitarul MathCAD şi din limbajul C.

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.

Instrucţiunea If în utilitarul MathCAD

Apelul instrucţiunii se face din paleta Programming şi are ca efect introducerea la


cursor a unei structuri de forma:
if

Î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.

Exerciţiul 1. Să se scrie o funcţie care să returneze produsul a două numere, dacă


ambele sunt nenule şi suma lor în caz contrar.

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

Expresia a ≠ 0 returnează valoarea 0 (cu semnificaţia Fals) dacă nu este adevărată


şi o valoare nenulă (de exemplu, 1) în caz contrar. La fel şi expresia b ≠ 0 .
Expresia a ≠ 0 se poate scrie echivalent a. În mod analog, a = 0 se mai scrie ¬a .
Utilizând operatorul înmulţire, funcţia ex_1 de mai sus se scrie echivalent:

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ă.

Propunere de algoritm. Programul de mai jos verifică dacă numărul c se află în


intervalul (−∞; a) sau în intervalul (b; ∞) .

ex_2( a , b , c) := "Numarul nu se afla in interval" if ( c < a) + ( c > b )


"Numarul se afla in interval" otherwise

ex_2( 0 , 5 , 8) = "Numarul nu se afla in interval"


ex 2( 0 , 5 , 4) = "Numarul se afla in interval"
2. Structuri alternative. Instrucţiunile IF şi SWITCH 15

Exerciţiul 3. Să se scrie o funcţie care să returneze cel mai mare din trei numere
citite de la dispozitivul de intrare.

Propunere de algoritm. Funcţia va avea trei argumente formale, simbolizând


numerele citite. Se verifică mai întâi dacă numărul asociat primului argument este mai mare
decât al doilea, respectiv al treilea. În caz afirmativ, se afişează valoarea lui, în caz contrar,
se verifică dacă al doilea este mai mare sau egal cu al treilea. Dacă inegalitatea este
verificată, se afişează valoarea celui de-al doilea număr, în caz contrar afişându-se al treilea.

ex_3( a , b , c) := a if ( a > b ) ⋅ ( a > c) ex_3( 4 , 1 , 6) = 6


otherwise ex_3( 5 , 5 , 3) = 5
b if b > c ex_3( 9 , 4 , 3) = 9
c otherwise

Instrucţiunea If în limbajul C

Forma completă a instrucţiunii în limbajul C este:

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.

Forma restrânsă renunţă la ramura alternativă:

if (E) I1

I1 şi I2 pot fi instrucţiuni compuse (blocuri de instrucţiuni), caz în care se


delimitează prin acolade.
Se dă în continuare o listă cu simbolurile pentru câţiva operatori din limbajul C şi
din utilitarul MathCAD.

Operator logic Limbaj C MathCAD


Şi „&&” sau „*” „ ∧ ” sau „*”
Sau „||” sau „+” „ ∨ ” sau „+”
Negare „!” „¬”
Diferit „!=” „≠ ”
Egal „= =” „=”

Exerciţiul 4. Să se scrie o funcţie care să returneze suma a două numere, dacă


acestea au acelaşi semn şi produsul lor, dacă sunt de semne contrare. Dacă unul dintre
acestea este nul, să se afişeze mesajul “Date incorecte”.

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

Exerciţiul 6. Să se afişeze în ordine crescătoare trei numere date.

Propunere de algoritm. Se va prezenta algoritmul în pseudocod şi implementarea


acestuia în limbaj C.

Î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();}

Instrucţiunea Switch în limbaj C

Dacă E şi Ei sunt expresii de tip întreg (Ei constante) şi Ii blocuri de instrucţiuni,


atunci forma instrucţiunii este:

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.

Propunere de algoritm. Se va utiliza o instrucţiune Switch în care fiecare ramură


corespunde opţiunii utilizatorului, exprimată prin tastarea unei litere: s pentru sumă, p
pentru produs, c pentru cât şi d pentru diferenţă. Ramura default semnalează introducerea
unei opţiuni greşite.

#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.

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