Sunteți pe pagina 1din 28

curs 4

Programarea Calculatoarelor si Limbaje de


Programare
- limbajul C -

Conf. Dr. Ioana FIRASTRAU


Sef lucr. Dr. Ing. Dana E. GHITA
Drd. Cristian MUSUROI

1
curs 4

Algoritmi. Scheme logice si pseudocod

Pentru a dezvolta un program eficient, programatorul trebuie să parcurgă o serie de etape,


pornind de la enuntarea problemei într-un limbaj natural si ajungând in final la codul sursa al
programului.

A : să analizeze problema de rezolvat stabilind specificatia/specificatiile programului

B : să proiecteze programul, adică să elaboreze mai întâi algoritmul care va realiza


functia dorită

C : să implementeze programul = editare cod, depanare cod (corectare erori) si alcătuire


documentatie program

D : să întretină programul (upgrade, noi cerinte, etc.)

2
curs 4
A: să analizeze problema de rezolvat stabilind specificatia programului

 lista variabilelor de intrare si de iesire: în functie de problema de calcul se face o estimare a


variabilelor necesare precum si o descriere a acestora

 functia programului: corelatia dintre intrare si iesire, ce va face efectiv programul, cum va
prelucra datele

 organizarea datelor de intrare si de iesire: ce date sunt introduse si cum, ce date sunt afisate
sau folosirea altor dispozitive de intrare/iesire.

Aplicatie: Fiind date doua numere reale pozitive sa se calculeze : media aritmetică, media
geometrică si media armonică.

- variabile de intrare/iesire: variabile de intrare: a, b de tip real


variabile de iesire: m_aritmetica, m_geometrica, m_armonica

- functia programului: programul calculeaza m_aritmetica=(a+b)/2


m_geometrica=sqrt(a*b)
m_armonica=2/(1/a+1/b)

- organizarea datelor de intrare si de iesire: datele de intrare de la tastatură


datele de iesire în fisier de date
3
curs 4
B: să proiecteze programul (să elaboreze mai întâi algoritmul care va realiza
ceea ce se doreste)
1. citeste valorile variabilelor a si b
2. calculează:
2.1. atribuie lui m_aritmetica valoarea expresiei (a+b)/2
2.2. atribuie lui m_geometrica valoarea expresiei sqrt(a*b)
2.3. atribuie lui m_armonica valoarea expresiei 2/(1/a+1/b)
3. scrie datele în fisier
4. stop cuvinte cheie ce corespund instructiunilor existente

Un algoritm presupune o succesiune de etape ce se pot aplica mecanic pentru rezolvarea


unei clase de probleme.

Cerinte: - claritate : fara ambiguitati


- generaliate: pentru o intreaga clasa de probleme
- finitudine: furnizare rezultat in timp finit

Algoritmii pot fi simpli sau complecşi.


Pentru algoritmii complecsi se descompune problemea de rezolvat în subprobleme cu o
complexitate mult mai redusă si se rezolva fiecare subproblema.

Există totusi o serie de modalităti consacrate de specificare a algoritmilor = tehnici de descriere


 pseudocod
 scheme logice

4
curs 4

Pseudocodul = metalimbaj, adică o combinatie între un limbaj de programare de nivel înalt


si un limbaj natural

!! Nu este un limbaj standardizat cu o sintaxă bine precizată.

Exemplu:

citeste a, b;
atribuie m_arit  (a+b)/2;
atribuie m_geom  sqrt(a*b);
atribuie m_arm  2/(1/a+1/b);
deschide fisier f, “c:\\demo\\date.txt”;
scrie în fisier m_arit, m_geom, m_arm;
închide fisier f;
stop;

5
curs 4
Schemele logice = reprezentări grafice, vizuale ale algoritmilor (sub forma unei diagrame
logice).

Blocurile unei scheme logice:

 Start/Stop START STOP

 Date de intrare
Citeste introduceti datele de intrare
a, b

i ia valoarea 2
 Atribuire i=i+2

DA daca conditie (?) e adevarata


 Interogare NU cond. se executa bloc intructiuni 1;
altfel se executa intructiuni 2;

 Subprogram nume
(procedura) procedura 6
Exemplu: SCHEMA LOGICA curs 4
PSEUDOCOD

START

Citeste
a, b
citeste a, b;

atribuie m_arit  (a+b)/2;


m_aritmetica = (a+b)/2
atribuie m_geom  sqrt(a*b);
atribuie m_arm  2/(1/a+1/b);
m_geometrica= sqrt(a*b)
deschide fisier f, “c:\\demo\\date.txt”;
m_armonica= 2/(1/a+1/b) scrie în fisier m_arit, m_geom, m_arm;
închide fisier f;

Scrie m_aritmetica, stop;


