Documente Academic
Documente Profesional
Documente Cultură
Instruciunile sunt elementele individuale ale programului, care determin executarea de diferite aciuni.
n C++ ele se termin, ntotdeauna, cu punct i virgul i sunt executate n ordinea n care sunt scrise.
Execuia programelor nu este, ns, ntotdeauna liniar, existnd instruciuni pentru executarea
condiionat e unor secvene de cod sau pentru repetarea lor. n acest fel, instruciunile sunt considerate una
singur i executate n grup.
Instructiunea vid este, aparent, absurd, pentru c nu are niciun efect. Poate avea, ns, utilitate n cazul
n care este necesar prezena unei instructiuni, dar nu se dorete a se execute ceva (de exemplu n instructiunile
repetitive). Un exemplu generic, dei depete un pic acest capitol, ar fi:
Atunci cnd se dorete executarea n bloc a mai multor instruciuni, n cazul instruciunilor alternative
sau repetitive, se impune utilizarea instruciunii compuse. Acest lucru se realizeaz cu ajutorul acoladelor, ntr-o
scriere de forma:
Locul expresiei poate fi luat fie de o simpl constant, fie de o construcie complex, care s cuprind
diferii operatori.
n=2*m+1; //variabilei n i se atribuie valoarea obinut prin evaluarea expresiei din partea dreapt
z=x>y ? x:y; // variabilei z i se atribuie valoarea x sau y, dup cum rezult din evaluare
1.4 Instruciunile de selecie (decizie)
n C++ exist dou instruciuni pentru a condiiona executarea unor instruciuni de ndeplinirea unei
condiii. Anume, instruciunile if i switch.
A. Instruciunea if
Condiia este o expresie care se evalueaz. Dac rezultatul evalurii este true, atunci se execut
<instruciune A>. n caz contrar este executat <instruciune B>. S precizm c ramura else este opional. n
exemplul urmtor vom determina afiarea unui mesaj corespunztor, dac valoarea unei variabile este pozitiv.
Dup cum se observ, ramura else lipsete aici, acest lucru nsemnnd c n cazul n care valoarea lui n
este negativ nu se va executa nicio intruciune. Dac am dori executarea mai multor instruciuni, condiionate
de valoarea expresiei, atunci ar trebui s le grupm cu ajutorul acoladelor, ca n exemplu:
if(n>=0)
Desigur, n cazul n care variabila n are o valoare negativ, mesajul afiat va fi Numr negativ.
B. Instruciunea switch
Problema se poate complica, dac am dori s includem n exemplul precedent i posibilitatea de a afia
Numar nul n situaia corespunztoare. Lucrul poate fi, totui, uor de fcut, astfel:
if(n>=0)
if(n>0)
swith(expresie 0)
............................................
Execuia acestei instruciuni se desfaoar dup urmtoarea schem: se evalueaz expresia 0, apoi se
evalueaz rnd pe rnd expresiile 1, 2 n, pn cnd este determinat una a crei valoare este egal cu a sa. n
acest caz se trece la executarea instruciuniii respective, care, poate fi simpl sau compus. n cazul n care
expresia nu este egala cu niciuna dintre cele n expresii atunci se efectueaza instructiunile care urmeaza dup
default, dac este prezent, iar dac nu, se termina de efectuat instructiunea switch si se trece la instruciunea
urmtoare din program.
...
switch(c)
...
Presupunnd c variabilele a, b, c au fost citite corect, secvena de program decide ce operator aritmetic
a fost citit n variabila c i execut operaia corespunztoare, pentru variabilele a i b. Secvena conine i
clauza default, astfel c dac se citete orice alt caracter, n afar de +,-,*,/ va determina afiarea mesajului
operator gresit.
Instruciunile de acest tip asigur repetarea unei instruciuni (simple sau compuse) de un anumit numr
de ori sau ct timp este ndeplinit o condiie. n C++ sunt n numr de trei: while, do-while, for.
C. Instruciunea while
while(<expresie_condiional>) <instruciune>;
Intruciunea determin repetarea instruciunii ct timp evaluarea expresiei se face cu valoarea true.
Dac, la un moment dat n execuie, evaluarea se face cu false, instruciunea este nchis i se trece la linia
urmtoare din program.
n exemplul urmtor variabila n este iniializat cu 10 i, pe rnd, dup ce este afiat, i se coboar
valoarea pn la 1. S reinem, deci, c ultima execuie se va face pentru valoarea 1.
int n = 10;
while (n>0) {
n--; }
Efectule execuiei ar fi, evident, afiarea valorilor 10, 9, 8 1. ntreg procesul de execuie al secvenei
se poate descrie astfel:
pas 2: este verificat valoarea lui n prin expresia n > 0. n acest moment exist dou posibiliti,
valoarea expresiei este true, adic n>0, caz n care se trece la executarea pasului 3
valoarea este evaluat ca false, adic n<=0, caz n care se trece la executarea instruciunii aflate n program
dup secven.
pas 3: se execut instruciunea compus {cout << n << ", "; n--;}, dup care se revine la pasul 2.
Este important s reinem i c, la ieirea din instruciune, varibila/variabilele vor avea primele valori
care nu verific
D. Instruciunea do-while
do
<instruciune;>
while (<expresie_condiional>);
Instruciunea do-while are un comportament asemntor instruciunii while, dar se deosebete prin
aceea c asigur execuia instruciunii cel puin o dat, indiferent de ndeplinirea condiiei.
int n = 10;
do
n--;
while (n>0) ;
Dup cum se obsev, efectul execuiei este identic, n urma sa afindu-se, n ordine, numerele de la 10
la 1.
E. Instruciunea for
Numit i intruciune repetitiv cu numr cunoscut de pai, instruciunea for este conceput pentru a se
executa de un numr determinat de ori.
<lista_instruciuni>;
Precum n cazul while i instruciunea din interiorul for se execut ct timp expresia condiional este
evaluat cu true.
pas 2: este evaluat expresia. Dac rezultatul evalurii este true, instruciunea continu. Altfel este
terminat i programul continu cu pasul 5.
pas 3: este executat instruciunea. Aceasta poate fi o instruciune simpl sau compus.
Urmrind exemplele anterioare, iat cum, folosind instruciunea for putem afia numerele de la 1 la 10,
n ordine descresctoare:
int i;
for(i=10;i>0;i--)
cout<<i<<,;
Cele trei cmpuri ale instruciunii sunt opionale. Ele pot lipsi din scrierea instruciunii, dar ar trebui
nlocuit efectul executrii lor prin alte instruciuni. n exemplul urmtor vom rescrie secvena anterioar, fcnd
iniializarea nainte.
int i=10;
for(;i>0;i--)
cout<<i<<,;
Chiar dac un cmp lipsete, separatorul ; este obligatoriu. Trebuie avut n vedere c o instruciune for
fr expresie condiional este echivalent cu o instruciune for infinit.
Remarcabil este c fiecare cmp poate conine mai multe instruciuni. Totui, fiind considerate expresii,
acestea nu pot conine instruciuni compuse. Pot fi scrise, ns, mai multe instruciuni, desprite prin virgul,
care este un separator de expresii. Este, astfel, posibil s avem, spre exemplu, n cadrul unui for, dou variabile
de ciclare, iniializndu-le i modificndu-le valorile amndurora.
cout<<i<<'+'<<j<<'='<<i+j<<endl;
Exemplul de mai sus folosete aceast facilitate pentru a determina scrierea lui 10 ca sum de dou
numere naturale.
Instruciunea for, afar de utilizarea tocmai prezentat, utilizat, altminteri, cel mai frecvent, admite i
iterarea unor domenii. n acest caz sintaxa este:
for(declarare: domeniu)
<lista_instruciuni>;
1.6 Instruciunile de salt
Permit modificarea cursului obisnuit al unui program, prin realizarea saltului la executia anumitor
secvente din program.
F. Instructiunea break
Are rolul de a opri executia unei instructiuni repetitive, chiar dac condiia impus acesteia este
ndeplinit. poate fi utilizat pentru a opri o bucl, ori pentru a opri execuia natural. n exemplul urmtor, o
instruciune for ce ar avea, n mod natural, zece pai este oprit dup executarea a trei pai .
if (i==3)
break;
G. Instruciunea continue
Permite, n cadrul unei instruciuni repetitive, saltul peste executarea anumitor iteraii. Relund
exemplul anterior, vom afia numerele de la 1 la 10, exceptnd afiarea lui 3,
if (i==3) continue;
H. Instruciunea goto
Determin saltul la un alt punct din program, ignornd liniile aflate ntre punctul acesta i respectivul
punct. Destinaia este identificat printr-o etichet, folosit apoi ca argument al instruciunii goto. Construcia
unei etichete presupune un identificator valid, urmat de semnul (:). Aceast instruciune provine din
programarea low-level, fiind evitat n paradigmele moderne de programare la nivel nalt. n exemplul urmtor
vom determina afiarea numerelor de la 1 la 10 prin utilizarea intruciunii goto.
int i=1;
eticheta1: cout<<i<< ;
i++;