Sunteți pe pagina 1din 10

Universitatea Politehnica din Bucureti

Facultatea de Electronic, Telecomunicaii i


Tehnologia Informaiei

Cuprins

Programarea Calculatoarelor
(limbajul C)

5.1. Instruciunile condiionale


5.2. Structurile repetitive
5.3. Instruciunile break, continue i exit

Curs 5 Instruciunile Condiionale i


Structurile Repetitive

5.4. Probleme recapitulative

.l. Bogdan IONESCU


Prof. Drago BURILEANU
Prof. Claudius DAN
2010-2011

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

1/59

Instruciunile condiionale
> Limbajul de programare C propune urmtoarele instruciuni
i operatori condiionali:

5.1. Instruciunile condiionale

- structura if else (dac ... atunci ...),

- operatorul condiional ?: (echivalent if else),

- structura de selecie switch case (if generalizat)

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

2/59

Instruciunile condiionale (continuare)

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

Instruciunile condiionale
(continuare)

Structura if else

Structura if else (continuare)


> Permite executarea unor
instruciuni n funcie de valoarea
de adevr a unei expresii.

Sintax:
if (<expresie>)
<expresie>)
{
<secven instruciuni>;
}

Mod de execuie:

sau:
if (<expresie>)
<expresie>)
{
<secven instr. 1>;
}
else
{
<secven instr. 2>;
}

adevrat (if)

if (<expresie>)
<expresie>)
{
<secven instruciuni 1>;
}
else
{
<secven instruciuni 2>;
}

execut

{<secven
instruciuni 1>}
evaluare
condiie if
()
fals (else)

execut

{<secven
instruciuni 2>}

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

3/59

4/59

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

5/59

Instruciunile condiionale (continuare)

Instruciunile condiionale (continuare)

Structura if else (continuare)

Structura if else (continuare)

Exemplu simplu:
if (x==100)
x==100)
{
printf(x are valoarea 100);
}
else
{
printf(x este diferit de 100);
}

dac x are valoarea 100


atunci se afieaz
primul text.
n caz contrar, se
afieaz al doilea text.

Exemplul 2:
if (x>0)
x>0)
{
printf(x este pozitiv);
}
else if (x<0
(x<0)
x<0)
{
printf(x este negativ);
}
else
{
printf(x este 0);
}

dac x > 0 atunci se


afieaz primul text.

n caz contrar, se
verific dac x < 0.
dac x < 0 se afieaz
textul al doilea.

II
dac x nu este nici > 0
i nici < 0, atunci se
afieaz textul al treilea.

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

6/59

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

Instruciunile condiionale (continuare)

Instruciunile condiionale (continuare)

Structura if else (continuare)

Structura if else (continuare)


Exemplul 4:

Exemplul 3:

if (x>0) are
ca secven de
instruciuni if-ul 2

1 if (x>0)
x>0)
2

if (y==5
(y==5)
y==5)
if (z!=14
(z!=14)
z!=14)
3 printf(3 conditii adevarate);
else
printf(2 conditii adevarate);
else
printf(1 conditie adevarata);
else
printf(nici o conditie adevarata);

if (x>0)
???
x>0)
{
if (y==5
(y==5)
y==5)
if (z!=14
(z!=14)
z!=14)
printf(3 conditii adevarate);
else
printf(2 conditii adevarate);
}
else
printf(din ce if face parte?);

if (y==5) are
ca secven de
instruciuni if-ul 3

7/59

aceste instruciuni
fac parte din if (x>0)

if (y==5) nu
are else.
acest else este
al primului if.

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

8/59

Instruciunile condiionale (continuare)

9/59

Instruciunile condiionale (continuare)

Structura if else (continuare)

Operatorul condiional ?:

Observaii:
> n cazul n care dup if sau else este executat o singur
instruciune, nu este obligatorie folosirea acoladelor { }.

> Operatorul condiional reprezint o scriere prescurtat a


instruciunii if-else:
Sintax:
<(condiie)> ? <expresie_1> : <expresie_2>

