Sunteți pe pagina 1din 0

Instruciuni de decizie

16
INSTRUCIUNI DE DECIZIE

1. SCOPUL LUCRRII
n aceast lucrare se vor studia urmtoarele instruciuni:
-Instruciunea if cu o singur alternativ
-Instruciunea if - else cu dou alternative
-Instruciunea if - else cu mai multe alternative
-Instruciunea switch

2. BREVIAR TEORETIC

2.1. Instruciunea if cu o singur alternativ
Sintaxa: (o singur instruciune executabil)
if(condiie_testat)
instruciune;
Sintaxa: (o secven de instruciuni executabile)
if (condiie_testat){
<secven de instruciuni> }
Exemple:
if(nrOre>24)nrOre=24;
if(nrSecunde>=60){
nrSecunde=0;
nrMinute++; }

2.2. Instruciunea if-else cu dou alternative
Sintaxa: (o singur instruciune n fiecare clauza)
if(conditie_testata)
instruciune1;
else
instruciune2;
Exemplu:
if(nrMinute>=60){
nrMinute=0;
nrOre++;}
else nrMinute++;

2.3. Instruciunea if-else cu mai multe alternative
Sintaxa:
if(condiie_testat_1){
<grup 1 de instruciuni> }
else if(condiie_testat_2){
<grup 2 de instruciuni> }
...
else if(condiie_testat_n){
<grup n de instruciuni> }
else{ <grup n+1 de instruciuni> }
Observaie: ultimul else este opional (poate s nu fie prezent).
Exemplu:
L
a
b
o
r
a
t
o
r

2

P
C
L
P
Instruciuni de decizie

