Sunteți pe pagina 1din 22

Instrucţiune Compusă

 Este o succesiune de instrucţiuni incluse intre acolade, succesiune care


PROGRAMAREA CALCULATOARELOR

poate fi precedată si de declaraţii:



 {
 declaraţii
 instrucţiuni
 }
 Exemplu: Permutarea valorilor variabilelor a şi b
 {
 int t;
 t=a
 a=b
 b=t
 }
Instrucţiunea IF
Instrucţiunea IF are următoarele formate:
PROGRAMAREA CALCULATOARELOR

a) format 1
if (expresie)
instrucţiune;
b) format 2
if (expresie)
instrucţiune 1;
else
instrucţiune 2;
 La întâlnirea instrucţiunii IF întâi se evaluează expresia din
paranteze.
 In cazul formatului a) dacă expresia are valoarea diferită de zero
(adică valoarea adevărată), atunci se execută instrucţiunea, astfel
se trece în secvenţă la instrucţiunea următoare instrucţiunii IF.
 In cazul b) dacă expresia are o valoare diferită de zero, atunci se
execută instrucţiunea 1 şi apoi se trece în secvenţă (adică la
instrucţiunea aflată după instrucţiunea 2); astfel se execută
instrucţiunea 2.
Funcţia standard exit
 Funcţia exit are prototipul:
PROGRAMAREA CALCULATOARELOR

 void exit (int cod ) - fişierul stdlib.h şi process.h


 La apelul acestei funcţii au loc următoarele acţiuni:
 -se videază zonele tampon a fişierelor deschise
 -se închid toate fişierele deschise
 -se întrerupe execuţia programului
 Exemplu exit(1) ;
Instrucţiunea while
 Această instrucţiune are formatul:
PROGRAMAREA CALCULATOARELOR

 while (expresie)
 instrucţiune; - este corpul instrucţiunii
 La întâlnirea acestei instrucţiuni întâi, se evaluează expresia din
paranteze.
 Dacă ea are valoare adevărată (este diferit de zero), atunci se
execută instrucţiunea; apoi se revine la punctul în care se
evaluează din nou valoarea expresiei din paranteze. În felul acesta,
corpul ciclului se execută atât timp cât expresia din antetul ei este
diferită de zero.
 În momentul în care expresia are valoarea zero, se trece la
instrucţiunea următoare instrucţiunii while.
 Corpul instrucţiunii while poate să nu se execute niciodată. Dacă
expresia are valoarea zero de la început, atunci se trece la
instrucţiunea următoare instrucţiunii while fără a executa
instrucţiunea.
Instrucţiunea FOR
 Instrucţiunea for, ca şi instrucţiunea while, se utilizează pentru a
PROGRAMAREA CALCULATOARELOR

realiza o structură repetitivă condiţionată anterior.


 Formatul ei este:
 for (exp1;exp2;exp3)
 instrucţiune – (corpul instrucţiunii care se execută repetat
 unde: exp1,exp2,exp3 sunt expresii.
 Acestea au următoarea semnificaţie:
 exp1 este partea de iniţializare a ciclului for ;
 exp2 este condiţia de continuare a ciclului for;
 exp3 este partea de reiniţializare a ciclului for.
Instrucţiunea FOR
Instrucţiunea for se execută astfel:
PROGRAMAREA CALCULATOARELOR

 Se execută secvenţa de iniţializare diferită de exp1.


 Se evaluează expresia exp2.
 Dacă valoarea exp2 este diferită de zero (este adevărat) atunci
se execută instrucţiunea din corpul ciclului.
 După executarea corpului ciclului se execută secvenţa de
reiniţializare exp3.
Dacă valoarea exp2=0 (este fals) se termină execuţia instrucţiunii
for şi se trece la instrucţiunea următoare.

 while(exp) este echivalentă cu for(;exp;)


 for(; ;) este echivalent cu while (1). În acest caz ciclul se termină
printr-un salt.
Instrucţiunea FOR

 #include <stdio.h>
PROGRAMAREA CALCULATOARELOR

 main() { int i;
 for( i = 1; i <= 10; i = i + 1 )
 printf("%d ", i );
 printf("\n"); }
Instrucţiunea do-while
 Această instrucţiune realizează o structură ciclică condiţionată
PROGRAMAREA CALCULATOARELOR

posterior.
 do
 instrucţiune
 while(expresie)
 Instrucţiunea do-while se execută în felul următor:
1. Se execută instrucţiunea
2. Se evaluează expresia ; dacă acesta are o valoare diferită de
zero, atunci se revine la punctul 1. Dacă valoarea expresiei este
0 (exp=0) atunci se trece în secvenţă la instrucţiunea următoare
instrucţiunii do-while.
 În cazul instrucţiunii do-while corpul ciclului se execută cel puţin
o dată.
Instrucţiunea Continue
 Această instrucţiune se poate utiliza numai în corpul unui ciclu.
PROGRAMAREA CALCULATOARELOR

Ea permite abandonarea iteraţiei curente. Formatul ei este :


 continue;
 Efectul instrucţiunii continue este următorul:
 În corpul instrucţiunilor while şi do-while;
 La întâlnirea instrucţiunii continue se abandonează iteraţia
curentă şi se trece la evaluarea expresiei care stabileşte
continuarea sau terminarea ciclului respectiv.
 b) În corpul instrucţiunii for;
 La întâlnirea instrucţiunilor continue se abandonează iteraţia
