Sunteți pe pagina 1din 17

Limbaje deprogramare

CursulIII

Limbaje deprogramare Conf.dr.L.STOLERIU LSTOLER@UAIC.RO

Operatori logici
Fie expresia relaional "a < b". Dac valoarea lui a este mai mic dect valoarea lui b, atunci expresia va avea valoarea 1, pe care o gndim ca fiind adevrat("true). Dac valoarea lui a este mai mare dect valoarea lui b, atunci expresia va avea valoarea 0, pe care o gndim ca fiind fals ("false). Folosind precedena operatorilor aritmetici, "a < b" este echivalent cu "(a b) < 0". De altfel, pe multe maini, expresii cum sunt "a < b" sunt implementate ca (a b) < 0".
2 Limbaje deprogramare Conf.dr.L.STOLERIU LSTOLER@UAIC.RO

Evaluarerapid
Pentru expresiile ce conin&&sau ||,evaluarea areloccnd sastabilit deja valoarea expresiei,eventualfr parcurgerea ntregii expresii.
Astfel,dac "expr1"seevalueaz la0(false), atunci expresia expr1&&expr2 seva evalua la0,fr asemai evalua "expr2". Dac "expr1"seevalueaz la1(true),atunci expresia expr1||expr2 seva evalua la1fr asemai evalua expresia "expr2".

Semai spune c operatorii &&i ||sunt lazy(lenei).


3 Limbaje deprogramare Conf.dr.L.STOLERIU LSTOLER@UAIC.RO

Instruciuneacompus
Oinstruciune compus este unir dedeclaraiii instruciuni delimitatedeacolade.Ceea ce acoladele delimiteaza semainumete i "bloc".Oinstruciune compus este eansi oinstruciune.
{ a = 1; { b = 2; c = 3; } }

Instruciunea vid sereprezint cusemnul ;(punct i virgul).Estefolositnfor(), if-then-else.


4 Limbaje deprogramare Conf.dr.L.STOLERIU LSTOLER@UAIC.RO

if,ifelse
Formageneral ainstruciunii "if"este if (expresie) instructiune Semantica este simpl.Astfel,nexempluldemaijosdac valoarea expresiei este true (diferit dezero),atunci se execut instruciunea,altfel nu seexecut. if (y != 0.0) x /= y;

Limbaje deprogramare Conf.dr.L.STOLERIU LSTOLER@UAIC.RO

if,ifelse
Instruciunea "ifelse"este foarte apropiat deinstruciunea "if". Formasa general: if (expresie) instructiune1 else instructiune2 ------------------------------------------if (x < y) min = x; else min = y; printf("Valoarea minima = %f\n", min);

Limbaje deprogramare Conf.dr.L.STOLERIU LSTOLER@UAIC.RO

while
while, for i do sunt cele trei instruciuni repetitive dinlimbajul C.
while (expresie) instructiune instructiunea_urmatoare

nti seevalueaz expresie. Corpul buclei seexecut atta vremect expresie seevalueaz la"true".Terminarea buclei areloccnd expresie ia valoarea zero(adic "false").nacest punct,controlul sepaseaz ctre instructiunea_urmatoare.
while (i <= 10) { suma += i; ++i; }
7 Limbaje deprogramare Conf.dr.L.STOLERIU LSTOLER@UAIC.RO

while()
Exemplu:adunarea numerelor ntregidela1la10.
#include <stdio.h> main() { int i=1, suma=0; while (i<=10) { suma = suma + i; i = i + 1; } printf("Suma primelor 10 numere intregi este %d\n",suma); }

Limbaje deprogramare Conf.dr.L.STOLERIU LSTOLER@UAIC.RO

while()

Sepoategeneralizaexpresialogicdesubwhile Exemplu:adunareaunornumereintrodusedelatastatur while (scanf("%d",&x)==1)

Limbaje deprogramare Conf.dr.L.STOLERIU LSTOLER@UAIC.RO

