Sunteți pe pagina 1din 8

Instructiunea IF

Structura alternativă apare în practică în două variante şi anume:

 Structura alternativă: în acest caz se va executa doar unul din două blocuri de instrucţiuni în
funcţie de valoarea de adevăr a unei expresii logice
 Structura alternativă multiplă: în această situaţie se va executa un bloc de instrucţiuni din mai
multe variante posibile.

Auzim în viata de zi cu zi afirmaţii de genul:

DACĂ am promovat la toate materiile ATUNCI


ma voi duce in tabara,
ALTFEL
stau sa invat.
SFÂRŞIT DACĂ
Se remarcă aici trei cuvinte ce au un rol deosebit: DACĂ, ATUNCI, ALTFEL. Propozitia are trei
componente şi anume:

 o conditie, transcrisă prin “am promovat la toate materiile”, conditie pe care o vom nota cu C;
 o acţiune transcrisă prin mesajul “mă voi duce în tabără”, notata cu B1, acţiune asociata cu
cuvântul ATUNCI, adică se execută dacă şi numai dacă “am promovat la toate materiile”;
 o acţiune transcrisă prin mesajul “stau să învăţ”, notată cu B2, acţiune asociată cu
cuvântul ALTFEL, adică se execută dacă şi numai dacă NU “am promovat la toate materiile”

Structura alternativă este implementată în limbajul C++ de instrucţiunea IF. În continuare vom
prezenta modul de reprezentare a acestei structuri în limbaj pseudocod, în schemă logică şi în
limbajul de programare C++. Modul de execuţie este identic pentru oricare din cele trei
reprezentări. Sintetizănd cu notaţiile de mai sus structura alternativă se poate reprezenta astfel:
Compilatorul va executa instrucțiunea if în felul următor:
- Evalueză condiția.
- Dacă condiția este adevărată atunci execută instrucțiune1.
- Dacă ramura else există și condiția nu este adevărată se va executa instrucțiune2.
- Se trece la următoarea instrucțiune după if.

De exemplu, dacă dorim să verificăm dacă un număr a este nul vom folosi instrucțiunea if in felul următor:

Daca a=0 atunci scrie (`numarul e nul`) if (a==0) cout<<”numar nul”;


altfel scrie (`numarul nu este nul`); else cout<<”numarul nu e nul ”;

1. Să se verifice dacă un număr este pozitiv.


#include<iostream> using namespace std;
int main()
{ long a;
//citim numarul cout<<"a=";
cin>>a;
//verificam daca numarul este pozitiv if(a>=0)
cout<<"s-a citit un numar pozitiv"; else cout<<"s-a
citit un numar negativ";
return 0;
}

2. Să se verifice dacă un număr aparţine intervalului [a,b]. a şi b sunt numere reale citite de la
tastatură. #include<iostream> using namespace
std;
int main()
{ float a,b,n;
//citim datele de intrare: a,b si numarul dat
cout<<"a=";cin>>a; cout<<"b=";cin>>b;
cout<<"n=";cin>>n;
//verificam daca numarul n apartine intervalului [a,b] if(n>=a
and n<=b)cout<<n<<" apartine intervalului [a,b]"; else
cout<<n<<" nu apartine intervalului [a,b]"; return 0;
}

3. Să se verifice daca 3 numere citite de la tastatura sunt nule.


#include<iostream> using namespace std;
int main()
{ float a,b,c;
//citim datele de intrare: a,b si numarul dat
cout<<"a=";cin>>a; cout<<"b=";cin>>b; cout<<"c=";cin>>c;
//verificam daca numerele sunt nule
if(a==0 && a==0 && c==0)cout<<" toate numerele sunt nule";
else cout<<" nu sunt toate nule";
return 0;
}

4. Se citesc de la tastatura 3 numere. Să se verifice dacă s-au citit în ordine crescătoare.