curentă şi se trece la execuţia pasului de iniţializare.
Instrucţiunea break
 Instrucţiunea break este înrudită cu instrucţiunea
PROGRAMAREA CALCULATOARELOR

continue. Formatul acesteia este:


break;
Poate fi utilizată în corpul unui ciclu sau în cadrul
instrucţiunii switch.
În cazul unui ciclu la întâlnirea instrucţiunii break se
termină execuţia ciclului în al cărei corp este inclusă
şi execuţia continuă cu instrucţiunea următoare
instrucţiunii ciclice respective.
Instrucţiunea break ca şi instrucţiunea continue
măreşte flexibilitatea la scrierea programelor în
limbajele C şi C++.
Instructiunea switch
 Instrucţiunea switch .. case este o modalitate mai buna de a scrie
un program atunci când apar o serie de if else. Sintaxa este,
PROGRAMAREA CALCULATOARELOR

 switch ( expresie )
{ case val1:
instructiune 1;
instructiune 2;
......
break;
case valn:
instructiune k_1;
.......
break; default:
.......
break; }
Cuvântul cheie break trebuie pus la sfârşitul fiecărei instrucţiuni
case. Ramura default este opţională şi se executa atunci când nici
unul din celelalte cazuri nu a fost întâlnit.
Instructiunea switch

 Reguli:
PROGRAMAREA CALCULATOARELOR

 valorile pentru case trebuie sa fie întregi sau


caractere
 nu pot fi utilizate expresii sau intervale de
valori
 ordinea instrucţiunilor case nu este
importanta
Instructiunea switch
#include <stdio.h>
main() { int m, n1, n2, k;
PROGRAMAREA CALCULATOARELOR

printf("Introduceti doua numere -->");


scanf("%d %d", &n1, &n2 );
printf("Alegeti :\n");
printf("1=adunare\n");
printf("2=scadere\n");
scanf("%d", &m );
switch( m ) {
case 1: k = n1 + n2;
break;
case 2: k = n1 - n2;
break;
default: printf("Selectia invalida!"); }
if( m == 1 )
printf("%d + %d = %d\n", n1, n2, k );
else if( m == 2 )
printf("%d - %d = %d\n", n1, n2, k ); }
Instrucţiunea goto
 Instrucţiunea goto nu este o instrucţiune absolut necesară în
PROGRAMAREA CALCULATOARELOR

scrierea programelor C. Se recomandă utilizarea acestei


instrucţiuni când se doreşte ieşirea din mai multe cicluri
imbricate.
 Astfel de situaţii apar adesea la depanare la întâlnirea unei erori.
 Instrucţiunea goto are formatul:
goto nume_et;
Unde nume_et este numele unei etichete definite în corpul aceleiaşi
funcţii.
La întâlnirea instrucţiunii goto, se realizează un salt la instrucţiunea
care are asociată eticheta nume_et.
O etichetă se defineşte astfel:
nume_et: instrucţiune
Tablouri
 Tablourile sunt structuri de date ce pot retine variabile multiple ale
aceluiaşi tip de date. Sa consideram cazul când avem nevoie de o
evidenta a tuturor persoanelor dintr-o organizaţie (ne interesează
de exemplu, vârstă). Încercarea de a aloca câte o variabilă fiecărei
PROGRAMAREA CALCULATOARELOR

persoane este sortita eşecului.


 int v1 = 21;
 int v2 = 23;
 int v3 = 23;
 Aceasta soluţie adoptata devine din ce in ce mai dificil de
întreţinut atunci când numărul de persoane creste. Tablourile sunt
un posibil răspuns la aceasta problema.
 Un tablou este ca un dulap cu multe sertare, ce utilizează un
sistem de indexare pentru a şti poziţia fiecăruia. In C indexarea
începe de la 0 (in Pascal putea începe la diferite valori).
 Înainte de a fi utilizat, un tablou trebuie declarat:
 int v[4];
 v[0] = 21;
 v[1] = 23;
 v[2] = 23;
 v[3] = 0;
Funcţiile standard sscanf şi sprintf
 Biblioteca standard a limbajelor C şi C++ conţine funcţiile
PROGRAMAREA CALCULATOARELOR

sscanf şi sprintf care sunt analogice funcţiilor scanf şi


respectiv printf.
 Ele au un parametru în plus la apel şi anume primul lor
parametru care este adresa unei zone de memorie în care
se pot păstra caractere ale codului ASCII; ceilalţi parametri
sunt la fel.
 Primul parametru al acestor funcţii poate fi numele unui
