Sunteți pe pagina 1din 7

REFERAT DE LABORATOR Nr.

REFERAT DE LABORATOR NR. 4


TEMA: Implementarea structurilor de control. Structura secvenial. Structura de decizie.

ntr-un program, prelucrarea datelor se realizeaz cu ajutorul instruciunilor. O instruciune este o construcie valid (care respect sintaxa limbajului) urmat de ;. Ordinea n care se execut instruciunile unui program definete aa-numita structur de control a programului. Limbajele moderne sunt alctuite pe principiile programrii structurate. Conform lui C. Bohm i G. Jacobini, orice algoritm poate fi realizat prin combinarea a trei structuri fundamentale: structura secvenial; structura alternativ (de decizie, de selecie); structura repetitiv (ciclic).

1. IMPLEMENTAREA STRUCTURII SECVENIALE Structura secvenial este o niruire de instruciuni, plasate una dup alta, n ordinea n care se dorete execuia acestora. Implementarea structurii secveniale se realizeaz cu ajutorul instruciunilor: Instruciunea vid Sintaxa: ; Instruciunea vid nu are nici un efect. Se utilizeaz n construcii n care se cere prezena unei instruciuni, dar nu se execut nimic (de obicei, n instruciunile repetitive). Instruciunea expresie Sintaxa: <expresie>; sau: <apel_funcie>;

REFERAT DE LABORATOR Nr.4

Instruciunea compus (instruciunea bloc) Sintaxa: { <declaratii>; <instr1>; <instr2>; <declaratii>; . . . . }

ntr-un bloc se pot declara i variabile care pot fi accesate doar n corpul blocului. Instruciunea bloc este utilizat n locurile n care este necesar prezena unei singure instruciuni, ns procesul de calcul este mai complex, deci trebuie descris n mai multe secvene. Ca urmare, ntregul grup de declaraii i instruciuni dintr-o instruciune compus, va fi privit ca o singur instruciune.

2. IMPLEMENTAREA STRUCTURII DE DECIZIE Structura de decizie este ntlnit sub i sub numele de structur condiional, alternativ sau de selecie. Instruciunea if:

Sintaxa: if (<expresie>) <instruciune1>; [ else <instruciune2>; ] La ntlnirea instruciunii if, se evalueaz <expresie> (care reprezint o condiie). Dac valoarea sa este 1 (condiia este ndeplinit) se execut <instruciune1>; dac valoarea expresiei este 0 (condiia nu este ndeplinit), se execut <instruciune2>. Deci, la un moment dat, se execut doar una dintre cele dou instruciuni: fie instruciune1, fie instruciune2. Dup execuia instruciunii if se trece la execuia instruciunii urmtoare. Instruciunea switch

n unele cazuri este necesar o decizie multipl, special. n limbajul C, instruciunea switch implementeaz o astfel de structur de comutare sau de selecie. Sintaxa: switch (<expresie>) { case <expresie_const_1>: <instructiune_1>; [break;] case <expresie_const_2>: <instructiune_2>; [break;] . . . . . . . . . . . case <expresie_const_n-1>: <instructiune_n-1>; [break;] [ default: <instructiune_n>; ] }

REFERAT DE LABORATOR Nr.4

Este evaluat <expresie>, iar valoarea ei este comparat cu valorile expresiilor constante specificate prin <expr_const_1>, <expr_const_2>, etc., pn la ntlnirea primei egaliti (de exemplu, <expresie>=<expresie_const_k>). n aceast situaie se execut instruciunea corespunztoare acelei ramuri (<instruciune_k>). Dac se ntlnete instruciunea break, parcurgerea este ntrerupt, deci se va trece la execuia primei instruciuni de dup switch. Dac nu este ntlnit instruciunea break, parcurgerea continu. Break-ul cauzeaz deci, ieirea imediat din switch. n cazul n care valoarea expresiei nu este gsit printre valorile expresiilor constante, se execut cazul marcat cu eticheta default (cnd acesta exist). Expresiile <expresie>, <expresie_const_1>, <expresie_const_2>, etc., trebuie s fie ntregi. n exemplul urmtor, ele sunt de tip char, dar o dat de tip char este convertit automat n tipul int. Valoarea <expresie> joac rolul de comutator sau selector.

REFERAT DE LABORATOR Nr.4

1. S se citeasc de la tastatur un numr real. Daca acesta se afl n intervalul [-100, 100], s se afieze 1, dac nu, s se afieze -1.
#include <iostream> using namespace std; int main() { double nr; int afis; cout<<"Astept numar:"; cin>>nr; if (nr >= -100 && nr <= 100) afis = 1; else afis= -1; cout<<afis; }