for
Cai while,instruciunea for sefolosete pentru descrierea structurilor iterative(repetitive).
for (expresie1; expresie2; expresie3) instructiune instructiunea_urmatoare

este semantic echivalent (canelesicarezultat) cu


expresie1; while (expresie2) { instructiune; expresie3; } instructiunea_urmatoare;
10 Limbaje deprogramare Conf.dr.L.STOLERIU LSTOLER@UAIC.RO

for
Sevaevaluaexpresie1 (deobicei,aceastasefolosetepentru initializareabuclei). Apoi,seevalueaz expresie2.Dac aceastaeste"true"atunciseexecut instructiune,se evalueaz expresie3,icontrolulsetransmite la nceputulbuclei(undeNUsemaievalueaziar expresie1).Acest procescontinu pn cndexpresie2este0(false),punctn caresetransmite controlulctre instructiunea_urmatoare.
factorial=1; for (i = 1; i <= n; i++) factorial *= i;
11 Limbaje deprogramare Conf.dr.L.STOLERIU LSTOLER@UAIC.RO

for
Oricare dintre expresiileunei instruciuni for potlipsi (pot lipsi toate!!!).Nupotlipsiceledousemne ;.
i = 1; suma = 0; for ( ; i <= 10; i++) suma += i;

Echivalent:
i = 1; suma = 0; for ( ; i <= 10; ) suma += i++;

Dac lipseteexpresie2,atunciobinemobucl infinit.


12

Limbaje deprogramare Conf.dr.L.STOLERIU LSTOLER@UAIC.RO

for
Operatorul","areceamaimic prioritatedintretoi operatoriidinC.ntroexpresiedeforma
expresie1 , expresie2

seevalueaz expresie1,apoiexpresie2. Expresia"," ntoarcevaloareaitipuloperanduluidindreapta. Deexempludacaibsuntntregi,atunci


a = 0, b = 1

ntoarcevaloarea1detipulint. Operatorul","estedeseorifolositnfor.
for (factorial = 1, i = 1; i <= n; i++) factorial *= i;
13 Limbaje deprogramare Conf.dr.L.STOLERIU LSTOLER@UAIC.RO

for
Revenimasupraunuiexempluprecedent(sumaprimelorN numerenaturale)
for (suma = 0, i = 1; i <= n; ++i) suma += i;

sepoatescrie,echivalent,n
for (suma = 0, i = 1; i <= n; suma += i, ++i);

14

Limbaje deprogramare Conf.dr.L.STOLERIU LSTOLER@UAIC.RO

do
do poateficonsiderat ovariant ainstruciuniiwhile. Deosebireaconst nfaptulc pentruwhile testulseface lanceputulciclului,iarpentrudo lasfrit.
do instructiune while (expresie); instructiunea_urmatoare ----------------------------------------suma = i = 0; do{ suma += i; scanf("%d", &i); }while (i > 0);
15 Limbaje deprogramare Conf.dr.L.STOLERIU LSTOLER@UAIC.RO

goto
goto (saltneconditionat)esteconsiderat opus programriistructurate.Sfatulgeneralvalabileste evitareaacesteiinstruciuni.Oinstruciunedeetichetare areforma: eticheta : instructiune undeetichetaesteunidentificator.
bye: exit(1); eticheta1: a = b + c; 333: a = b + c;
16

(exemplugreit,dece?)
Limbaje deprogramare Conf.dr.L.STOLERIU LSTOLER@UAIC.RO

breakicontinue
break i continue ntrerupcontrolulnormalal programelor. break vacauzaieireadinbucla ncarese afl saudinswitch. continue poateaprea numainfor,while sau do.Are roluldeatrasmitecontrolulla sfritulbuclei.
while(1) { scanf("%lf", &x); if (x < 0.0) break; /*iesire pt. x negativ*/ printf("%lf\n", sqrt(x)); } while(contor < n) { scanf("%lf", &x); if (x<0) continue; /* valorile negative nu se iau in considerare */ ++contor; suma += x; }

17

Limbaje deprogramare Conf.dr.L.STOLERIU LSTOLER@UAIC.RO