Sunteți pe pagina 1din 4

Laboratorul 6 Structuri de decizie (alternative, de selecţie)

6. Structuri de decizie (alternative, de selecţie)

6.1 Structura de decizie: instrucţiunea if

Aceasta corespunde cazurilor când în algoritmul problemei intervine o decizie.


Este instrucţiunea principală în C care descrie structura alternativă. Pentru un pseudocod
de forma:
dacă (<condiţie>) atunci <instrucţiune>
instrucţiunea if este:
if (<condiţie>) <instrucţiune>;
iar pentru un pseudocod de forma:
dacă (<condiţie>) atunci <instr1> altfel <instr2>
instrucţiunea if este:
if (<condiţie>) <instr1>; else <instr2> ;
OBSERVAŢIE: Dacă una din instrucţiunile de pe ramura "if" sau "else" este o instrucţiune
compusă, atunci ea se încadrează între acolade:
{ <instr1>; <instr2>; ... }
şi nu se mai termină cu punct-virgulă. În caz contrar programul va executa numai prima
instrucţiune de pe ramură.

6.2 Structura de selecţie cu ramuri multiple:


instrucţiunea switch

În unele cazuri este necesară o decizie multiplă specială.


Instrucţiunea switch permite acest lucru. test expr

DACĂ expresie=expr_const_1
instrucţiune1;
[ieşire;] instrucţiune1
ALTFEL DACĂ expresie=expr_const_2
break
instrucţiune2;
[ieşire;]
… instrucţiune2
ALTFEL DACĂ expresie=expr_const_n-1
instrucţiune_n-1; break
[ieşire;]
ALTFEL instrucţiune_n;

Se testează dacă valoarea pentru expresie este una instrucţiune_n


dintre constantele specificate (expr_const_1,
expr_const_2, etc.) şi se execută instrucţiunea de pe
ramura corespunzătoare. În schema logică test_expresie este una din condiţiile:
expresie=expr_const_1, expresie=expr_const_2, etc.
Sintaxa:

27
Laboratorul 6 Structuri de decizie (alternative, de selecţie)

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; ]
}

6.3 Exemple if, switch

6.3.1 Maximul a trei numere

6.3.1.1 Pseudocodul: void main()