#include<iostream> using namespace std;
int main()
{ float a,b,c;
//citim datele de intrare: a,b si numarul dat
cout<<"a=";cin>>a; cout<<"b=";cin>>b;
cout<<"c=";cin>>c;
//verificam daca numerele sunt in ordine crescatoare if(a<=b &&
b<=c)cout<<" cele 3 numere sunt in ordine crescatoare"; else cout<<" nu
sunt in ordine crescatoare"; return 0;
}
5. Se citesc de la tastatură 4 numere. Câte dintre ele sunt numere pare?
#include<iostream> using namespace std;
int main() {int a,b,c,d,nr;
//citim datele de intrare: a,b,c si d
cout<<"a=";cin>>a; cout<<"b=";cin>>b; cout<<"c=";cin>>c;
cout<<"d=";cin>>d;
//initializam un contor cu 0 pe care il vom mari cu 1 de
fiecare data cand gasim un numar par nr=0; if(a%2==0)nr++;
if(b%2==0)nr++; if(c%2==0)nr++; if(d%2==0)nr++;
cout<<"s-au citit "<<nr<<" numare pare"; return 0;
}

6. Se citesc de la tastatura 3 numere reale. Să se verifice dacă pot forma laturile unui triunghi.
#include<iostream> using namespace std;
int main() {float a,b,c;
//citim cele 3 date de intrare cout<<"a="; cin>>a;
cout<<"b=";cin>>b; cout<<"c=";cin>>c;
//verificam daca cele 3 numere pot forma laturile unui
triunghi
if(a>0&&b>0&&c>0&&a+b>c&&a+c>b&&b+c>a)
if(a==b&&b==c)cout<<"triunghi echilateral"; else
if(a==b || b==c || c==a) cout<<"triunghi isoscel";
else cout<<"triunghi oarecare"; else
cout<<"cele 3 numere nu pot forma laturile unui triunghi"; return 0;
}

7. Să se scrie un program care să rezolve ecuaţia de gradul I: ax+b=0, valorile lui a şi b se citesc
de la tastatură şi sunt valori reale. Se vor lua în discuţie toate cazurile.

Rezolvare:
Algoritm în Program în codebloks Rezultat afişat
pseudocod
# include<iostream>
using namespace std;
int main()
reale a,b { float a,b,x;
citeste a cout<<"a="; cin>>a;
citeste b cout<<"b="; cin>>b;
daca a=0 atunci if(a==0)
| daca b=0 if(b==0)
atunci cout<<"Exista o infinitate de solutii!";
| | scrie else
”Infinitate sol.” cout<<"Ecuatie imposibila!";
| |altfel else
| | scrie { x=-b/a;
”Imposibil” cout<<"Solutia ecuatiei este "<<x;
| |_▄ }
|altfel return 0;
| x=-b/a }
| scrie x
|_▄

8. Sa se scrie un program care sa rezolve ecuatia de grad II: ax2+bx+c=0, unde a, b, c apartin lui R.
9. Să se determine valoarea maxima dintre trei numere memorate în variabilele a, b şi c.

Tinând cont de exemplul anterior o modalitate simplă de rezolvare ar consta în compararea două câte
două valorile variabilelor a, b, şi c. Se compară, spre exemplu, prima dată valoarea variabilei a cu
valoarea variabilei b şi presupunem că relaţia a>b este adevărată. Dacă menţinem adevărată această
presupunere, atunci valoarea maximă obţinută până acum este a. Mai rămâne să comparăm valoarea
variabilei c faţă de valoarea a. În această situaţie există două cazuri şi anume:

Cazul 1: reprezentat în următorul desen:

rezultă că valoarea variabilei c este mai mare decât valoarea variabilei a, deci valoarea maximă dintre
cele trei numere este valoarea lui c;
Cazul 2: reprezentat în următorul desen:

când valoarea variabilei c este mai mică decât valoarea variabilei a (nu contează în acest moment
raportul dintre variabilele b şi c), deci rezultă că valoarea maximă dintre cele trei numere este
valoarea lui a.

Algoritm în Program în Code Bloks Rezultat asteptat


pseudocod
#include<iostream>
using namespace std;
int main()
citeste a {int a,b,c,max;
citeste b cout<<"a="; cin>>a;
citeste c cout<<"b="; cin>>b;
daca a>b atunci cout<<"c="; cin>>c;
| daca c>a atunci if(a>b)
| | max=c if(c>a)
| | altfel max=c;
| | max=a else
| |_▄ max=a;
| altfel else
| daca c>b atunci if(c>b)
| | max=c; max=c;
| | altfel else
| | max=b max=b;
| |_▄ cout<<"Valoarea maxima
|_▄ este "<<max;
scrie max return 0;
}

