Documente Academic
Documente Profesional
Documente Cultură
1
curs 4
2
curs 4
A: să analizeze problema de rezolvat stabilind specificatia programului
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ă.
4
curs 4
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).
Date de intrare
Citeste introduceti datele de intrare
a, b
i ia valoarea 2
Atribuire i=i+2
Subprogram nume
(procedura) procedura 6
Exemplu: SCHEMA LOGICA curs 4
PSEUDOCOD
START
Citeste
a, b
citeste a, b;
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
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
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
12
curs 4
Structura if else
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”);
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
Echivalent cu:
if (a!=0)
a=a+1;
else
printf(“ce valoare are a ?”);
16
curs 4
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”);
structura
alternativa
17
curs 4
Operatorul conditional ?:
Operatorul ?: este o scriere prescurtata a structurii if else
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;
}
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
a0
NU DA x=-b/a
b0
solutia ecuatie
scrie x
orice numar din imposibila
STOP
25
curs 4
ax2 +bx + c =0
date de intare: coeficientii a, b si c
date de iesire: solutia ecuatiei
26
27
START curs 4
NU DA
a0
=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