{
1.citeşte a,b,c int cod=1; float x,y,z; char op;
2.dacă a>b atunci max=a altfel max=b while(cod)
3.dacă c>max atunci max=c {
4.scrie max printf("\nIntroduceti expresia
Start (valoare operator valoare): ");
scanf("%f %c %f",&x,&op,&y);
switch(op)
Citeşte
a, b, c
{
case '+':z=x+y;break;
case '-':z=x-y;break;
Nu Dacă Da
case '*':z=x*y;break;
a>b
case '/':z=x/y;break;
max=b max=a default: printf("\nOperator
eronat"); cod=0; z=0;
}
Da printf("%.2f %c %.2f=
Dacă %.2f",x,op,y,z);
c>max max=c }
}
Scrie “Max =” , max Să se scrie un program care citeşte o cifră
din intervalul [1,7] şi afişează denumirea
Stop
zilei din săptămînă corespunzătoare cifrei
respective (1-luni, 2-marţi etc).
6.3.1.2 Programul: //PROGRAMUL BIV25
#include<iostream.h> #include <stdio.h>
main() #include <stdlib.h>
{ void main( )
int a,b,c,max; /* citestc o cifra din intervalul
cout<<"Dati a b c"; cin>>a>>b>>c; [1,7] si afiseaza denumirea zilei
if(a>b) max=a; din saptamina corespunzatoare
else max=b; cifrei respective */
if(c>max) max=c; {
cout<<"maximul="<<max; int i;
} scanf("%d", &i);
switch(i)
{
6.3.2 Calculator de buzunar case 1: puts("luni");break;
//Instruc de selectie switch case 2: puts("marti");break;
#include<stdio.h> case 3: puts("miercuri"); break;

28
Laboratorul 6 Structuri de decizie (alternative, de selecţie)

case 4: puts("joi"); break; default: puts("Valoare gresita


case 5: puts("vineri"); break; !");exit(1);
case 6: puts("simbata"); break; }
case 7: puts("duminica"); break; }

6.4 Probleme propuse

Să se alcătuiască programe care să rezolve următoarele probleme:

6.4.1 Calculul volumului unui corp geometric


Să se scrie un program care afişează un mesaj de tip meniu şi în funcţie de un caracter citit
de la tastatură (1 pentru paralelipiped, 2 - Cilindru, 3 - Con, 4 - Sferă, 0 - terminare program)
citeşte dimensiunile necesare şi calculează şi afişează în cadrul unui mesaj volumul corpului
respectiv (Vp = H·B·L; Vcil = π·R2·H; Vcon = π·R2·H/3; Vsf = π·D3/6).

Start

Citeşte
a, b, c

Nu Da
Dacă
a=0

Δ = b2 – 4ac

Da
Nu

Dacă
Da
i<iter
Scrie “Ec
are rad x
x0=x
Nu Dacă Da
Δ>0 b=0

Scrie “Ec e de
gradul unu
x1 = -c/b

Nu Dacă Da Nu Daca Da
Δ<0 c=0

-b
-b± Δ -b re = 2a
x1,2 = x1,2 = 2a
2a

im = 2a

Scrie “Ec are Scrie “Ec are Scrie “Ec are Scrie “Ec nu Scrie “Ec are
doua rad dif” rad dubla” rad compl” are nici o o infinit ate de
x1 şi x2 x1 = x2 x1,2 = re±i⋅im solutie” solutii”

Stop

2.1.1.1 scrie "ec.are o infinitate de


6.4.2 Ecuaţia de gradul 2 (vezi şi schema sol."
logică) 2.1.1.2 altfel scrie "ec.nu are sol"
1.citeşte a,b,c 2.1.2 altfel scrie "ec.are sol.unică x=",-c/b
2.dacă a=0 atunci altfel
2.1.dacă b=0 atunci 2.2 d=b*b-4*a*c
2.1.1.dacă c=0 atunci 2.2.1 dacă d>0 atunci
2.2.1.1.x1=(-b- d )/(2*a)

29
Laboratorul 6 Structuri de decizie (alternative, de selecţie)

x2=(-b+ d )/(2*a) 3.1.2 altfel arg = -pi/2


scrie "x1=",x1,"x2=",x2 3.2 altfel
2.2.1.2 altfel dacă re>0 atunci
dacă d=0 atunci 3.2.1 arg=arctg(im/re)
2.2.1.2.1 scrie "ec.are 3.2.2 altfel arg=-arctg(im/re)
rad.dubla x=",-b/(2*a) 4.scrie re,im
altfel
2.2.1.2.2 re = -b/(2*a) 6.4.4 Rezolvarea unui sistem de două
ecuaţii cu două necunoscute x,y
im = -d /(2*a)
scrie "ec.are 1.citeşte a11,a12,a21,a22,b1,b2
sol.complexe re = ", re," im = ",im 2.det = a11*a22-a21*a12
3.detx = b1*a22-b2*a12
6.4.3 Modulul şi argumentul unui număr 4.dety = a11*b2-a21*b1
complex 5.x = detx/det; y = dety/det
1.citeşte re,im
6.4.5 Sa se calculeze şi sa se afişeze
2.modul = re*re+im*im valoarea funcţiei f pentru un x dat:
3.dacă re=0 atunci
3.1 4x3 + 5x2 - 2x + 1, x<0
dacă im>=0 atunci f(x)= 100, x=0
x
3.1.1 arg=pi/2 e - ln x, x>0

Start

Citeşt
e

modul= re ⋅ re + im ⋅ im

N Dacă
D
re=0

N Dacă D D Dacă N
re>0 im>=0

arg=- arg=arct(im/r arg=pi/2 arg=-pi/2

scrie re,im

Stop

30

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