Teme propuse:

1. Se citesc de la tastatură două numere. Care este valoarea celui mai mic? De exemplu dacă a=5 și b=7 se
va afișa 5.
2. Se introduc vârstele a trei copii. Care este vârsta celui mai mare și care este diferența de vârstă dintre cel
mai mare și cel mai mic. De exemplu v1=5, v2=8, v3=3 se va afișa vârsta cea mai mare este 8 și diferența
de vârtă este 5.
3. Se introduc punctajele obținute de doi sportivi. Afișați-le în ordine descrescătoare. De exemplu dacă se
introduc p1=4 și p2=10 se afișează 10 4.
4. Se introduc de la tastatură mediile a 3 elevi. Afișați mediile în ordine crescătoare. De exemplu dacă se
introduc m1=8.60, m2=6.90 și m3=5.90 se va afișa 5.90 6.90 8.60.
5. Se citesc de la tastatură patru numere. Să se dubleze valoarea celui mai mare și să se tripleze valoarea
celui mai mic. De exemplu a=4 b=6 c=2 d=3 se va afișa 4 12 6 3.
6. Se introduc de la tastatură două numere. Să se verifice dacă cele două numere sunt consecutive.
7. Se citesc de la tastatură două numere naturale reprezentând lungimile razelor a două cercuri și un număr
d reprezentând distanța între cele două cercuri. Care este pozitia celor două cercuri unul față de altul:
tangente, inersectate, disjuncte?
8. Se citesc coordonatele a două puncte din spațiu. Care este distanța dintre ele?
9. Se citesc de la tastatură coordonatele a 3 puncte din spațiu. Ce fel de triunghi formează?
10. Să se rezolve ecuația de gradul I ax+b=0 dacă se citesc de la tastatură valorile lui a și b.
11. Să se rezolve ecuația de gradul II ax2+bx+c=0 dacă se citesc de la tastatură valorile pentru a, b și c.
12. Să se afișeze |ax+b| dacă se cunosc valorile pentru a,b și x.
13. Să se verifice dacă toate cele 3 numere citite de la tastatură sunt numere pare.
14. Se citesc de la tastatură 2 numere cu cel mult 4 cifre. Care dintre ele are suma cifrelor mai mare? 17. Se
citește de la tastatură un număr cu trei cifre. Să se afișeze cifrele numărului în ordine crescătoare.
18. Se citesc de la tastatură două numere. Care este valoarea expresiei: ab/(a-b) ?
19. Se citesc de la tastatură valorile a trei numere reale. Să se verifice dacă pot forma laturile unui triunghi iar
în caz afirmativ să se afișeze aria și perimetrul triunghiului.

Structura alternativă multiplă


Instructiunea switch
Aceasta instructiune e folosita pentru a compara o valoare cu altele dintr-o lista, si in functie de
acea valoare se executa codul asociat ei in lista "switch".
Sintaxa generala a instructiuni "switch" este urmatoarea.

Citeste expresie;
switch (expresie)

{
case valoare1:
i1; break;
case valoare2:
i2; break;
case valoare3:
i3; break;
default :
instructiune pentru cazul diferit de cele 3 cazuri;
}

Ex: Se citeste un numar ce reprezinta o zi din saptamana. Ce program saptamanal are Gigel?

Se citeste un numar , sa se aleaga tipul de operatie:


#include<iostream.h>
using namespace std;
int main()
{ int a,b,selector;

cout<<"a="; cin>>a;
cout<<"b="; cin>>b;
cout<<"tastati una din cifre"<<endl;
cout<<"1-suma; 2-produs; 3-diferenta; 4-cat"<<endl;
cin>>selector ;
switch (selector)
{ case 1: cout<<"suma="<<a+b; break;
case 2: cout<<"produs="<<a*b; break;
case 3: cout<<"diferenta="<<a-b; break;
case 4: cout<<"cat="<<a/b; break;
default: cout<<"ati tastat o optiune inexistenta";
}
}

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