if (a<10)
a<10)
a=a+1;
printf(aceasta linie nu face parte din if);

Mod de execuie:

> Convenia de evaluare a condiiilor de tip if (variabil):


if (a)
a=a+1;
else
printf(ce valoare are a ?);

10

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

(a) este adevrat dac


a != 0
(a) este fals dac
a=0

dac (condiie) este adevrat  returneaz expresie_1


dac (condiie) este fals
 returneaz expresie_2
Exemplu simplu:
x=(3>1) ? 1 : 0;

x= ???
1

x=(-6) ? 1 : 0;

11

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

10/59

x= ???
1
12

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

11/59

Instruciunile condiionale (continuare)

Instruciunile condiionale (continuare)

Operatorul condiional ?: (continuare)

Operatorul condiional ?: (continuare)

Enun: s se calculeze maximul a dou numere


ntregi x i y cu ajutorul operatorului condiional.

int main()
{
int max, x, y;

max=(x>=y) ? x : y;

cu if...

int main()
{
int max, x, y;

if (x>=y)
max=x;
else
max=y;

Enun: s se calculeze minimul a trei numere ntregi


x, y i z cu ajutorul operatorului condiional (1 linie).

int main()
{
int min,x,y,z;
expresie_2

min=((x<=y)&&(x<=z)) ? x : (((y<=x)&&(y<=z)) ? y : z));

}
dac x este minim
returnm x altfel 

dac y este minim


returnm y altfel 

altfel nseamn c
z este minim

13

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

12/59

Instruciunile condiionale (continuare)

Structura switch (continuare)

> Permite integrarea mai multor decizii ntr-o singur structur.


switch (expresie)
{
case const1:
<secven instr.1>;
break;
...
case constN:
<secven instr.N>;
break;
default: <secven instr. implicit>;
}

Mod de execuie:

evaluare
expresie

switch (expresie)
{
case const1:
<secven instr.1>;
break;
...
case constN:
<secven instr.N>;
break;
default: <secven instr. implicit>;
}

expresie==
constN

expresie==
const1

secven
instr.1

secven
instr.N

default ?

secven
instr. implicit

...
break

break

15

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

14/59

16

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

Instruciunile condiionale (continuare)

Instruciunile condiionale (continuare)

Structura switch (continuare)

Structura switch (continuare)

> Structura de selecie switch case poate fi vzut ca o


structur if-else generalizat,

Exemplu simplu:
scanf(%d,&x);
switch (x)
{
case 1:
printf(x are valoarea 1);
break;
case 2:
printf(x are valoarea 2);
break;
default:
printf(nu stiu valoare x);
}

> n funcie de valoarea unei expresii, permite alegerea dintr-o


multitudine de variante ntr-un singur nivel condiional, ceea
ce este mult mai convenabil dect scrierea unor instruciuni
if multiple,
> Limitare: valoarea expresiei trebuie s fie neaprat ntreag,
sau s poat fi convertit la o valoare ntreag,
> Limitare: constantele (const1, ..., constN) nu pot s conin
expresii sau variabile din program,
16/59

15/59

dac x are valoarea 1


se afieaz ???
dac x are valoarea 2
se afieaz ???
dac x are valoarea -3
se afieaz ???

17

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

13/59

Instruciunile condiionale (continuare)

Structura switch

Sintax:

14

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

18

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

17/59

Instruciunile condiionale (continuare)

Instruciunile condiionale (continuare)

Structura switch (continuare)

Structura switch (continuare)

Exemplu:
ce se ntmpl dac
omitem corpul unui case ?
se execut pn la prima
instruciune break.

scanf(%c,&litera);
switch (litera)
{
case a:
case A:
printf(s-a introdus litera a);
break;
exit
case :
nr_spatii++;
break;
}

Observaii:
- break este opional, poate
constitui un avantaj,
- default este opional, dar
recomandat.

Enun: se citete de la tastatur o valoare ntreag,


folosind structura switch s se realizeze un program care
spune dac numrul este divizibil cu 3 sau nu.

scanf(%d, &a);
switch (a%3==0)
{
case 1:
printf(este divizibil cu 3);
break;
case 0:
printf(nu este divizibil cu 3);
break;
}

a%3==0
 valoare 1 (adevrat)
dac se mparte exact,
valoare 0 (fals)
dac nu se mparte exact

19

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

18/59

20

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

19/59

Structurile repetitive
> Sunt motivate de necesitatea de execuie repetitiv (n bucl)
a anumitor instruciuni sau pri din program. Aceast execuie
este reglementat de utilizator.
> Constituie baza unui limbaj de programare. Aproape toate
problemele de calcul sunt rezolvate folosind astfel de structuri.

5.2. Structurile repetitive

> Limbajul de programare C propune urmtoarele structuri


repetitive (cicluri):
- ciclul cu test final do while,
- ciclul cu test iniial while,
- ciclul cu contor for.
21

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

20/59

Structurile repetitive (continuare)

Structurile repetitive (continuare)

Structura do while

Structura do while (continuare)


Mod de execuie:

> execut ct timp:


Sintax:
do
{
<secven instruciuni>;
} while (<condiie>);

22

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

21/59

do
{
<secven instruciuni>;
} while (<condiie>);

Exemplu:
do
{
scanf(%d,&numar);
} while (numar<10);

do

corpul structurii este


specificat ntre { i }

secven
instruciuni

condiia de execuie este


specificat ntre ( i ),
i se ncheie cu ;

while
evaluare
condiie ()

> Permite executarea repetitiv a mai multor instruciuni ct


timp o anumit condiie este ndeplinit (adevrat).

fals

Execuie:
adevrat

3 (enter) (3<10 da)


5 (enter) (5<10 da)
11 (enter) (11<10 nu)

23

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

22/59

stop
24

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

23/59

Structurile repetitive (continuare)

Structurile repetitive (continuare)

Structura do while (continuare)


Exemplu:
int i=0;
de cte ori se execut
do
aceast bucl ???
10 ori
{
i++;
} while (i<10);
de cte ori se execut
Exemplu:

Structura do while (continuare)

aceast bucl ???


de multe multe ori

int x;
Atenie: nu modificai involuntar
do
condiia de oprire !
{
scanf(%d,&x);
if (x=0) printf(Atentie numarul este 0);
} while (x<10);

Enun: folosind structura do while s se realizeze un


program care permite ghicirea unui anumit numr ascuns
ntre 1 i 999. Dac utilizatorul introduce valoarea 0 stop.

Constante program:
int numar_ascuns=123;
Variabile de intrare:
int numar_introdus;
Variabile de ieire: nu
am omis: s definim un
indicator, 1 gsit, 0 abandon

Structur program:
- informare utilizator condiii
- citire repetitiv
- verificare numr introdus
 da, modificare indicator
 nu, furnizare indicaii (<,>)
- condiie de ncheiere
- verificare cauz ncheiere

25

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

24/59

Structura do while (continuare)


int numar_ascuns=123, numar_introdus, flag=0;
printf(Ghicire numar intre 1 si 999\n\n);
do
{
printf(Introduceti un intreg); scanf(%d, &numar_introdus);
if (numar_introdus==numar_ascuns)
{
printf(Numar ghicit, %d este numarul cautat, numar_introdus);
flag=1;
}
else if (numar_introdus>numar_ascuns)
printf(Prea mare\n);
else printf(Prea mic\n);
} while (!flag && numar_introdus!=0);
if (!flag)
printf(Ati abandonat cautarea);

26

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

Structurile repetitive (continuare)


Structura do while (continuare)
Enun: folosind structura do while s se afieze pe
ecran toate numerele ntregi cuprinse ntre dou
numere ntregi pozitive b i a introduse de la tastatur
(b>a).
Structur program:
Variabile de intrare:
- citire a i b,
unsigned int a,b;
- definire contor i,
Variabile de ieire:
- afiare repetitiv a
contorului pentru valori ntre
int i;
b i a,

27

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

26/59

28

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

Structura while

Enun: folosind structura do while s se afieze pe


ecran toate numerele ntregi cuprinse ntre dou
numere ntregi pozitive b i a introduse de la tastatur
(b>a).

> ct timp:
Sintax:
while (<condiie>)
{
<secven instruciuni>;
}

int a, b, i;
printf(a=); scanf(%d,&a);
printf(b=); scanf(%d,&b);
i=b;
do
{
printf(%d ,i--);
} while (i>=a);

condiia de execuie este


specificat ntre ( i ),
corpul structurii este
specificat ntre { i }

> Ct timp o anumit condiie este ndeplinit (adevrat) se


execut o serie de instruciuni.
29

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

27/59

Structurile repetitive (continuare)

Structura do while (continuare)

25/59

28/59

30

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

29/59

Structurile repetitive (continuare)

while (<condiie>)
{
<secven instruciuni>;
}

Structura while (continuare)


Mod de execuie:

Exemplu:
char c= ;
while (c!=x)
{
scanf(%c,&c);
}

while
evaluare
condiie ()
adevrat
fals

secven
instruciuni

Execuie:
a (enter) (a!=x da)
y (enter) (y!=x da)
x (enter) (x!=x nu)

stop

Structurile repetitive (continuare)


Structura while (continuare)
Exemplu:
int x=9;
while (x--)
{
printf(Un mesaj insistent);
}

- se evalueaz condiie
while (x),
- se decrementeaz
valoare x
de cte ori se afieaz
acest mesaj ???
9 ori

Exemplu:
int x=9;
dar acesta ???
8 ori
while (--x)
{
printf(Un mesaj mai puin insistent ?);
}

31

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

30/59

Ce face funcia getche ?


char ch;
int s=0;
while ((ch=getche())!=x)
{
s=s+ch;
}

31/59

Structurile repetitive (continuare)


Structura while (continuare)

Structurile repetitive (continuare)


Structura while (continuare)

Exemplu:

funcia getche() citete un


caracter de la tastatur
(e echo, afiare caracter
pe ecran)

Exemplu:

32

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

Cum se execut ?
-mai nti ch=getche(),
-se evalueaz ch!=x,
-dac da, se execut
instruciuni.

int x=30;
while (x-=5);
printf(%d,x);

Ce valori sunt afiate pe ecran? 0


Greeal frecvent: ; ca la do while,
rezultat: bucla se termin la ;
Observaie: { i } nu sunt obligatorii
pentru o singur instruciune.

Exemplu corect:
int x=30;
while (x-=5)
printf(%d,x);

Ce valori sunt afiate pe ecran?


25 20 15 10 5

33

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

32/59

Structurile repetitive (continuare)


Structura while (continuare)

34

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

Structura while (continuare)

Enun: s se realizeze un program care permite


P citirea a dou numere ntregi a i b. Folosind structura
while, calculai media aritmetic a tuturor numerelor
ntregi dintre a i 0 ce sunt divizibile cu b
(verificai c a>10).
Structur program:
Variabile de intrare/lucru:
- citesc repetitiv pe a pn
cnd a>10,
int a,b;
int numar_valori;
- parcurg numerele de la a la
int contor;
0 i le nsumez pe cele modulo b
Variabile de ieire:
- numr cte sunt i la sfrit
calculez media.
float medie_aritmetica;

int a=0, b, contor, numar_valori=0;


float medie_aritmetica=0.0;
printf(b=); scanf(%d, &b);
while (a<=10)
{
printf(a=); scanf(%d, &a);
}
contor=a;
// ncep parcurgerea numerelor de la a la 0
while (contor>0)
{
if ((contor%b)==0)
{
medie_aritmetica+=contor; // adaug la media aritmetic valorile
numar_valori++;
// numr cte valori am adugat
}
contor--;
// m ndrept spre 0 cu pas 1
}
printf(Media este:%f, (float)medie_aritmetica/numar_valori);

35

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

33/59

34/59

36

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

35/59

Structurile repetitive (continuare)

Structurile repetitive (continuare)

Structura for (continuare)

Structura for

for ( <init.contor> ; <cond.exec.> ; <modif.contor>)


{
<secven instruciuni>;
}

> pentru:
Sintax:
for ( <init.contor> ; <cond.exec.> ; <modif.contor>)
{
<secven instruciuni>;
}

Semnificaie parametri:
<init.contor> : conine o expresie n care se iniializeaz
contorul ce va monitoriza numrul de execuii al buclei for.

> Permite executarea iterativ a unei secvene de instruciuni.


Numrul de execuii este contabilizat de un contor. Acesta
poate fi folosit n calcule pentru a identifica iteraia curent.

<cond.contor> : conine o condiie prin care se specific


indirect de cte ori se va executa corpul instruciunii for i
anume: ct timp <cond.exec.> este adevrat.
<modif.contor> : specific modul n care va fi schimbat
valoarea contorului la fiecare iteraie.

37

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

36/59

Structurile repetitive (continuare)


Structura for (continuare) for (<init.contor> ; <cond.exec.> ;
{

> mod de execuie:

iniializare
contor

<modif.contor>)

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

Structurile repetitive (continuare)


Structura for (continuare)
> Dup modul de execuie, structura for este similar unei
structuri while (ct timp execut) deoarece condiia de oprire
este verificat nainte de executie.

<secven instruciuni>;

Exemplu simplu:
evaluare
condiie
exec.

fals

Execuie:

int x;
for (x=2 ; x>0 ; x--)
{
printf(x are valoarea:%d\n,x);
}

adevrat

secven
instruciuni

modificare
contor

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

38/59

Structurile repetitive (continuare)


Structura for (continuare)

> Specificarea expresiilor care definesc bucla for este foarte


flexibil dup cum se poate vedea din exemplele urmtoare:

Exemplu:

for (x=0 ; ((x>3)&&(x<9)) ; x++)


printf(x are valoarea:%d\n,x);
Exemplu:

condiia de oprire poate fi


compus.
care este efectul acestui
for ?doar x=0

for (x=0,y=4 ; ((x>=0)&&(x<3)) ; x++, y+=2)


printf(x=%d, y=%d\n,x,y);
la specificarea expresiilor
se poate folosi operatorul ,
Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

Execuie:

for (x=0,y=4,z=4000 ; z ; z/=10)


printf(%d,%d,%d\n,x, y, z);
Execuie:
>x=0, y=4, z=4000
>x=0, y=4, z=400
>x=0, y=4, z=40
>x=0, y=4, z=4

>x=0, y=4
>x=1, y=6
>x=2, y=8
stop

x=2
2>0 (da)
>x are valoarea 2
x=2-1
2-1>0 (da)
>x are valoarea 1
x=2-1-1
2-1-1>0 (nu) stop

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

Structurile repetitive (continuare)


Structura for (continuare)

Exemplu:

37/59

stop

39/59

care este efectul acestui


for ?

Exemplu:
???
for (x=0 ; x<3 ; x++)
{
for (y=0 ; y<4 ; y++)
printf(a );
Execuie:
printf(\n);
>a a a a
}
>a a a a
>a a a a

40/59

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

41/59

Structurile repetitive (continuare)

Structurile repetitive (continuare)

Structura for (continuare)

Structura for (continuare)

> Cteva observaii:


structura for este folosit de regul cnd se poate estima
numrul de iteraii,
de asemenea, structura for se folosete de regul atunci
cnd n calcul este necesar cunoaterea interaiei curente
(valoarea contorului),
> Cazuri particulare:

Enun: se introduc de la tastatur trei numere


ntregi: a, b, m (b>a). S se realizeze un program care
calculeaz produsul numerelor ntregi divizibile cu m
din intervalul [a;b] folosind structura for.

Variabile de intrare/lucru:
int a,b,m;
int i;

for ( ; i<10 ; i++)

s-a omis iniializarea contorului, ce


se ntmpl n acest caz ?
i pornete de la val. din program

for ( ; ; )

sau toate expresiile, ce se ntmpl


n acest caz ?
se execut la infinit secvena de instr.

Structur program:
- citesc a, b i m,
- parcurg numerele de la a la
b i le nmulesc pe cele
modulo m,

Variabile de ieire:
int produs;

43

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

42/59

Structurile repetitive (continuare)


Structura for (continuare)

44

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

43/59

Structurile repetitive (continuare)


Structura for (continuare)

int a=1, b=0, m, i;


int produs=1;
while (a>b)
{
printf(Introduceti a si b: );
scanf(%d %d, &a, &b);
}

Enun: s se calculeze folosind structura for


variana numerelor ntregi cuprinse ntre numerele
b
a i b (b>a).
1

2 =

printf(Introduceti divizorul: );
scanf(%d, &m);
for (i=a; i<=b; i++) // parcurgerea numerelor de la a la b
if ((i%m)==0)
produs=produs*i;
printf(Produsul este:%d, produs);

(i )

b a + 1 i =a

medie valori i

Variabile de intrare/lucru:
int a,b;
int i;
float medie;

Structur program:
- citesc a i b,
- parcurg numerele de la a la
b i calculez media,

Variabile de ieire:
float varianta;

- parcurg numerele de la a la
b i calculez varianta,
46

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

Structurile repetitive (continuare)


Structura for (continuare)

44/59

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

45/59

#include<math.h>

int a, b, i, dim;
float medie=0.0, varianta=0.0;
// citire date
printf(Introduceti a si b: ); scanf(%d %d, &a, &b);
dim=b-a+1;

5.3. Instruciunile break,


continue i exit

// calcul medie
for (i=a; i<=b; i++)
medie+=i;
medie=medie/dim;
// calcul varianta
for (i=a; i<=b; i++)
varianta+=pow(i-medie,2); //ridicare la puterea 2
varianta=varianta/dim;
printf(Varianta este: %f,varianta);
47

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

46/59

48

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

47/59

Instruciunile break, continue i exit

Instruciunea break

> Introducerea structurilor repetitive, datorit executiei


automate n bucl, a instruciunilor, a ridicat problema
controlrii n totalitate de ctre programator a execuiei
acestora.

break: nseamn ntrerupere, determin ntreruperea unui


ciclu (do while, while, for) sau a seleciei (switch), chiar dac
condiia de terminare nu este ndeplinit.
Sintax:

 o condiie de oprire scris eronat conduce la


repetarea infinit a instruciunilor din bucl.

break;

> Pentru a controla execuia, limbajul C pune la dispoziia


programatorului trei comenzi speciale, i anume:

- se apeleaz ca o procedur,
nu are parametri.

Exemplu:
for ( ; ; )
{
scanf(%d,&x);
if (x>10) break;
}

instruciunea break
instruciunea continue
funcia exit

acest for se execut la infinit.


ciclul se va ncheia atunci cnd
valoarea introdus este >10
datorit lui break.

49

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

48/59

de cte ori apare mesajul pe


ecran dac nu ar fi existat
condiia if ???
4 x 10 = 40 de ori

for (i=0; i<4; i++ )


for (j=0; j<10; j++ )
{
dar cu condiia if ???
if (j==3)
4 x 3 = 12 de ori
break;
printf(De cate ori apare mesajul);
}

 efectul const n trecerea forat la nceputul iteraiei


urmtoare.
Sintax:
- se apeleaz ca o procedur,
continue; nu are parametri.
Exemplu:
for ( i=0 ; i<10 ; i++ )
{
if (i==5) continue;
printf(%d,i);
}

> Observaie: instruciunea break nu permite ieirea din


toate structurile repetitive din program, ci doar din ultima
structur repetitiv ce o conine.

ce valori sunt afiate pe ecran


???
0 1 2 3 4 6 7 8 9

51

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

50/59

ce face acest program ???


cum se execut ???

int a, b, i;
printf(Introduceti doua numere);
scanf(%d %d,&a, &b);
i=a;

do
{
if (i%2!=0)
continue;
printf(%d este divizibil cu 2\n,i);
} while (i++<b);
printf(i=%d,i);

52

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

51/59

Instruciunea exit
exit: este o funcie din biblioteca stdlib.h ce determin
ncheierea execuiei programului curent (funcie, procedur)
i returnarea unui cod de eroare.

Instruciunea continue (continuare)


Exemplu:

49/59

Instruciunea continue
continue: determin programul s abandoneze executarea
instruciunilor rmase din bucl pentru iteraia curent, ca i
cum s-ar fi ajuns la evaluarea condiiei de repetare,

Instruciunea break (continuare)


Exemplu:

50

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

Prototipul funciei:
Execuie:

void exit(int codEroare);

>Introduceti ...
>3 5
>i=3
> continue (3<5, i=3+1)
> 4 este divizibil cu 2
> (4<5 da, i=4+1)
> continue (5<5 nu, i++)
stop while
> i=6

Exemplu:

programul citete de la tastatur

valori pn la introducerea valorii


int main()
{
13, cnd execuia se ncheie cu
int i;
codul 1
while (1)
{ printf(Introduceti o valoare care sa-mi placa); scanf(%d,&i);
if (i==13)
exit(1); } // raspuns gresit
}

53

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

52/59

54

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

53/59

Problema 1

Enun: scriei un program care citete un numr


natural n i care afieaz valoarea expresiei:

s = 0!+1!+2!+... + i!+... + n!

5.4. Probleme recapitulative

indicaie: se folosete structura for.


Variabile de intrare/lucru:
int n;
int i, j;
int tmp;

Structur program:
- citesc n i verific c n>0
- parcurg numerele de la 0 la n,

Variabile de ieire:
int s;

- calculez factorialul i adaug


valoarea la suma s,

55

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

54/59

Problema 1 - rezolvare

56

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

Problema 2

int i, j, n; double tmp, s=1;


// citire date
do
{
printf(Introduceti n: ); scanf(%d, &n);
} while (n<0);

// calcul suma factoriali


for (i=1; i<=n; i++)
{
tmp=1;
for (j=1; j<=i; j++)
tmp=tmp*j;
s=s+tmp;
}

Enun: se cunosc valorile funciei x2 pentru x n


intervalul [-a;a], unde a este o valoare natural introdus
de la tastatur. S se parcurg aceste valori cu un pas
de analiz p (introdus de la tastatur). Pentru fiecare
valoare parcurs s se calculeze media valorilor din
fereastra w (introdus de la tastatur).

valorile lui x sunt:


[ -a
-a+p
-a+2*p
valorile lui x2 sunt:
[(-a) 2 (-a+p) 2 (-a+2*p)2

-a+i*p

(-a+i*p)2

a-p

(a-p)2

fereastra w = w valori inclusiv valoarea curent

printf(Suma s este: %e,s);


57

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

55/59

56/59

58

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

57/59

Problema 2 - rezolvare
int a, w, nr;
float p, i, contor, valoare, medie;
printf("a="); scanf
scanf("%d",&a);
printf
printf("pas=");
printf
scanf("%f",&p);
scanf
printf("fereastra
w="); scanf("%d",
&w);
printf
scan
for (contor=-a; contor<=a ; contor+=p)
{ printf("%.2f
", contor*contor); //afisare valoare x*x
printf
medie=0.0; nr=0;
//initializare medie si numar valori

Sfritul Cursului 5

for (i=contor; i<=a ; i+=p)


//parcurg fereastra de w valori
if (i<(contor+w*p))
// daca sunt in fereastra calculez medie
{
medie+=i*i;
nr++;
// numar valorile
}
else
break;
medie=medie/nr;
printf("media
este: %.2f\n",medie); }
printf
59

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

58/59

60

Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011

59/59