Sunteți pe pagina 1din 11

Laborator 2

Instructiuni condiționate și de salt

1. Instructiuni conditionate
a) simple
i) cu o situatie (IF)
ii) cu dubla situatie (IF..ELSE)
b) multiple
i) doar cu situatii favorabile: (SWITCH..CASE)
ii) si cu situatie defavorabila: (SWITCH..CASE..DEFAULT)
2. Instructiuni repetitive
a) cu un numar cunoscut de pasi: (FOR)
b) conditionate
i) cu conditie anterioara: (WHILE)
ii) cu conditie poserioara: (DO..WHILE)
3. Instructiuni de salt: RETURN, GOTO, BREAK, EXIT

1. Instructiuni conditionate simple

Instrucţiunea if

a) Cu o situaţie:
if (expresie) instrucţiune

Principiul de execuţie este următorul:


● se evaluează expresia;

● dacă valoarea produsă de aceasta este diferită de 0, se execută instrucţiunea


subordonată.
b) Cu două situaţii:
if (expresie) instrucţiune1 else instrucţine2

Principiul de execuţie este următorul:


● se evaluează expresia

● dacă valoarea produsă de aceasta este diferită de 0, se execută instrucţiune1;

● dacă valoarea produsă este 0 se execută instrucţiune2.