2. S se calculeze valoarea funciei f(x), tiind c x este un numr real introdus de la tastatur:
6x + 20 , dac x [ , 7 ] f(x)= x + 30 , dac x ( 7, 0] , dac x > 0 x
a) Rezolvare utiliznd structura if-else:
#include <iostream> #include <math.h> using namespace std; int main() { double x, f; cout<<"x="; cin>>x; if ( x<=-7) f = -x * 6 + 20; else if ( x<=0 ) f = x + 30; else f = sqrt(x); cout<<"f="<<f<<'\n'; }

REFERAT DE LABORATOR Nr.4

b) Rezolvare utiliznd numai if-uri simple (fr else):


#include <iostream> #include <math.h> using namespace std; int main() { double x, f; cout<<"x="; cin>>x; if ( x<=-7 ) f = -x * 6 + 20; if ( x>=-7 && x<=0 ) f = x + 30; if ( x>0 ) f = sqrt(x); cout<<"f="<<f<<'\n'; }

Se citete un caracter reprezentnd un operator aritmetic binar simplu. n funcie de caracterul citit, se afieaz numele operaiei pe care acesta o poate realiza.
#include <iostream> using namespace std; int main() { char oper; cout<<"Introdu operator aritmetic, simplu, binar:"; cin>>oper; if ( oper == '+' ) cout<<"Operatorul de adunare!\n"; else if ( oper == '-' ) cout<<"Operatorul de scadere!\n"; else if ( oper == '*' ) cout<<"Operatorul de inmultire!\n"; else if ( oper == '/' ) cout<<"Operatorul de impartire!\n"; else if ( oper == '%' ) cout<<"Operatorul rest!\n"; else cout<<"Operator ilegal!!!\n"; }

3.

REFERAT DE LABORATOR Nr.4

4. S se rescrie programul pentru problema 3, utiliznd instruciunea switch.


#include <iostream> using namespace std; int main() { char oper; cout<<"Introdu operator aritmetic, simplu, binar:"; cin>>oper; switch (oper) { case ('+'): cout<<"Operatorul de adunare!\n"; break; case ('-'): cout<<"Operatorul de scadere!\n"; break; case ('*'): cout<<"Operatorul de inmultire!\n"; break; case ('/'): cout<<"Operatorul de impartire!\n"; break; case ('%'): cout<<"Operatorul rest!\n"; break; default: cout<<"Operator ilegal!\n"; } }

PROBLEME PROPUSE SPRE REZOLVARE

6. S se calculeze aria unui triunghi, cunoscndu-se mrimea laturilor sale. Numerele care
reprezint mrimile laturilor vor fi introduse de utilizator. Se va testa mai nti dac cele 3 numere reprezentnd mrimea laturilor pot forma un triunghi (a<=b+c, b<=c+a, c<= a+b). Formula ariei este urmtoarea: aria = p( p a)( p b)( p c) , unde p este semiperimetrul: p = ( a + b + c) / 2

REFERAT DE LABORATOR Nr.4

7. S se rescrie urmtoarea secven, folosind o singur instruciune if.


if (n>-90) if (n<=90) if (x!=0) int b= n/x;

8.

S se citeasca un numr natural n. S se scrie un program care afieaz dac numarul n citit reprezinta sau nu, un an bisect (anii biseci sunt multipli de 4, exceptnd multiplii de 100, dar incluznd multiplii de 400).

9. Fie funcia
e q 3 , q [0, 1) f(q)= sin q + cos q , q [1, 2) 0,9 ln(q+3) , q [2, 100]

S se calculeze f(q), q real, citit de la tastatur. Funciile care se vor utiliza sunt urmtoarele: exp(x) pentru ex, sin(x) pentru sin x, cos(x) pentru cos x, log(x) pentru ln x.

avnd prototipurile n header-ul math.h.

10. S se scrie un program care calculeaz i afieaz maximul a 3 numere reale (a, b i c)
citite de la tastatur.

11. S se citeasc 2 caractere care reprezint 2 litere mari. S se afieze caracterele citite n
ordine alfabetic.

12. S se scrie un program care citete o cifr. n funcie de valoarea ei, s se fac urmtorul
calcul: dac cifra este 3, 5 sau 7 s se afieze ptratul valorii numerice a cifrei; dac cifra este 2, 4 sau 6 s se afieze cubul valorii numerice a cifrei; dac cifra este 0 sau 1 s se afieze mesajul "Valori mici"; altfel, s se afiseze mesajul "Caz ignorat!".

Evaluare