m_geometrica,
m_armonica
TEMA: Scrieti programul C corespunzator schemei
TEMA
logice alaturate.
STOP
7
curs 4

Schema logica vs pseudocod

Schema logica
Avantaje Dezavantaje
- indică modul de executie - program complex = schemă logică mult prea mare,
- usor de urmărit dificil de realizat
- descriere vizuală (interes teoretic) - limitarea simbolurilor

Pseudocod
Avantaje Dezavantaje
- limbaj apropiat de codul final - mai putin lizibil (mai greoi)
- flexibilitate a descrierii - posibil să complice anumite descrieri ale unor
- limbaj apropiat de cel natural probleme complexe

 folosim schema logică pentru executie algoritm


pseudocod pentru functii si cod

8
curs 4
Principiile programarii sructurate: Teorema de structură a lui Böhm şi Jacopini

Orice algoritm poate fi compus din numai trei tipuri de structuri de calcul:
1. structura secvenţială - secvenţa
2. structura alternativă - decizia
3. structura repetitivă - ciclul
o singură intrare şi o singură ieşire pentru fiecare

1. Structura secventiala - secvenţa


bloc schema logica operator/instructiune C

- atribuirea de valori i=i+2 operatorul “=” i=i+2;

scanf(”format”, &a, &b);


- citrea si scrierea datelor Citeste printf(”format”, a, b, 15…);
a, b

9
curs 4
2. Structura alternativă - decizia daca conditie adevarata
atunci executa instructiuni_1
altfel executa instructiuni_2

NU cond. DA
daca conditie
atunci instructiuni_1
Instructiuni_2 Instructiuni_1 altfel instructiuni_2

NU DA
cond. daca conditie
atunci instructiuni_1
Instructiuni_1

Ap: Fie 2 numere reale, a si b. Sa se determine maximul Ap: Fie a un intreg. Daca este egal cu 0, atunci se va tipari
dintre ele. mesajul “Am citit zero”.

10
curs 4
Aplicatie: Fie 2 numere reale, a si b. Sa se
determine maximul dintre ele

START START

Citeste Citeste
a si b a si b

NU DA NU DA
a>=b a>=b

max = b max = a
Afiseaza Afiseaza
b a

Afiseaza
max
STOP
STOP

11
curs 4
structura 2. Structura alternativă - decizia

operator/instructiune C

Instructiuni Conditionale si operatori conditionali


- structura if else (dacă ... atunci ...),
- operatorul conditional ? : (echivalent if else),
- structura de selectie switch case (if generalizat)

12
curs 4
Structura if else

 Permite executarea unor instructiuni în functie de valoarea de adevăr a unei expresii

structura alternativa - decizia


NU cond. DA
daca conditie
atunci instructiuni_1
instructiuni_2 Instructiuni_1 altfel instructiuni_2

Sintaxa: if ( expresie ) if ( expresie )


{ {
instrunctiuni_1; instrunctiuni_1;
} }
else
{
instructiuni_2;
}

13
Exemple: curs 4
if (x==100) if (x>0)
{ {
printf(“x are valoarea 100”); printf(“x e pozitiv”);
} }
else else
{ if ( x<0)
printf(“x e diferit de 100”); {
} printf(“x e negativ”);
}
else {
! Daca se foloseste o singura }
printf(“x e 0”);

instructiune acoladele nu mai sunt


necesare.

if (x==100) if (x>0)
printf(“x are valoarea 100”); printf(“x e pozitiv”);
else else
printf(“x e diferit de 100”); if ( x<0)
printf(“x e negativ”);
else
printf(“x e 0”);
14
curs 4
Exemple:

if (x>0) if (x>0)
if (y==5) {
if (z!=14) if (y==5)
printf(“3 conditii adevarate”); if (z!=14)
else printf(“3 conditii adevarate”);
printf(“2 conditii adevarate”); else
else printf(“2 conditii adevarate”);
printf(“1 conditie adevarata”); }
else else
printf(“nici o conditie adevarata”); printf(“din ce if face parte?”);

15
curs 4

! Conventia de evaluare a conditiilor de tip if (variabilă)

if (a) Conditia a este adevarata


a=a+1; daca a!=0
else Conditia a este falsa daca
printf(“ce valoare are a ?”); a=0

Echivalent cu:
if (a!=0)
a=a+1;
else
printf(“ce valoare are a ?”);

16
curs 4

! Conventia de evaluare a conditiilor de tip if (variabilă)

Exemplu

a=2; a=0;

if (a) if (a)
printf(“conditia e adevarata”); printf(“conditia e adevarata”);
else else
printf(“conditia e falsa”); printf(“conditia e falsa”);

se merge pe ramura “DA” se merge pe ramura “NU”

structura
alternativa

17
curs 4
Operatorul conditional ?:
 Operatorul ?: este o scriere prescurtata a structurii if else

