programarea calculatoarelor m5
Post on 09-Apr-2018
260 Views
Preview:
TRANSCRIPT
-
8/8/2019 Programarea Calculatoarelor M5
1/10
Programarea Calculatoarelor(limbajul C)
Curs 5 Instruciunile Condiionale iStructurile Repetitive
Universitatea Politehnica din BucuretiFacultatea de Electronic, Telecomunicaii i
Tehnologia Informaiei
.l. Bogdan IONESCUProf. Drago BURILEANUProf. Claudius DAN
2010-20112
Cuprins
5.1. Instruciunile condiionale
5.2. Structurile repetitive
5.3. Instruciunile break, continue i exit
5.4. Probleme recapitulative
Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 1/59
3Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 2/59
5.1. Instruciunile condiionale
4Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 3/59
> Limbajul de programare C propune urmtoarele instruciunii operatori condiionali:
- structura if else (dac ... atunci ...),
- operatorul condiional ?: (echivalent if else),
- structura de selecie switch case (if generalizat)
Instruciunile condiionale
5Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 4/59
Instruciunile condiionale (continuare)
Structura if else
ifififif(((())))
{{{{
;}}}}
Sintax:
ifififif(((())))
{{{{;
}}}}
elseelseelseelse{{{{
;}}}}
sau:
> Permite executarea unorinstruciuni n funcie de valoareade adevr a unei expresii.
6Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 5/59
Instruciunile condiionale
(continuare)
Structura if else (continuare)
Mod de execuie:
ifififif(((())))
{{{{;
}}}}
elseelseelseelse
{{{{
;
}}}}
{}
execut
{}
execut
evaluarecondiie if
()
adevrat (if)
fals (else)
-
8/8/2019 Programarea Calculatoarelor M5
2/10
7Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 6/59
Instruciunile condiionale (continuare)
Structura if else (continuare)
Exemplu simplu:
ifififif((((x==100x==100x==100x==100))))
{{{{
printf(x are valoarea 100);}}}}
elseelseelseelse
{{{{
printf(x este diferit de 100);
}}}}
dac x are valoarea 100atunci se afieazprimul text.
n caz contrar, seafieaz al doilea text.
8Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 7/59
Instruciunile condiionale (continuare)
Structura if else (continuare)
Exemplul 2:
ifififif((((x>0x>0x>0x>0))))
{{{{ printf(x este pozitiv);}}}}
else if (else if (else if (else if (x0x>0x>0))))
if (if (if (if (y==5y==5y==5y==5))))
if (if (if (if (z!=14z!=14z!=14z!=14))))
printf(3 conditii adevarate);elseelseelseelse
printf(2 conditii adevarate);
elseelseelseelseprintf(1 conditie adevarata);
elseelseelseelse
printf(nici o conditie adevarata);
if (x>0) areca secven de
instruciuni if-ul 21
2
3
if (y==5) areca secven de
instruciuni if-ul 3
10Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 9/59
Instruciunile condiionale (continuare)
Structura if else (continuare)
Exemplul 4:
ifififif((((x>0x>0x>0x>0)))){{{{
if (if (if (if (y==5y==5y==5y==5))))
if (if (if (if (z!=14z!=14z!=14z!=14))))
printf(3 conditii adevarate);
elseelseelseelse
printf(2 conditii adevarate);
}}}}elseelseelseelse
printf(din ce if face parte?);
aceste instruciunifac parte din if (x>0)
acest else este
al primului if.
if (y==5) nuare else.
???
11Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 10/59
Structura if else (continuare)
Instruciunile condiionale (continuare)
Observaii:
> n cazul n care dup if sau else este executat o singurinstruciune, nu este obligatorie folosirea acoladelor { }.
ifififif((((a
-
8/8/2019 Programarea Calculatoarelor M5
3/10
13Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 12/59
Instruciunile condiionale (continuare)
Operatorul condiional ?: (continuare)
PEnun: s se calculeze maximul a dou numerentregi x i y cu ajutorul operatorului condiional.
int main(){
int max, x, y;max=(x>=y) ? x : y;
}
int main(){
int max, x, y;if(x>=y)max=x;
elsemax=y;
}
cu if...
14Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 13/59
Instruciunile condiionale (continuare)
Operatorul condiional ?: (continuare)
PEnun: s se calculeze minimul a trei numere ntregix, y i z cu ajutorul operatorului condiional (1 linie).
int main(){int min,x,y,z;min=((x Limitare: valoarea expresiei trebuie s fie neaprat ntreag,
sau s poat fi convertit la o valoare ntreag,
Instruciunile condiionale (continuare)
Structura switch (continuare)
> Limitare: constantele (const1, ..., constN) nu pot s coninexpresii sau variabile din program,
18Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 17/59
Instruciunile condiionale (continuare)
Structura switch (continuare)
Exemplu simplu:
scanf(%d,&x);switch (xxxx){
case 1:printf(x are valoarea 1);break;
case 2:printf(x are valoarea 2);break;
default:printf(nu stiu valoare x);
}
dac x are valoarea 1se afieaz ???
dac x are valoarea 2se afieaz ???
dac x are valoarea -3se afieaz ???
-
8/8/2019 Programarea Calculatoarelor M5
4/10
19Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 18/59
Instruciunile condiionale (continuare)
Structura switch (continuare)
Exemplu:
scanf(%c,&litera);
switch (literaliteraliteralitera){
case a:case A:printf(s-a introdus litera a);break;
case :nr_spatii++;break;
}
ce se ntmpl dac
omitem corpul unui case ?se execut pn la primainstruciune break.
Observaii:- break este opional, poateconstitui un avantaj,- default este opional, darrecomandat.
exit
20Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 19/59
Instruciunile condiionale (continuare)
Structura switch (continuare)
PEnun: 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
21Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 20/59
5.2. Structurile repetitive
22Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 21/59
> Limbajul de programare C propune urmtoarele structurirepetitive (cicluri):
- ciclul cu test iniial while,
- ciclul cu test final do while,
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 toateproblemele de calcul sunt rezolvate folosind astfel de structuri.
- ciclul cu contorfor.
23Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 22/59
Structurile repetitive (continuare)
Structura do while
> execut ct timp:
do{{{{
;}}}} while ();
Sintax:
> Permite executarea repetitiv a mai multor instruciuni cttimp o anumit condiie este ndeplinit (adevrat).
corpul structurii estespecificat ntre { i }
condiia de execuie estespecificat ntre ( i ),i se ncheie cu ;
24Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 23/59
Structurile repetitive (continuare)
Structura do while (continuare)
do
{{{{;
}}}} while ();Mod de execuie:
secveninstruciuni
fals
adevrat
evaluarecondiie ()
do
while
Exemplu:
do{
scanf(%d,&numar);} while (numar
-
8/8/2019 Programarea Calculatoarelor M5
5/10
25Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 24/59
Structurile repetitive (continuare)
Structura do while (continuare)
int i=0;do
{{{{i++;
}}}} while (ia).
Variabile de intrare:
unsigned int a,b;
Variabile de ieire:
int i;
Structur program:
- citire a i b,
- definire contor i,
- afiare repetitiv acontorului pentru valori ntreb i a,
29Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 28/59
Structura do while (continuare)
int a, b, i;printf(a=); scanf(%d,&a);printf(b=); scanf(%d,&b);i=b;do{printf(%d ,i--);} while (i>=a);
PEnun: folosind structura do while s se afieze peecran toate numerele ntregi cuprinse ntre dounumere ntregi pozitive b i a introduse de la tastatur(b>a).
30Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 29/59
Structurile repetitive (continuare)
Structura while
> ct timp:
> Ct timp o anumit condiie este ndeplinit (adevrat) seexecut o serie de instruciuni.
while (){{{{
;
}}}}
Sintax: condiia de execuie estespecificat ntre ( i ),
corpul structurii estespecificat ntre { i }
-
8/8/2019 Programarea Calculatoarelor M5
6/10
31Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 30/59
Structurile repetitive (continuare)
Structura while (continuare)
Mod de execuie:
while (){{{{
;
}}}}
adevrat
falssecven
instruciuni
evaluarecondiie ()
while
Exemplu:
charc= ;while (c!=x){
scanf(%c,&c);}
Execuie:
a (enter) (a!=x da)
y (enter) (y!=x da)
x (enter) (x!=x nu) stop
32Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 31/59
Structurile repetitive (continuare)
Structura while (continuare)
int x=9;
while (x--){{{{printf(Un mesaj insistent);
}}}}
Exemplu: - se evalueaz condiiewhile (x),
- se decrementeazvaloare x
int x=9;while (--x){{{{
printf(Un mesaj mai puin insistent ?);}}}}
Exemplu:
de cte ori se afieazacest mesaj ???
dar acesta ???
9 ori
8 ori
33Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 32/59
Structurile repetitive (continuare)
Structura while (continuare)
charch;int s=0;while ((ch=getche())!=x){{{{
s=s+ch;}}}}
Exemplu: funcia getche() citete uncaracter de la tastatur(e echo, afiare caracterpe ecran)
-mai nti ch=getche(),-se evalueaz ch!=x,-dac da, se executinstruciuni.
Ce face funcia getche ?
Cum se execut ?
34Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 33/59
Structurile repetitive (continuare)
Structura while (continuare)
int x=30;while (x-=5);printf(%d,x);
Exemplu:Ce valori sunt afiate pe ecran? 0
Greeal frecvent: ; ca la do while,rezultat: bucla se termin la ;
Observaie: { i } nu sunt obligatoriipentru o singur instruciune.
int x=30;while (x-=5)printf(%d,x);
Exemplu corect:
Ce valori sunt afiate pe ecran?
25 20 15 10 5
35Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 34/59
Structurile repetitive (continuare)
Structura while (continuare)
PEnun: s se realizeze un program care permitecitirea a dou numere ntregi a i b. Folosind structurawhile, calculai media aritmetic a tuturor numerelorntregi dintre a i 0 ce sunt divizibile cu b(verificai c a>10).
Variabile de intrare/lucru:
int a,b;
Variabile de ieire:
float medie_aritmetica;
Structur program:
- citesc repetitiv pe a pncnd a>10,- parcurg numerele de la a la0 i le nsumez pe cele modulo b- numr cte sunt i la sfritcalculez media.
int numar_valori;int contor;
36Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 35/59
Structura while (continuare)
int a=0, b, contor, numar_valori=0;float medie_aritmetica=0.0;printf(b=); scanf(%d, &b);while (a0){
if((contor%b)==0){
medie_aritmetica+=contor; // adaug la media aritmetic valorilenumar_valori++; // numr cte valori am adugat
}contor--; // m ndrept spre 0 cu pas 1
}printf(Media este:%f, (float)medie_aritmetica/numar_valori);
-
8/8/2019 Programarea Calculatoarelor M5
7/10
37Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 36/59
Structurile repetitive (continuare)
Structura for
> pentru:
for ( ; ; ){{{{
;
}}}}
Sintax:
> Permite executarea iterativ a unei secvene de instruciuni.Numrul de execuii este contabilizat de un contor. Acestapoate fi folosit n calcule pentru a identifica iteraia curent.
Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 37/59
Structurile repetitive (continuare)
Structura for (continuare)
for ( ; ; ){{{{
;
}}}}
Semnificaie parametri:
: conine o expresie n care se iniializeazcontorul ce va monitoriza numrul de execuii al buclei for.
: conine o condiie prin care se specificindirect de cte ori se va executa corpul instruciunii for ianume: ct timp este adevrat.
: specific modul n care va fi schimbatvaloarea contorului la fiecare iteraie.
Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 38/59
Structurile repetitive (continuare)
Structura for (continuare)
> mod de execuie:
adevrat
fals secveninstruciuni
iniializarecontor
modificarecontor
evaluarecondiieexec.
for ( ; ;)
{{{{
;
}}}}
Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 39/59
Structurile repetitive (continuare)
Structura for (continuare)
> Dup modul de execuie, structura foreste similar uneistructuri while (ct timp execut) deoarece condiia de oprireeste verificat nainte de executie.
int x;for (x=2 ; x>0 ; x--){{{{
printf(x are valoarea:%d\n,x);}}}}
Exemplu simplu: Execuie:
x=2
2>0 (da)>x are valoarea 2
x=2-12-1>0 (da)
>x are valoarea 1
x=2-1-1
2-1-1>0 (nu) stop
Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 40/59
Structurile repetitive (continuare)
Structura for (continuare)> Specificarea expresiilor care definesc bucla foreste foarteflexibil dup cum se poate vedea din exemplele urmtoare:
for (x=0 ; ((x>3)&&(x=0)&&(xx=0, y=4>x=1, y=6
>x=2, y=8stop
doar x=0
Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 41/59
Structurile repetitive (continuare)
Structura for (continuare)
for (x=0,y=4,z=4000 ; z ; z/=10)printf(%d,%d,%d\n,x, y, z);
Exemplu: care este efectul acestuifor ?
Execuie:
>x=0, y=4, z=4000
>x=0, y=4, z=400
>x=0, y=4, z=40
stop
>x=0, y=4, z=4
for (x=0 ; xa a a a>a a a a
-
8/8/2019 Programarea Calculatoarelor M5
8/10
43Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 42/59
Structurile repetitive (continuare)
Structura for (continuare)
> Cteva observaii:
structura foreste folosit de regul cnd se poate estimanumrul de iteraii,
de asemenea, structura forse folosete de regul atuncicnd n calcul este necesar cunoaterea interaiei curente(valoarea contorului),
> Cazuri particulare:
for ( ; ia). S se realizeze un program care
calculeaz produsul numerelor ntregi divizibile cu mdin intervalul [a;b] folosind structura for.
Variabile de intrare/lucru:
int a,b,m;
Variabile de ieire:
int produs;
int i;
Structur program:
- citesc a, b i m,
- parcurg numerele de la a la
b i le nmulesc pe celemodulo m,
Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 44/59
int a=1, b=0, m, i;int produs=1;while (a>b){printf(Introduceti a si b: );scanf(%d %d, &a, &b);
}
printf(Introduceti divizorul: );
scanf(%d, &m);for(i=a; ia).
=
+
=b
ai
ii
ab
22)(
1
1
medie valori i
Variabile de intrare/lucru:
int a,b;
Variabile de ieire:
float varianta;
int i;float medie;
Structur program:
- citesc a i b,
- parcurg numerele de la a lab i calculez media,
- parcurg numerele de la a lab i calculez varianta,
47Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 46/59
int a, b, i, dim;float medie=0.0, varianta=0.0;// citire dateprintf(Introduceti a si b: ); scanf(%d %d, &a, &b);dim=b-a+1;
// calcul mediefor(i=a; i
-
8/8/2019 Programarea Calculatoarelor M5
9/10
49Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 48/59
> Introducerea structurilor repetitive, datorit executieiautomate n bucl, a instruciunilor, a ridicat problemacontrolrii n totalitate de ctre programator a execuieiacestora.
Instruciunile break, continue i exit
o condiie de oprire scris eronat conduce larepetarea infinit a instruciunilor din bucl.
> Pentru a controla execuia, limbajul C pune la dispoziiaprogramatorului trei comenzi speciale, i anume:
instruciunea break
instruciunea continue
funcia exit
50Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 49/59
Instruciunea break
break: nseamn ntrerupere, determin ntreruperea unuiciclu (do while, while, for) sau a seleciei (switch), chiar daccondiia de terminare nu este ndeplinit.
break;
Sintax:- se apeleaz ca o procedur,nu are parametri.
for ( ; ; ){scanf(%d,&x);if(x>10) break;
}
Exemplu: acest for se execut la infinit.
ciclul se va ncheia atunci cndvaloarea introdus este >10datorit lui break.
for (i=0; ii=3
stop while
> continue (3 4 este divizibil cu 2
> (4 continue (5 i=6
54Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 53/59
Instruciunea exit
exit: este o funcie din biblioteca stdlib.h ce determinncheierea execuiei programului curent (funcie, procedur)i returnarea unui cod de eroare.
void exit(int codEroare);
Prototipul funciei:
int main(){int i;while (1){ printf(Introduceti o valoare care sa-mi placa); scanf(%d,&i);
if(i==13)exit(1); } // raspuns gresit
}
Exemplu: programul citete de la tastaturvalori pn la introducerea valorii13, cnd execuia se ncheie cucodul 1
-
8/8/2019 Programarea Calculatoarelor M5
10/10
55Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 54/59
5.4. Probleme recapitulative
56Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 55/59
Problema 1
PEnun: scriei un program care citete un numrnatural n i care afieaz valoarea expresiei:
indicaie: se folosete structura for.
!...!...!2!1!0 nis ++++++=
Variabile de intrare/lucru:
int n;
Variabile de ieire:
int s;
int i, j;
Structur program:
- citesc n i verific c n>0
- parcurg numerele de la 0 la n,
- calculez factorialul i adaugvaloarea la suma s,
int tmp;
57Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 56/59
Problema 1 - rezolvare
int i, j, n; double tmp, s=1;// citire datedo{printf(Introduceti n: ); scanf(%d, &n);
} while (n
top related