Documente Academic
Documente Profesional
Documente Cultură
Structuri de control
5.
!nstruc"iunea vid
Se reduce la punct i virgul ##$. %a nu are nici un efect. &nstruciunea vid se utilizeaz n construcii care cer prezena unei instruciuni dar nu trebuie s se execute nimic n punctul respectiv. !stfel de situaii apar frecvent n cadrul structurii alternative i repetitive aa cum se va vedea n continuare.
Clasa a IX-a
Structuri de control
5.0 !nstruc"iunea if
!re urmtoarele formate " format1 " if'expresie* instruc"iune# format2" if'expresie* instruc"iune # else instruc"iune$# La nt*lnirea instruciunii if nt*i se evalueaz expresia din paranteze. !poi n cazul formatului + dac expresia are valoarea diferit de zero #adic true$ se execut instruc"iune altfel se trece n secven la instruciunea urmtoare instruciunii if. (n cazul formatului 1 dac expresia are o valoare diferit de zero atunci se execut instruc"iune i apoi se trece n secven la instruciunea aflat dup instruc"iune$ altfel #condiia este zero adic false$ se execut instruc"iune$. (n mod normal n ambele formate dup execuia instruciunii if se ajunge la instruciunea urmtoare ei. Cu toate acestea este posibil i o alt situaie c*nd instruciunile din compunerea lui if definesc ele nsele un alt mod de continuare a execuiei programului. 'eoarece o instruciune compus este considerat ca fiind un caz particular de instruciune rezult c instruciunile din compunerea lui if pot fi instruciuni compuse. 'e asemenea instruciunile respective pot fi c2iar instruciuni if. (n acest caz se spune c instruciunile if sunt imbricate. Exemplul 1: Se d funcia " %/,x$)$x- 1 pentru x21 i %/5x) 1 pentru x3/1. S se scrie un program care citete valoarea lui x i afieaz valoarea lui %. #include<iostrea !h" #oid ain() $ .loat x%y; cin""x; i.(x"0) y=/(x(x+0(x-10; else y=1(x+10; cout<<2x=2<<x<<'3t'<<'y='<<y<<endl; Exemplul 2: S se scrie un program care citete valoarea lui x calculeaz i afieaz valoarea lui % definit ca mai jos " %/0x,)5x$-$x) & pentru x31 %/ 11 & pentru x/1 %/$x$)4x& pentru x21 #include<iostrea !h" #oid ain() $ .loat x%y%a; cout<<'x=';
Clasa a IX-a
Structuri de control
Exemplul 3: S se scrie un program care citete valorile variabilelor reale a i b calculeaz rdcina ecuaiei " ax)b/1 i afieaz rezultatul. #include<iostrea !h" #oid ain() $ double a%b; cout<<'a='; cin""a; cout<<'b='; cin""b; i.(a) cout<<2x='<<-b+a<<endl; else i.(4b) cout<<2ecuatie nedeter inata3n2; else cout<<2ecuatia nu are solutie3n2; Programul de mai sus conine o instruciune if imbricat. Pentru a mri claritatea programelor se obinuiete s se decaleze spre dreapta #cu un tabulator$ instruciunile din compunerea instruciunii if. (n acest program s/a realizat test relativ la valorile tastate pentru a i b. Exemplul 4: S se scrie un program care citete coeficienii a&b&c&d&e&f ai unui sistem de dou ecuaii lineare cu dou necunoscute determin i afieaz soluia acestuia atunci c*nd are o soluie unic. #include<iostrea !h" #oid ain() $ double a%b%c%d%e%.%x%y%det1%det0%det; cout<<'a='; cin""a; cout<<'b='; cin""b; cout<<'c='; cin""c; cout<<'d='; cin""d; cout<<'e='; cin""e; cout<<'.='; cin"".; i.(4(det=a(e-b(d)) cout<<2siste ul nu este deter inat3n2; else $ det1=c(e-b(.; det0=a(.-c(d; x=det1+det; y=det0+det; cout<<2x='<<x<<'3ty='<<y<<endl; -
Clasa a IX-a
Structuri de control
#include<stdlib!h" #oid ain() $ double a%b%c%d%delta; cout<<2coe.icientul lui x )atrat , 2; cin""a; cout<<2coe.icientul lui x , 2; cin""b; cout<<2ter enul liber , 2; cin""c; i.(4a 66 4b 66 4c) $ cout<<2ecuatie nedeter inata3n2; exit(0); /* terminare fr erori*/ i.(4a664b) $ cout<<2ecuatia nu are solutie3n2; exit(0); i.(4a) $ cout<<2ecuatie de 7radul 13n2; cout<<2x=2<<-c+b<<endl; exit(0); delta=b(b-4(a(c; d=0(a; i.(delta"0) $ cout<<2ecuatia are doua radacini reale si distincte3n2; delta=s8rt(delta); cout<<2x1='<<(-b+delta)+d<<'3tx0=2<<(-b-delta)+d)<<endl; exit(0); i.(4delta) $ cout<<2ecuatia are radacina dubla3n2; cout<<2x=2<<-b+d<<endl; exit(0); cout<<2radacini co )lexe3n2; delta=s8rt(-delta)+d; d=-b+d; cout<<'x1='<<d<<'+i'<<delta<<endl; cout<<'x0='<<d<<'-i'<<delta<<endl; -
Clasa a IX-a
Structuri de control
Exemplul 1: S se scrie un program care calculeaz i afieaz valoarea polinomului p'x*/,x$-7x- 1 pentru x/ &$& 8.& 1. #include<iostrea !h" #oid ain() $ int x; x=1; 9hile(x<=10) $ cout<<2x='<<x<<'3t)(x)='<</(x(x-:(x-10<<endl; x++; Exemplul 2: S se scrie un program care citete un ntreg n 91&,1: calculeaz i afieaz pe n;. !vem" n; / ($(,(8..(n pentru n 21 i 1;/ prin definiie. #include<iostrea !h" #include<stdlib!h" #oid ain() $ int n%i; unsi7ned lon7 .; //n! este o valoare foarte mare de aceea folosim long int cout<<2n=2; cin""n; i.(n<0 ;; n"/0) $ cout<<2n nu a)artine inter#alului <0%/0=3n2; exit(1); .=1; i=0; 9hile(i<=n) .(=i++; cout<<2n4=2<<.<<endl; -
Clasa a IX-a
Structuri de control
dintr/o funcie un salt la o etic2et etc. 'in cele de mai sus rezult ec2ivalena celor dou cicluri while i for. Se recomand folosirea instruciunii for n ciclurile n care sunt prezente prile de iniializare i reiniializare aa numitele cicluri cu pas. Exemplul 1" S se scrie un program care citete ntregul n din intervalul 91&,1: calculeaz i afieaz pe n; . #include<iostrea !h" #include<stdlib!h" #oid ain() $ int n%i; unsi7ned lon7 .; //n! este o valoare foarte mare de aceea folosim long int cout<<2n=2; cin""n; i.(n<0 ;; n"/0) $ cout<<2n nu a)artine inter#alului <0%/0=3n2; exit(1); .or(.=1%i=0;i<=n;i++) .(=i; cout<<2n4=2<<.<<endl; Exemplul 2: )rmtorul program continu s cicleze p*n c*nd este tastat litera =. (n loc s verifice variabila de control a ciclului instruciunea for verific dac de la tastatur a fost introdus caracterul =. #include<iostrea !h" #oid ain() $ int i; char ch; ch=>a>; .or(i=1;ch4=>8>;i++) $ cout<<')as,'<<i<<endl; cin""ch; (n acest caz testul de condiie care controleaz ciclul nu are nimic n comun cu variabila de control a ciclului. 0ariabila ch a primit o valoare iniial pentru a ne asigura c ea nu conine accidental c2iar litera = n momentul n care programul ncepe execuia.
Clasa a IX-a
Structuri de control
<
Exemplul 2: Ciclul do este folositor n special c*nd programul ateapt s se produc un anumit eveniment. 'e exemplu urmtorul program ateapt ca utilizatorul s tasteze litera =. Programul conine o singur apelare a funciei getche'*. #include<iostrea !h" #oid ain() $ char ch; do$ cin""ch; - 9hile(ch4=>8>); cout<<'3n a 7asit )e 8'; -
. i.(e) cout<<d<<'B'<<e<<'3t'); //afiseaza factorul i puterea lui d=d+((d==0) *1,0); //dac d=2,se trece la d=3, altfel se trece la //urmtorul factor impar cu d+2 -9hile(n"1);
Clasa a IX-a
Structuri de control i.(ch==>F>) continue; //numr incorect,se reia citirea total+=i; //numr corect,se adaug la sum -9hile(i); //citirea se nc eie la i=! cout<<'Gotalul este,'<<total<<endl;
>
5. 1 !nstruc"iunea break
%ste nrudit cu instruciunea continue. %a are formatul " break# Poate fi utilizat n corpul unui ciclu. (n acest caz la nt*lnirea instruciunii break se termin execuia ciclului n al crui corp este inclus i execuia continu cu instruciunea urmtoare instruciunii ciclice respective. !ceast instruciune la fel ca i instruciunea continue mrete flexibilitatea la scrierea programelor n limbajele C i C== . Exemplul1: S se scrie un program care citete dou numere naturale i pozitive calculeaz i afieaz cel mai mare divizor comun al lor. #include<iostrea !h" #oid ain() $ lon7 %n; lon7 a%b; lon7 r; do $ cout<<2)ri ul nu ar=2;cin"" ; i.( "0) breaH; //valoarea citit este corect,ieim din ciclul de //citire cout<<2nu s-a tastat un intre7 )o&iti#3n2; //valoare incorect, se reia citirea - 9hile(1); do $ cout<<2al doilea nu ar=2;cin""n; i.(n"0) breaH; //valoarea citit este corect,ieim din ciclul de //citire cout<<2nu s-a tastat un intre7 )o&iti#3n2; //valoare incorect, se reia citirea - 9hile(1); a= ; b=n; do // algoritmul lui "uclid $ r=aAb; i.(r) $ a=b; b=r;-9hile(r); cout<<'c dc )entru '<< <<' si '<<n<<' este '<<b<<endl;
Exemplul 2: &nstruciunea break permite ieirea dintr/un ciclu din oricare punct din interiorul su. C*nd instruciunea break este nt*lnit n interiorul unui ciclu acesta se va termina imediat iar controlul va trece la instruciunea ce urmeaz dup ciclu. 'e exemplu programul urmtor afieaz numai numerele de la + la +,. #include<iostrea !h" #oid ain() $ int i; .or(i=1;i<100;i++) $ cout<<i; i.(i==10) breaH; ++o)rirea .ortaIJ a ciclului la i=10 Exemplul 3: &nstruciunea break poate fi folosit cu oricare din cele trei cicluri ale limbajului. (ntr/un ciclu pot exista oric*te instruciuni break. (n general se recomand ca instruciunea break s fie utilizat pentru scopuri speciale i nu ca ieire normal din ciclu. &nstruciunea break este utilizat n cicluri n care o condiie special poate cauza oprirea imediat a ciclului. Spre exemplu n programul urmtor apsarea unei taste poate opri execuia programului"
Clasa a IX-a
Structuri de control
#include<iostrea !h" #oid ain() $ int i; char ch; .or(i=1;i<10000;i++) i.(4(iAK)) $ cout<<i<<' Lai doriti * (E+F), C; cin""ch; i.(ch==>F>) breaH; //oprirea ciclului la cererea utilizatorului cout<<endl; -
5.
!nstruc"iunea switch
Permite realizarea structurii selective. !ceasta este o generalizare a structurii alternative i a fost introdus de ?oare. %a poate fi realizat prin instruciuni if imbricate. )tilizarea instruciunii switch face ca programul s fie mai clar dec*t dac se utilizeaz varianta cu instruciuni if imbricate. Structura selectiv n forma n care a fost ea acceptat de ctre adepii programrii structurate se realizeaz n limbajul C cu ajutorul urmtorui format al instruciunii switch " switch'expresie* - case c ? sir@ break# case c$? sir@$ break# 888. case cn? sir@n break# default? sir . unde " c &c$&8&cn sunt constante integrale sir@ &sir@$&8..sir@n&sir sunt succesiuni de instruciuni &nstruciunea switch cu formatul de mai sus se execut astfel " Se evalueaz expresia dintre parantezele rotunde Se compar pe r*nd valoarea expresiei cu valorile constantelor c &c$&8&cn. 'ac valoarea expresiei coincide cu una din constante s zicem cu ci atunci se execut secvena sir@i apoi se trece la instruciunea urmtoare instruciunii switch adic la instruciunea aflat dup acolada nc2is care termin instruciunea. 'ac valoarea respectiv nu coincide cu nici una din constantele c &c$&8.cn atunci se execut succesiunea de instruciuni sir din default i apoi se trece la instruciunea urmtoare instruciunii switch. @enionm c este posibil s nu se ajung la instruciunea urmtoare instruciunii switch n cazul n care succesiunea de instruciuni selectat pentru execuie # sir@i sau sir$ va defini ea nsi un alt mod de continuare a execuiei programului #de exemplu execuia instruciunii de revenire dintr/o funcie saltul la o instruciune etic2etat etc.$. Succesiunile sir@ &sir@$&8..&sir@n se numesc alternativele instruciunii switch. !lternativa sir este opional deci ntr/o instruciune switch secvena default ? sir poate fi absent. (n acest caz dac valoarea expresiei nu coincide cu valoarea nici uneia dintre constantele c &c$&.. ..cn atunci instruciunea switch nu are nici un efect i se trece la execuia instruciunii urmtoare. &nstruciunea switch de mai sus este ec2ivalent cu urmtoarea instruciune if imbricat " if'expresie//c * sir@ else if'expresie//c$* sir@$ else if'expresie//c,* sir@, else if
Structuri de control
+,
else if'expresie//cn* sir@n else sir# &nstruciunea break de la sf*ritul fiecrei alternative permite ca la nt*lnirea ei s se treac la execuia instruciunii urmtoare instruciunii switch. Se obinuiete s se spun c instruciunea break permite ieirea din instruciunea switch. &nstruciunea break poate fi utilizat numai n corpurile ciclurilor i n alternativele instruciunii switch. Prezena ei la sf*ritul fiecrei alternative nu este obligatorie. (n cazul n care instruciunea break este absent la sf*ritul unei alternative dup execuia succesiunii de instruciuni din compunerea alternativei respective se trece la execuia succesiunii de instruciuni din alternativa urmtoare a aceleai instruciuni switch. !dic dac o instruciune switch are formatul " switch'expresie* - case c ? sir@ case c$? sir@$ . atunci ea este ec2ivalent cu urmtoarea secven " if'expresie//c * - sir@ sir@$ .else if'expresie//c$* sir@$# Exemplul 1: )rmtorul program recunoate numerele + 1 4 i - i afieaz numele cifrei introduse. #include<iostrea !h" #oid ain() $ int i; cout<<'?ntroduceti un intre7 intre 1 si 4 , C; cin""i; s9itch(i) $ case 1 , cout<<'unu'; breaH; case 0 , cout<<'doi'; breaH; case / , cout<<'trei'; breaH; case 4 , cout<<')atru'; breaH; de.ault, cout<<'nu ar necunoscut'; Exemplul 2: &nstruciunile switch sunt deseori folosite pentru a procesa comenzi meniu. 'e exemplu programul urmtor" Ainclude3iostream.h2 #oid ain() $ .loat a%b; char ch; cout<<'@oriti ,3n'; cout<<'Adunare%Mcadere%Lulti)licare% ? )artire*3n'; /* validarea op#iunii introduse$se repeta ciclul de citire a optiunii pana cand utlizatorul va introduce un raspuns valid */ do$ cout<<'?ntroduceti )ri a litera , C; cin""ch; cout<<endl; -9hile(ch4=>A> 66 ch4=>M> 66 ch4=>L> 66 ch4=>?>); cout<<'?ntroduceti )ri ul nu ar , C; cin""a;
Clasa a IX-a
Structuri de control cout<<'?ntroduceti al doilea nu ar , C; cin""b; //procesarea comenzii de meniu s9itch(ch) $ case NA>, cout<<a+b; breaH; case NM>, cout<<a-b; breaH; case NL>, cout<<a(b; breaH; case N?>, i.(b) cout<<a+b; breaH; -
++
Exemplul 3: &nstruciunile asociate unui case pot s lipseasc. !ceasta permite ca dou sau mai multe case s execute aceleai instruciuni fr s fie nevoie de duplicarea lor. &at un program care clasific literele n vocale i consoane" #include<iostrea !h" #oid ain() $ char ch; cout<<'?ntroduceti o litera , C; cin""ch; s9itch(ch) $ case Na>, case Ne>, case Ni>, case No>, case Nu>, cout<<'3n este o #ocala'; breaH; de.ault , cout<<'3n este o consoana'; -
5. $ Beader-ul ct%pe.h
?eader/ul ct%pe.h este specializat pentru prelucrarea datelor de tip caracter. %l conine numai funcii i macrouri #secvene de cod asemntoare funciilor la apelul crora se face substituia numelui funciei cu codul asociat$ de verificare i prelucrare a caracterelor. !stfel pentru clasificarea caracterelor avem urmtoarele macrodefiniii " Cacro de verificare isalnum'c* isalpha'c* isdigit'c* iscntrl'c* isascii'c* isprint'c* isgraph'c* islower'c* isupper'c* ispunct'c* isspace'c* isxdigit'c* 5unc"ii conversie caractere int toupper'int ch* Daloarea cEnd caracterul este ? o liter sau cifr o liter o cifr n baza +, un caracter de control un caracter valid !SC&& un caracter tipribil un caracter tipribil mai puin spaiul o liter mic o liter mare un caracter de punctuaie spaiu tab C7 L3 tab vertical form/feed o cifr n baza +; 5ace conversia unui caracter ? n liter mare. Spre deosebire de macroul @toupper care modific orice caracter dac caracterul ch nu este liter mic funcia l ntoarce nemodificat n liter mic. Spre deosebire de macroul @tolower care modific orice caracter funcia ntoarce caracter nemodificat dac nu este liter mare.
Clasa a IX-a
Structuri de control
+1
3unciile trigonometrice au argumente de tip real care trebuie specificate n radiani. Cele mai utilizate funcii implementate sunt " Sintaxa func"iei Fumele func"iei Daloarea returnat double sin'double x*# Sinus 7eal ntre B+ i + double cos'double x*# Cosinus 7eal ntre B+ i + double tan'double x*# Cangent 7eal double asin'double x*# !rc sinus 7eal ntre /51 i 51 double acos'double x*# !rc cosinus 7eal ntre , i double atan>double x*# !rc tangent 7eal ntre /51 i 51 double atan$'double %& double x*# !rc tangenta lui %+x 7eal ntre , i double sinh'double x*# Sinusul 2iperbolic 7eal double cosh'double x*# Cosinusul 2iperbolic 7eal double tanh'double x*# Cangenta 2iperbolic real