Sintaxa: ( conditie ) ? expresie_1 : expresie_2

Mod de executie:
dacă conditie este adevărată returnează expresie_1
dacă conditie este falsă returnează expresie_2

Exemple: x= (3>1) ? 1 : 0; x= 1
x= (-6) ? 1 : 0; x= 1

Observatii:
1. Nu se poate înlocui instructiunea if / if-else cu operatorul conditional în orice situatie.
Acest lucru este posibil doar dacă expresie_1 si expresie_2 returnează o valoare
compatibilă cu tipul variabilei aflată în stânga operatorului de atribuire.
2. In expresie_1 sau expresie_2 nu putem folosi acolade, adica nu pot fi inlocuite de blocuri
de instructiuni.
3. In expresie_1 sau expresie_2 se pot folosi paranteze, iar in paranteze alt operator
18
conditional.
curs 4
Ap1. să se calculeze maximul a două numere întregi x si y cu ajutorul operatorului conditional.
int main() int main()
{ {
int max, x, y; int max, x, y;
… …
max=(x>=y) ? x : y; if (x>=y)
… max=x;
} else
max=y;
}

Ap2. să se calculeze minimul a trei numere întregi x, y si z cu ajutorul operatorului conditional.

int main()
{
int min, x, y, z;

min=( (x<=y)&&(x<=z) ) ? x : ( ((y<=x)&&(y<=z)) ? y : z) ;

}
dacă x este minim dacă y este minim altfel inseamna ca z
returnăm x altfel  returnăm y altfel  e minim 19
curs 4
Structura switch
 Permite integrarea mai multor decizii intr-o singura structura.

Sintaxa:
DA expresie = NU
switch ( expresie ) const1
{ instructiuni1 DA expresie = NU
case const1: const2
instructiuni1; instructiuni2
DA expresie = NU
break; const3
... instructiuni3 ….
case constN:
DA expresie = NU
instructiuniN;
constN
break;
instructiuniN Instructiu
default: instructiune implicită; ni implic.
}

expresie – expresie cu valoare neapărat întreagă sau să poată fi convertită la o val. întreagă
const1,… constN – constante de selectie, cu valori intregi, distincte

20
curs 4
Exemplu:

scanf(“%d”, &x);

switch (x)
{
case 1: dacă x are valoarea 1
printf(“x are valoarea 1”); se afisează ???
break;
case 2:
printf(“x are valoarea 2”); dacă x are valoarea 2
break; se afisează ???
default:
dacă x are valoarea -3
printf(“nu stiu valoare x”);
se afisează ???
}

21
curs 4
Observatii:
- Instructiunea break întrerupe executia instructiunii switch. Dacă instructiuni_n nu este
urmată de break, se continuă executia cu instructiuni_n+1 atasată următoarei etichete.
- Dacă valoarea expresiei nu se regăseste printre etichete, se execută secventa de instructiuni
asociată cu eticheta default. În lipsa acesteia, se finalizează executia instructiunii switch.
- Dacă în instructiunea switch constantele sunt de tip char, automat sunt convertite la întreg
prin codul ASCII corespunzător.

22
curs 4

Exemple:
ce se întâmplă dacă
scanf (“%c”, &litera); omitem corpul unui case ?
se execută până la prima
switch (litera) instructiune break.
{
case ‘a’:
case ‘A’:
printf(“s-a introdus litera a”);
break;
case ‘b’:
case ‘B’:
printf(“s-a introdus litera b”);
break;
case ‘ ’:
nr_spatii++;
- default este optional, dar recomandat.
break;
}

23
curs 4
Limitări:

- Constantele const1,..., constN nu pot să contină expresii sau variabile din program

- Instructiunea switch evaluează doar egalitatea de valori, în timp ce if poate evalua orice
tip de expresie relatională sau logică.

- Într-o instructiune switch nu pot exista mai multe constante case cu valori identice.

24
curs 4
Aplicatie: Sa se realizeze schema logica START
pt. rezolvarea ec de gradul I

ax + b = 0 Citeste
a si b
 date de intare: coeficientii a si b
 date de iesire: solutia ecuatiei
NU DA
a0

NU DA x=-b/a
b0

solutia ecuatie
scrie x
orice numar din  imposibila

STOP
25
curs 4

Aplicatie: Sa se realizeze schema logica


pt. rezolvarea ec de gradul II

ax2 +bx + c =0
 date de intare: coeficientii a, b si c
 date de iesire: solutia ecuatiei

26
27
START curs 4

ax2 +bx + c =0 Citeste


a,b si c

NU DA
a0

=b2-4ac

DA
NU
  0
Se completeaza
cu algoritmul
ecuatiei de grd. I

Tipareste Tipareste
Re, Im “solutiile ec. gr. II”
x1, x2

STOP 28

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