17
if(codOperaie=='+')z=x+y;
else if(codOperaie=='-')z=x-y;
else if(codOperaie=='
*
')z=x
*
y;
else if( (codOperaie=='/')&&(y!=0) )z=x/y;

2.4. Instruciunea switch
Aceast instruciune este o form special de construcie decizional cu mai multe
alternative. Ea permite s se examineze diverse valori ale unei expresii de tipul int i n
funcie de aceast valoare sa se selecteze pentru execuie un anumit grup de instruciuni.
Sintaxa:
switch(expresie){
case valoarea_1:
<una sau mai multe instruciuni>
break;
case valoarea_2:
<una sau mai multe instruciuni>
break;
...
case valoarea_n:
<una sau mai multe instruciuni>
break;
default:
<una sau mai multe instruciuni>
break;
}//end switch
Ramura default din instruciunea switch este opional.
Exemplu:
switch(poziiaBareiLuminoase){
case 0: f0( ); break;
case 1: f1( ); break;
case 2: f2( ); break;
case 3: stop=1; break;
}


3. DESFURAREA LUCRRII
Se vor edita i apoi executa programele descrise n continuare.

Programul nr. 1
Se citesc a, b, c - numere reale, coeficienii ecuaiei de gradul doi. S se calculeze i afieze
numrul de rdacini reale distincte ale ecuiei.
Sursa programului:
#include<stdio.h>
#include<conio.h>
void main(void)
{
clrscr();
double a,b,c,delta;
L
a
b
o
r
a
t
o
r

2

P
C
L
P
Instruciuni de decizie

18
printf("a="); scanf("%lf",&a);
printf("b="); scanf("%lf",&b);
printf("c="); scanf("%lf",&c);
delta=b*b-4*a*c;
if(delta>0)printf("Doua redacini reale si distincte");
else if(delta==0)printf("Doua radacini reale si egale");
else printf("Radacini complexe");
getch();
}

Programul nr. 2
S se calculeze i afieze maximul dintre 3 numere ntregi, a,b,c, citite de la tastatur.
Algoritm:
- se iniializeaz maximul cu primul numr, a
- se compar maximul cu b. Dac b este mai mare, se scrie n variabila maxim , valoarea lui
b.
- se compar maximul cu c, la fel cum s-a procedat i pentru b.
Sursa programului:
#include <stdio.h>
#include <conio.h>
void main()
{
int a,b,c,max;
clrscr();
printf("a="); scanf("%d",&a);
printf("b="); scanf("%d",&b);
printf("c="); scanf("%d",&c);
max=a;
if(b>max)max=b;
if(c>max)max=c;
printf("max=%d",max);
getch();
}

Programul nr. 3
Se citesc 4 numere ntregi de la tastatur. S se afieze dac cele 4 numere formeaz o
progresie aritmetic.
Algoritm:
- se calculeaz raia ca fiind diferena primilor doi termeni
- se compar aceast raie cu distanele (diferenele) dintre urmatorii termeni.
Sursa programului:
#include <stdio.h>
#include <conio.h>
void main()
{
int a,b,c,d;
int ratia;
clrscr();
L
a
b
o
r
a
t
o
r

2

P
C
L
P
Instruciuni de decizie

19
printf("a="); scanf("%d",&a);
printf("b="); scanf("%d",&b);
printf("c="); scanf("%d",&c);
printf("d="); scanf("%d",&d);
ratia=b-a;
if((c-b==ratia)&&(d-c==ratia))
printf("Sunt in progresie aritmetica.");
else printf("Nu sunt in progresie aritmetica.");
getch();
}



Programul nr. 4
Se citesc 3 numere ntregi a, b, c, de la tastatur. Sa se afieze dac
cele 3 numere sunt distincte sau nu.
Algoritm:
- se compar a cu b, a cu c i b cu c. Dac toi sunt diferii, numerele sunt distincte.
Greeli frecvente:
- nu se fac toate cele 3 comparaii
Sursa programului:
#include <stdio.h>
#include <conio.h>
void main()
{
int a,b,c;
clrscr();
printf("a="); scanf("%d",&a);
printf("b="); scanf("%d",&b);
printf("c="); scanf("%d",&c);
if((a!=b)&&(a!=c)&&(b!=c))printf("Sunt distincte.");
else printf("Nu sunt distincte.");
getch();
}

Programul nr. 5
Se citete un numr real x de la tastatur. S se calculeze i afieze valoarea expresiei E(x),
definit astfel:
E(x)=|x-5|+2 dac x<0
E(x)=1 dac x=0
E(x)=x-1 dac x>0
Algoritm:
-aplicaie foarte simpl a instruciunii if cu mai multe alternative
Greeli frecvente:
-notarea cu E(x) a unei variabile
Sursa programului:
#include <stdio.h>
#include <conio.h>
L
a
b
o
r
a
t
o
r

2

P
C
L
P
Instruciuni de decizie

20
#include <math.h> //pentru functia abs()
void main()
{
double x,E;
clrscr();
printf("x=");
scanf("%lf",&x);
if(x<0)E=abs(x-5)+2;
else if(x==0)E=1;
else E=x-1;
printf("E=%lf",E);
getch();
}

Programul nr. 6
Se citesc de la tastatur trei numere ntregi a, b, c. S se calculeze i afieze cte numere pare
au fost introduse, i suma acestor numere pare.
Algoritm:
-se iniializeaz contor de numere pare cu 0, i suma cu 0
-dac a este par, se incrementeaz contor i se adaug a la suma
-daca b este par, se incrementeaz contor i se adaug b la suma
-daca c este par, se incrementeaz contor i se adaug c la suma
Greeli frecvente:
-nu se face iniializarea contorului
-nu se face iniializarea sumei
Sursa programului:
#include <stdio.h>
#include <conio.h>
void main()
{
int a,b,c,contor,suma;
clrscr();
printf("a="); scanf("%d",&a);
printf("b="); scanf("%d",&b);
printf("c="); scanf("%d",&c);
contor=0;
suma=0;
if(a%2==0){
contor++;
suma=suma+a;}
if(b%2==0){
contor++;
suma=suma+b;}
if(c%2==0){
contor++;
suma=suma+c;}
if(contor==0)printf("Nu este nici un numar par.");
else
L
a
b
o
r
a
t
o
r

2

P
C
L
P
Instruciuni de decizie

21
printf("Sunt %d nr. pare. Suma lor este: %d",contor,suma);
getch();
}

Programul nr. 7
S se afieze codul ASCII al unei taste apsate. Se poate apsa o tast normal ( exemplu:
tasta A ) sau o tast special ( Exemplu: tasta F1 ).
-se citete codul tastei cu funcia de bibliotec getch()
-dac acest cod este 0, este o tast special, i al doilea cod al acestei taste se obine apelnd
din nou funcia getch()
Sursa programului:
#include <stdio.h>
#include <conio.h>
void main()
{
int c;
clrscr();
printf("Apasati o tasta, normala sau speciala: ");
c=getch();
if(c!=0)printf("\nTasta normala, are codul ASCII: %d",c);
else{ //este tasta speciala.
c=getch();
printf("\nTasta speciala, are codul: 0 si %d",c);
}
getch();
}

Programul nr. 8
Se citete de la tastatur un numr natural ntre 1 i 12, care reprezint numrul unei luni din
an. S se scrie numele lunii corespunztoare numrului citit.
Exemplu:
Daca numrul citit este 2, se va afia:
FEBRUARIE
Sursa programului:
#include<stdio.h>
#include<conio.h>
void main(void)
{
int nr;
clrscr();
printf("nr=");
scanf("%d",&nr);
switch(nr){
case 1:
printf("IANUARIE");
break;
case 2:
printf("FEBRUARIE");
L
a
b
o
r
a
t
o
r

2

P
C
L
P
Instruciuni de decizie

22
break;
case 3:
printf("MARTIE");
break;
case 4:
printf("APRILIE");
break;
case 5:
printf("MAI");
break;
case 6:
printf("IUNIE");
break;
case 7:
printf("IULIE");
break;
case 8:
printf("AUGUST");
break;
case 9:
printf("SEPTEMBRIE");
break;
case 10:
printf("OCTOMBRIE");
break;
case 11:
printf("NOIEMBRIE");
break;
case 12:
printf("DECEMBRIE");
break;
}//end switch
}

Programul nr. 9
Se citete de la tastatur un numr natural de 3 cifre (cuprins ntre 100 i 999 ). S se
calculeze i afieze, care este cel mai mare numr ce se obine rearanjnd corespunztor
cifrele numrului citit.
Exemplu: dac se citete N=172, numrul maxim ce se obine prin rearanjarea cifrelor, este
721.
Sursa programului:
#include<stdio.h>
#include<conio.h>
void main(void)
{
clrscr();
int nr;
int s,z,u;//sute, zeci, unitati
L
a
b
o
r
a
t
o
r

2

P
C
L
P
Instruciuni de decizie

23
printf("Numar="); scanf("%d",&nr);
u=nr%10;
z=(nr/10)%10;
s=nr/100;
//Ordonam cele 3 cifre, descrescator (s,z,u):
//(algoritm sortare prin interschimbare)
int aux;
if(s<z){//le interschimbam:
aux=s;
s=z;
z=aux;}
if(s<u){
aux=s;
s=u;
u=aux;}
if(z<u){
aux=z;
z=u;
u=aux;}
//Noul numar (cel maxim) este:
nr=100*s+10*z+u;
printf("max=%d",nr);
getch();
}

4. PROBLEME PROPUSE
1. Se citesc de la tastatur trei numere ntregi a, b, c. S se calculeze i afieze
produsul numerelor pare introduse.
2. Se citesc patru numere ntregi de la tastatur. S se afieze dac cele 4 numere pot fi
lungimile laturilor unui ptrat sau nu.
3. Se citesc trei numere ntregi a, b, c, de la tastatur. Pot fi lungimile laturilor unui
triunghi oarecare?
4. Se citesc trei numere ntregi a, b, c, de la tastatur. Pot fi lungimile laturilor unui
triunghi dreptunghic?
5. Se citesc trei numere ntregi a, b, c, de la tastatur. Pot fi lungimile laturilor unui
triunghi isoscel?
6. Se citesc de la tastatur dou numere ntregi x i y. S se afieze dac acestea sunt
soluii pentru ecuaia 5x+7y=19.
7. Se citete un numr natural de la tastatur (valoarea maxim ce se poate tasta este
valoarea maxim pentru tipul de date int: 32767). S se calculeze i afieze cte cifre conine.
Se va folosi instruciunea if multiplu.
8. Se citete un caracter de la tastatur. S se afieze dac este vocal sau nu.
9. Se citete de la tastatur un numr natural cuprins ntre 1 i 365, ce reprezint
numrul unei zile din an. S se calculeze i afieze luna din an, din care face parte ziua
respectiv. Se presupune c luna februarie are 28 de zile.
Exemplu: dac numrul tastat este 77, se va afia: Martie.
10. S se rezolve ecuaia ax+b=0, unde a i b sunt dou numere reale care se citesc de
la tastatur.
L
a
b
o
r
a
t
o
r

2

P
C
L
P
Instruciuni de decizie

24
11. Ce numr natural cuprins ntre 1 i 3 trebuie adugat la un numr natural x, citit de
la tastatur, astfel nct rezultatul sa fie divizibil cu 3 ?
12. Se citesc 4 numere ntregi a, b, c i d, de la tastatur. S se afieze dac cele 4
numere sunt n ordine strict cresctoare.

L
a
b
o
r
a
t
o
r

2

P
C
L
P

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