Aplicația 1. Ecuatia de gradul al doilea. (ax2+bx+c=0, a#0)

#include<iostream>
using namespace std;

void main()
{
int a, b, c;
cout << "Citim coeficientii: ";
cin >> a >> b >> c;
float d, x1, x2;
if (!a) //a==0
if (!b)
if (!c)
cout << "Ecuatie nedeterminata (infinita)\n";
else
cout << "Ecuatie imposibila\n";
else
{
x1 = -c / (float)b;
cout << "Ecuatie de gr. I. Solutie: " << x1 << '\n';
}
else
{
d = b * b - 4 * a*c;
if (d < 0)
cout << "Ecuatie de gr. II. Solutii din multimea nr. complexe\n";
else
{
if (!d)
{
x1 = -b / (2. * a);
cout << "Ecuatie de gr. II. Solutie unica: " << x1 << '\n';
}
else
{
x1 = (-b - sqrt(d)) / (2 * a);
x2 = (-b + sqrt(d)) / (2 * a);
cout << "Ecuatie de gr. II. Solutii: " << x1 <<' '<<x2 << '\
n';
}
}
}
}
2. Instructiuni conditionate multiple

Instrucţiunea switch
Instrucţiunea switch are forma generală:
switch (expresie)
{

case exp1: secvenţă


istrucţiuni1; break;
case exp2: secvenţă
instrucţiuni2; break;
……………………………
……………………………
……………………………
……………..
Unde: case expn:
secvenţă
instrucţiun
in; break;
[default:
secvenţă
instrucţiun
in+1];
};
● expresie are semnificaţia: expresie de tip întreg;

● expi: sunt expresii constante de tip întreg;

● instrucţiunei reprezintă o secvenţă oarecare de instrucţiuni.

Principiul de execuţie este următorul:

● se evaluează expresia expresie;

● dacă aceasta produce o valoare egală cu cea produsă de expi, se execută în

ordine, instructiunei şi se trece la instrucţiunea următoare instrucţiunii


switch, altfel se execută numai secvenţa instrucţiuni din clauza default.

● Alternativa default este facultativă. În absenţă, în cazul în care nu există

coincidenţă de valori, se trece la instrucţiunea următoare instrucţiunii switch.

F F
caz1 cazn instrucţiunen+1

T T

instrucţiune1 instrucţiunen

Aplicația 2. Operatii pe numere intregi. Se citesc doua numere intregi. In functie de operatia
aleasa, se vor executa diverse operatii pe acestea (adunare, diferenta, inmultire si
impartire).
#include<iostream>
using namespace std;

int main()
{
int a, b;
cout << "Dati cele doua numere: ";
cin >> a >> b;
float r; //rezultatul fiecarei operatii
char c; //alegerea operatiei

cout << "Operatiile ce pot fi alese sunt:\n";


cout << "\t1. [Adunare]\n";
cout << "\t2. [Diferenta]\n";
cout << "\t3. [Inmultire]\n";
cout << "\t4. [Impartire]\n";

cout << "\tAlege optiunea dorita: ";


cin >> c;

switch (c)
{
case '1': r = a + b; break;
case '2': r = a - b; break;
case '3': r = a * b; break;
case '4': r = a / (float)b; break;
default: cout << "Optiunea aleasa nu corespunde\n";
};

if (c == '1' or c == '2' or c == '3' or c == '4')


cout << "Rezultatul operatiei cerute: " << r << '\n';

return 0;
}

3. Instructiuni de salt
Instrucțiuni de salt: RETURN, BREAK, EXIT, GOTO.
Aplicația 3. Se va modifica aplicația cu ecuația de gradul al doilea, astfel încât se va permite
utilizatorului reluarea operațiunii, pentru execuții multiple (instructiunea de salt goto).
#include<iostream>
using namespace std;

void main()
{
int a, b, c;
float d, x1, x2;

ecuatia2:
{
cout << "Citim coeficientii: ";
cin >> a >> b >> c;

if (!a) //a==0
if (!b)
if (!c)
cout << "Ecuatie nedeterminata (infinita)\n";
else
cout << "Ecuatie imposibila\n";
else
{
x1 = -c / (float)b;
cout << "Ecuatie de gr. I. Solutie: " << x1 << '\n';
}
else
{
d = b * b - 4 * a*c;
if (d < 0)
cout << "Ecuatie de gr. II. Solutii din multimea nr.
complexe\n";
else
{
if (!d)
{
x1 = -b / (2. * a);
cout << "Ecuatie de gr. II. Solutie unica: " << x1
<< '\n';
}
else
{
x1 = (-b - sqrt(d)) / (2 * a);
x2 = (-b + sqrt(d)) / (2 * a);
cout << "Ecuatie de gr. II. Solutii: " << x1 << ' '
<< x2 << '\n';
}
}
}
};

char k;
cout << "\nDoriti sa repetati? (D - da, N - nu): ";
cin >> k;
if (k == 'd' or k == 'D') //'or' se mai scrie '||'
{
system("cls");
goto ecuatia2;
}
}

Aplicații instrucțiuni alternative


4. Se citesc 3 numere întregi, se vor determina volarile extreme între acestea.
#include<iostream>
using namespace std;

int main()
{
int a, b, c;
cout << "Citim numerele: ";
cin >> a >> b >> c;
int m, M;
m = M = a;
int i = b;
int ok = 1;
min_max: {
if (i < m)
m = i;
else
if (i > M)
M = i;
};
i = c;
if (ok == 1) //vrem ca intrarea in eticheta sa se mai faca doar o singura data
{
ok = 0;
goto min_max;
}

cout << "Minimul: " << m;


cout << "\nMaximul: " << M;
return 0;
}

5. Se introduce de la tastatură un numar intreg n, să se calculeze valoarea absoluta a sa, fără


a se folosi o funcție predestinată.
6. Se citesc 3 numere a, b și c. Să verifice daca pot fi termenii unei progresii aritmetice.
#include<iostream>
using namespace std;

int main()
{
int a, b, c;
cout << "a= ";
cin >> a;
cout << "b= ";
cin >> b;
cout << "c= ";
cin >> c;
if (2 * b == a + c)
cout << "Numere in progresie aritmetica\n";
else
if (2 * c == a + b)
cout << "Numere in progresie aritmetica\n";
else
if (2 * a == b + c)
cout << "Numere in progresie aritmetica\n";
else
cout << "Numerele nu sunt in progresie aritmetica\n";
system("pause");
return 0;
}

7. Se citesc 3 numere a, b și c. Aflati daca aceste numere pot fi laturile unui triunghi, de ce
tip e el. Se va transmite și aria calculată (formule diferite pentru triunghiul dreptunghic,
pentru cel echilateral, respectiv, pentru cel isoscel/oarecare).
#include<iostream>
using namespace std;

int main()
{
int a, b, c;
float S;

cout << "Citim cele 3 valori: ";


cin >> a >> b >> c;

if (a > 0 and b > 0 and c > 0 and a + b > c and a + c > b and b + c > a)
if ((a * a == b * b + c * c) or (b * b == a * a + c * c) or (c * c == a
* a + b * b))
{
if (a == b or a == c or b == c)
cout << "Triunghi dreptunghic isoscel\n";
else
cout << "Triunghi dreptunghic oarecare\n";
int c1, c2;
if (a <= b)
{
c1 = a;
c2 = b;
}
else
{
c1 = b;
c2 = a;
}
if (c < c2)
c2 = c;
S = c1 * c2 / 2;
}
else
if (a == b and b == c)
{
cout << "Triunghi echilateral\n";
S = a * a * sqrt(3) / 4;
}
else
{
if (a == b or b == c or a == c)
cout<<"Triunghi isoscel\n";
else
cout<<"Triunghi oarecare\n";
int p;
p = (a + b + c) / 2;
S = sqrt(p*(p - a)*(p - b)*(p - c));

}
cout << "Aria triunghiului: " << S << '\n';

return 0;
}

8. Se citesc trei numere reale. Sa se calculeze minimul si maximul valorilor lor absolute.
9. Se introduc de la tastatura n, a, b, c. Să se calculeze valoarea lui e definit astfel:
|(a+b)/c, ptr. n=1
e= |(b+c)/a, ptr. n=2
|(c+a)/b, ptr. n=3
Se cere atât varianta folosind instrucțiuni alternative simple, cât și multiple.
//Varianta A. Folosind IF

#include<iostream>
using namespace std;

int main()
{
int a, b, c, n;
float e;
cout << "a= ";
cin >> a;
cout << "b= ";
cin >> b;
cout << "c= ";
cin >> c;
cout << "n= ";
cin >> n;
if (n == 1)
e = (a + b) / (float)c;
else
if (n == 2)
e = (b + c) / (float)a;
else
if (n == 3)
e = (c + a) / (float)b;
else
cout << "Optiunea aleasa este invalida\n";

if (n == 1 || n == 2 || n == 3)
cout << "Optiunea aleasa este " << e << '\n';

system("pause");
return 0;
}

//Varianta B. Folosind SWITCH

#include<iostream>
using namespace std;

int main()
{
int a, b, c, n;
float e;
cout << "a= ";
cin >> a;
cout << "b= ";
cin >> b;
cout << "c= ";
cin >> c;
cout << "n= ";
cin >> n;
switch (n)
{
case 1: e = (a + b) / (float)c; break;
case 2: e = (b + c) / (float)a; break;
case 3: e = (a + c) / (float)b; break;
default: cout << "Optiunea aleasa este invalida\n";
};
if (n == 1 || n == 2 || n == 3)
cout << "Optiunea aleasa este " << e << '\n';
system("pause");
return 0;
}

10. Se citeste o literă de la tastatură. Să se determine dacă este vocală sau consoană.
#include<iostream>
using namespace std;

int main()
{
char k;
cout << "Introduceti un caracter de la tastatura: ";
cin >> k;
int ok = 0; //pornim de la premiza ca nu este o vocala/consoana introdusa
switch (k)
{
case 'a':
case 'A':
case 'e':
case 'E':
case 'i':
case 'I':
case 'o':
case 'O':
case 'u':
case 'U': ok = 1; break;
default:
if ((k >= 'b' and k <= 'z') || (k >= 'B' and k <= 'Z')) //'and' este
'&&'
ok = 2;
}
if (ok == 1)
cout << "Caracterul citit este vocala\n";
else
if (ok == 2)
cout << "Caracterul citit este consoana\n";
else
cout << "Caracterul citit este orice alt semn\n";
system("pause");
return (0);
}

11. Se dau trei numere natural a,b,x. Să se scrie un algoritm care verifica daca numarul
apartine intervalului [a,b]. Dacă condiția este indeplinita se va return 1, altfel 0.
#include<iostream>
using namespace std;

int main()
{
int a, b, x;
cin >> a >> b >> x;
if (a == b)
{
cout << "Nu exista interval\n";
system("pause");
return 1;
}
if (a > b)
//varianta 1
{
a = a + b;
b = a - b;
a = a - b;
}
/*
//varianta 2
{
int c;
c = a;
a = b;
b = c;
}
//varianta 3
swap(a, b);
*/
if (x >= a or x <= b) //'or' poate fi scris si '||'
cout << x << " apartine ["<<a<<','<<b<<"]\n";
else
cout << x << " nu apartine [" << a << ',' << b << "]\n";
system("pause");
return 0;
}

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