tablou tip char, deoarece un astfel de nume are ca valoare
chiar adresa de început a zonei de memorie care îi este
alocată.
 Funcţia sprintf şi printf foloseşte conversia datelor de
diferite tipuri din formatele lor interne, în formatele externe
prezentate prin succesiuni de caractere .
Funcţiile standard sscanf şi sprintf
 Diferenţa consta în aceea ca, de data aceasta caracterele
PROGRAMAREA CALCULATOARELOR

respective nu se afişează pe terminalul standard, ci se


păstrează în zona de memorie definita de primul parametru
al funcţiei sprinf.
 Ele se păstrează sub forma unui şir de caractere şi pot fi
afişate ulterior din zona respectiva cu ajutorul funcţiei puts.

 Este util când vrem sa afişăm aceleaşi date de mai multe ori.
char data [11];
sprintf(data, “ % 02d%02d% % d “ , zi , lună, an);
puts(data );
 Funcţia sscanf se realizează ca şi funcţie scanf cu singura
deosebire că citire datelor se va face din memorie.
Variabile locale
 Au valabilitate în unitatea în care au fost declarate.
PROGRAMAREA CALCULATOARELOR

 ele sunt de două tipuri: statice;


 automatice-registru.
 Variabilele locale pot fi alocate pe stivă (în acest caz
se numesc automatice)-se declară la începutul unei
funcţii sau instrucţiuni compuse.
 Aceste variabile îşi pierd existenţa la revenirea din
funcţia în care sunt declarate, sau din instrucţiunea
compusă.
 Variabilele locale pot şi să nu fie alocate pe stivă.
 În acest scop ele se declară ca fiind statice.
Variabile locale
 O declaraţie de variabilă statică este o declaraţie obişnuită
PROGRAMAREA CALCULATOARELOR

precedată de cuvântul cheie static.


 Variabilele statice pot fi declarate atât în corpul unei funcţii cât şi
în afara corpului oricărei funcţii.
 O variabilă statică nu se alocă la execuţie pe stivă, ci la
compilator într-o zonă de memorie destinată acestora.
 Ea este în afara corpurilor funcţiilor vizibilă din punctul în care
este declarată şi până la sfârşitul fişierului sursă care conţine
declaraţia respectivă (este locală fişierului respectiv).
 O astfel de variabilă nu poate fi declarată externă. Funcţiile sunt
analoage cu variabilele globale.
 Limbajele C şi C+ + permit declarări de funţii statice. Acestea se
face precedând antetul funcţiei de cuvântul cheie static.
 În acest caz, funcţia respectivă este locală modulului în care
este definită.
Variabile registru
 O variabilă alocată într-un registru al calculatorului se numeşte
PROGRAMAREA CALCULATOARELOR

variabilă registru.
 Ea se declară printr-o declaraţie obişnuită precedată de cuvântul
cheie register.
 Se pot declara ca variabile registre, numai variabile de tipul int,
char şi pointer (parametrii şi variabile automatice simple pot fi
declarate ca variabile registru).
 Se recomandă să se declare ca variabile registru acele variabile
ale unei funcţii care au o utilizare mare în funcţia respectivă.
 Alocarea unei variabile în registru conduce la economie de
memorie, precum şi la creşterea vitezei de calcul.
 În cazul lipsei declaraţiilor registru, compilatorul alocă în mod
implicit anumite variabile automatice sau parametrii în regiştrii.
 Variabilelor registru nu li se poate aplica operatorul adresă (&).
Iniţializare
 Variabilele din programele globale sau pot fi iniţializate cu
PROGRAMAREA CALCULATOARELOR

anumite valori la declararea lor.


 a)Iniţializarea variabilelor simple
 O variabilă simplă poate fi iniţializată printr-o construcţie de
forma:
 tip nume = expresie;
 sau
 static tip nume = expresie;
 Variabilele globale şi statice neiniţializate au în mod implicit
valoarea zero.
 O variabilă automatică neiniţializate are o valoare imprevizibilă.
Iniţializare
 b)Iniţializarea tablourilor.
PROGRAMAREA CALCULATOARELOR

 Tablourile ca şi variabilele simple, pot fi iniţializate.


 Tablourile pot fi de două feluri:
 -globale se iniţializează prin definiţiile lor.
 -statice şi automatice se iniţializează prin declaraţiile lor.
 În limbajul C, iniţializările se fac prin expresii constante.
 Tablourile globale şi statice se iniţializează la compilare.
 Tablourile automatice se iniţializează la execuţie. Iniţializarea unui
tablou unidimensional se realizează printr-o construcţie de forma:
 tip nume [ec] = {ec0,ec1,…,ec i}; sau
 static tip nume [ec] = {ec0,ec1,…,eci}, dacă tabloul este static.
 Unde: ec0,ec1… sunt expresii constante.
 Elementele neiniţializate ale unui tablou global sau static au în
mod implicit valoarea egală cu zero. În cazul unui tablou automatic
elementele neiniţializabile au valori iniţiale nedefinite.

S-ar putea să vă placă și