Sunteți pe pagina 1din 8

Capitolul 3.

Instruciunile limbajului C++

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.

1.1 Instruciunea vid

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:

for(i = 1, s = 0; i <=10; s = s + i, ++i);

n care se realizeaz suma primelor 10 numere naturale.

1.2 Instruciunea compus

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:

{ instruciune1;instruciune2; ... instruciune n;}

1.3 Instruciunea expresie

O instruciune expresie provoac evaluarea expresiei componente, fr s produc ramificaii n fluxul


de execuie al programului (eventualele apeluri de funcii din cadrul expresiei introduc o ramificare temporar,
dar ele returneaz controlul execuiei n punctul n care s-a ntrerupt evaluarea expresiei). Cele mai des utilizate
instruciuni expresie sunt instruciunile expresie de atribuire i instruciunile expresie apel de funcie.

Expresia de atribuire are forma general: variabila=expresie;

Locul expresiei poate fi luat fie de o simpl constant, fie de o construcie complex, care s cuprind
diferii operatori.

Iat cteva exemple:

i+j; //instruciune expresie care nu va produce niciun efect

i++; //instruciune expresie de incrementare

cout<<j<<endl; //instruciune de apel al funciei cout, pentru afiarea valorii variabilei j

x=5; //variabilei x i se atribuie o valoare simpla

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

Sintaxa general a acestei instruciuni este:

if(<condiie>) <instruciune A>;

[else <instruciune B>;]

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.

if(n>=0) cout<<Numar 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)

cout<<Ati introdus numarul <<n;

cout<<Este numar pozitiv;

Exemplul anterior poate fi dezvoltat, prin includerea ramurii else, astfel:

if(n>=0) cout<<Numar pozitiv;

else cout<<Numar negativ;

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)

cout<<Este numar pozitiv;

else cout<<Este numar nul;

else cout<<Este numar negativ;


Desigur, putem avea situaii mult mai complexe, n care s fie necesar abordarea mai multor cazuri
pentru a decide continuarea programului. Pentru astfel de situaii exist instruciunea switch. Forma ei general
este:

swith(expresie 0)

case expresie 1: instructiune 1; break;

case expresie 2: instructiune 2; break;

............................................

case expresie n: instructiune n; break;

[default: instructiune n+1;]

Expresie 1, 2, ,n pot fi constante, variabile sau expresii de acelai tip de date.

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.

S analizm urmtorul exemplu:

...

switch(c)

case '+': cout<<a+b; break;

case '-': cout<<a-b; break;

case '*': cout<<a*b; break;

case '/': cout<<a/b; break;

default: cout<<"Operator gresit";

...

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.

1.5 Instruciuni repetitive

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

Are sintaxa general:

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) {

cout << n << ", ";

n--; }

Efectule execuiei ar fi, evident, afiarea valorilor 10, 9, 8 1. ntreg procesul de execuie al secvenei
se poate descrie astfel:

pas 1: lui n i se atribuie valoarea iniial 10

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.

Trebuie fcut, n general, urmtoarea observaiei. Instruciunea trebuie s se opreasc la un moment


dat. Acest lucru nseamn c valoarea variabilelor verificate trebuie, cumva, modificat, astfel nct valoarea
expresiei s devin false. n cazul nostru, acest lucru se realizeaz prin instruciunea n--, ce determin scderea
unei uniti la fiecare execuie a secvenei.

Este important s reinem i c, la ieirea din instruciune, varibila/variabilele vor avea primele valori
care nu verific
D. Instruciunea do-while

Are sintaxa general

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.

n exemplul urmtor am rescris codul de la instruciunea while:

int n = 10;

do

cout << n << ", ";

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.

Sintaxa sa general este:

for(<instruciune_iniializare>; <expresie_condiional>; <expresie_cretere)

<lista_instruciuni>;

Precum n cazul while i instruciunea din interiorul for se execut ct timp expresia condiional este
evaluat cu true.

Procesul de execuie al instruciunii for poate fi rezumat astfel:


pas 1: se execut instruciunea de iniializare. De obicei, n acest moment se declar o variabil contor
i este iniializat cu o valoare. Aceast instruciune este executat o singur dat, la nceput.

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.

pas 4: se execut expresia de cretere. Se revine la pas 2

pas 5: Instruciunea for este terminat i se trece la isntruciunea urmtoare.

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.

for(i=10, j=0;i>0,j<=10;i--, j++)

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 .

for (int i=1; i<=10; i++)

cout << i << ", ";

if (i==3)

cout << "execuie ntrerupt !";

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,

for (int i=1; i<=10; i++)

if (i==3) continue;

cout << i << ", ";

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++;

if (i<=10) goto eticheta1;