Sunteți pe pagina 1din 19

PROGRAMAREA Enunţuri standard

CALCULATOARELOR SI
LIMBAJE DE
PROGRAMARE I
2010/2011 - Suceava

PSEUDOCOD
Reprezentarea Citirea
operaţiilor de
bază
Atribuirea

Scrierea

Oprirea
PROGRAMAREA
CALCULATOARELOR SI Există trei tipuri de structuri fundamentale care eflectă
LIMBAJE DE cele trei tipuri de raţionamente umane elementare:
PROGRAMARE I • Secvenţa,
• Decizia,
2010/2011 - Suceava • Repetiţia.

Aceste structuri controlează la un nivel superior execuţia


operaţiilor algoritmului.
PSEUDOCOD
Reprezentarea
Structura secvenţială
structurilor de
control Este formată dintr-un grup de operaţii simple şi/sau
alte structuri de control ce se execută în mod
secvenţial.

int a, b, suma
scrie “\nIntrodu doua valori: “
citeste a, b
suma = a+b
scrie “\nsuma = “, suma
stop
PROGRAMAREA
CALCULATOARELOR SI ¨
Structura decizională
LIMBAJE DE
PROGRAMARE I Sunt posibile următoarele forme de structură decizionale
care exprimă o decizie ce trebuie luată în cursul
2010/2011 - Suceava execuţiei unui algoritm.

Decizionala. Forma I
PSEUDOCOD dacă <condiţie> atunci <operaţie_de_bază> n

Reprezentarea Execuţie:

structurilor de
- se evaluează expresia logică <condiţie>
- dacă rezultatul este adevărat se execută <operaţie_de_bază>,
control altfel se trece la structura următoare din algoritm.

Decizionala. Forma II
┌ dacă <condiţie> atunci
│ <secventă>

└ n

Execuţie:
- se evaluează expresia logică <condiţie>
- dacă rezultatul este adevărat se execută <secvenţă>, altfel
se trece direct la structura următoare.
PROGRAMAREA
CALCULATOARELOR SI ¨ Decizionala. Forma III
┌ dacă <condiţie> atunci
LIMBAJE DE │ <secvenţa_1>
PROGRAMARE I │ altfel
│ <secvenţa_2>
2010/2011 - Suceava │
└ n

PSEUDOCOD Execuţie:
- se evaluează expresia logică <condiţie>
- dacă rezultatul este adevărat se execută <secvenţa_1>,
Reprezentarea altfel se execută <secvenţa_2>.
structurilor de - se trece apoi la secvenţa următoare.

control Observaţie.
Nu este corectă utilizarea unei structuri decizionale care
să aibă doar ramura altfel, ramura atunci fiind vidă.

Observatie In astfel de situaţii se înlocuieşte <condiţie> cu negata ei


şi se utilizează varianta Forma II.
In cadrul unei <conditii> putem folosi:
- Operatorii aritmetici
+, -, *, /, %,
- Operatorii logici
SI ( && ), SAU ( || )
- Operatorii relationali
<, <=, >, >=, ==
PROGRAMAREA
Rezolvarea ecuatiei de gradul I
CALCULATOARELOR SI
LIMBAJE DE
float A, B
PROGRAMARE I scrie "\nRezolvare ec gr. I: Ax + b = 0"
2010/2011 - Suceava scrie "\nIntrodu A, B: "
citeste A, B

daca A == 0 atunci
PSEUDOCOD daca B == 0 atunci
scrie "\nO infinitate de solutii"
Reprezentarea altfel
structurilor de scrie "\nFara solutii"
@
control altfel
scrie "\nX = ", -B/A
@
stop
PROGRAMAREA
Rezolvarea ecuatiei de gradul II
CALCULATOARELOR SI
float A, B, C, delta
LIMBAJE DE scrie "\nRezolvare ec gr. I: Ax^2 + Bx + C = 0"
PROGRAMARE I scrie "\nIntrodu A, B, C: "
citeste A, B, C
2010/2011 - Suceava
daca A == 0 atunci
daca B == 0 atunci
daca C == 0 atunci
PSEUDOCOD scrie "\nO infinitate de solutii"
altfel
Reprezentarea scrie "\nFara solutii"
@
structurilor de altfel
scrie "\nX = ", -C/B
control
@
altfel
delta = B*B - 4*A*C
daca delta >= 0 atunci
scrie "\nX1 = ", (B*B + sqrt( delta ))/2/A
scrie "\nX2 = ", (B*B - sqrt( delta ))/2/A
altfel
scrie "\nX1 = ", (B*B)/2/A, "+i", sqrt(-delta)/2/A
scrie "\nX2 = ", (B*B)/2/A, "-i", sqrt(-delta)/2/A
@
@
stop
PROGRAMAREA Structura repetitivă
CALCULATOARELOR SI ¨ Structurile repetitive permit comanda execuţiei
LIMBAJE DE repetate a unei secvenţe funcţie de respectarea unei
anumite condiţii de oprire.
PROGRAMARE I Există trei forme distincte de repetiţii:
2010/2011 - Suceava cu test iniţial,
cu test final şi
cu contor.

PSEUDOCOD Structura repetitivă cu test iniţial


┌ cât timp <condiţie> execută
Reprezentarea │
└ n
<secvenţa>

structurilor de
control Explicatie

1. Testul de oprire, notat aici <condiţie>, este verificat înainte de a


se începe fiecare execuţie a secvenţei.

2. Dacă rezultatul este FALS atunci nu se mai execută secvenţa şi


se trece direct la structura următoare.

3. După cum arată şi numele structurii <secvenţa> este executată


cât timp condiţia este ADEVARATA.

4. Există posibilitatea ca <secvenţa> să nu fie executată niciodată


dacă se obţine pentru <condiţie> valoarea FALS de la prima
evaluare.
PROGRAMAREA
¨ Structura repetitivă cu test final
CALCULATOARELOR SI
LIMBAJE DE Există două variante permise pentru acest tip de
structură:
PROGRAMARE I
2010/2011 - Suceava ┌ repetă ┌ repetă
│ <secvenţa> │ <secvenţa>
└ cât timp <condiţie> └ până când <condiţie>

PSEUDOCOD Pentru ambele forme, în primul rând se execută


<secvenţa>, apoi se evaluează <condiţie>.
Reprezentarea
structurilor de Din acest moment, apar diferenţe între execuţiile acestor
variante de structuri repetitive cu test final:
control • în cazul primei formei, dacă rezultatul este
ADEVARAT, se reia execuţia secvenţei, altfel se
trece la următoarea structură;
• în cazul formei a doua, dacă rezultatul este FALS
se execută încă o dată <secvenţa> .
Observatii
1. Condiţia de oprire este verificată după ce se execută După cum sugerează şi numele lor,
<secvenţa>. • prima forma asigură execuţia secvenţei din
2. Acest lucru face ca indiferent de forma, <secvenţa> interior cât timp condiţia este ADEVARAT, iar
să fie executată cel puţin o dată. • forma a doua execută până când <condiţie> ia
3. Acest aspect le deosebeşte net de structura repetitivă valoarea ADEVARAT.
cu test iniţial.
PROGRAMAREA
CALCULATOARELOR SI ¨ Structura repetitivă cu contor
LIMBAJE DE Repetarea execuţiei implică la această structură şi modificarea
PROGRAMARE I valorii unei variabile numite contor.
Această variabilă ia pe parcursul execuţiei valori într-un interval
2010/2011 - Suceava închis [val_iniţială, val_finală] precizat în corpul structurii.

PSEUDOCOD ┌ pentru <contor> = <val_inită>, <val_fin> [,<pas>] execută



│ <secvenţa>
Reprezentarea └─n

structurilor de
control Observatii
1. Parantezele [ şi ] denotă faptul că ceea ce este cuprins între ele este
opţional.
2. Valoarea expresiei <pas> reprezintă incrementul cu care este
modificată valoarea variabilei <contor> după fiecare execuţie a
secvenţei.
3. Dacă nu este prezentă în mod explicit atunci valoarea incrementului
este 1.
4. De reţinut că incrementul poate lua valori pozitive sau negative.
PROGRAMAREA Execuţia structurii pentru în cazul pas>0
CALCULATOARELOR SI ¨
LIMBAJE DE i) se iniţializează <contor> cu <val_iniţială>;
PROGRAMARE I ii) se verifică dacă valoarea contorului este mai mică sau egală
cu <val_finală>.
2010/2011 - Suceava In situaţia în care această inegalitate nu este respectată,
execuţia structurii pentru se termină şi se trece la următoarea
structură de control din algoritm.
iii) dacă inegalitatea este respectată se execută <secvenţa>;
PSEUDOCOD iv) se execută <contor> = <contor> + <pas> ;

Reprezentarea v) se reia cu pasul ii).

structurilor de
control Execuţia structurii pentru cazul în care pas<0

i) se iniţializează <contor> cu <val_iniţială>;


ii) se verifică dacă valoarea contorului este mai mare sau
egală cu <val_finală>.
In situaţia când această inegalitate nu este respectată
execuţia structurii pentru se termină şi se trece la
următoarea structură de control;
Observaţie.
Dacă pasul este negativ, atunci valoarea iii) dacă inegalitatea este respectată se execută <secvenţa>;
iniţială trebuie să fie mai mare decât iv) se execută <contor> = <contor> + <pas>;
valoarea finală.
v) se reia cu pasul ii).
PROGRAMAREA
CALCULATOARELOR SI ¨ Enunţuri nestandard
LIMBAJE DE Acest tip de enunţuri servesc în mod frecvent la indicarea unor prelucrări
ce nu sunt încă evidenţiate prin enunţuri standard.
PROGRAMARE I
Forma generală a unui enunţ nestandard este următoarea:
2010/2011 - Suceava
*) <text_scris_în_limbaj_natural>

┌ pentru i=2,n execută


PSEUDOCOD │ ┌ dacă x(i)>x(i-1) atunci
│ │ *) schimbă între ele x(i-1) şi x(i)
Reprezentarea │ │
│ └ n
schimb=1

structurilor de └ n

control Observatie
Enunţul nestandard *)schimbă între ele x(i-1) şi x(i) poate fi
înlocuit prin secvenţa de enunţuri standard

*)schimbă între ele x(i-1) şi x(i) este

salv = x(i-1)
x(i-1) = x(i)
x(i) = salv
PROGRAMAREA
CALCULATOARELOR SI ¨ Exemplul I
Calculul sumei mai multor numere întregi.
LIMBAJE DE
Numerele vor fi citite de la dispozitivul de intrare
PROGRAMARE I pînă ce se va introduce o valoare nulă.
2010/2011 - Suceava
Soluţie.
1. Algoritmul va iniţializa cu 0 o variabilă numită suma.
2. Pe măsură ce numerele vor fi citite de la dispozitivul de
intrare, vor fi adunate la această variabilă.
PSEUDOCOD
int x, suma

Exemple de suma=0
scrie “Introdu un sir terminat cu 0”
algoritmi //citeşte x
┌ repetă
│ citeşte x
│ suma = suma + x
└ până când x==0
scrie "Suma= ", suma

stop
PROGRAMAREA
CALCULATOARELOR SI ¨ Exemplul II
LIMBAJE DE Calculul lui N!. Solutia data va folosi metoda de
calcul a factorialului in varianta iterativa.
PROGRAMARE I N! = 1*2*3* … *N
2010/2011 - Suceava
Definitii Iterativitate := Repetarea unui acelasi set de
operaţii asupra unor date diferite
Recursivitate := Repetarea unui set de operaţii,
asupra datelor obţinute la iteraţia anterioară
PSEUDOCOD
Observatie.
Structura decizională dacă a fost necesară pentru a preveni
Exemple de afişarea unui rezultat absurd ca urmare a unei greşeli de
introducere a datelor..
algoritmi
int n,f
citeşte n
┌─dacă n<0 atunci
│ scrie "Număr ilegal"
│ altfel
│ f=1
│ ┌ pentru i=2,n execută
│ │ f=f*i
│ └─n
│ scrie n,"!=",f
└n
stop
PROGRAMAREA
CALCULATOARELOR SI ¨ Exemplul III
Scrieţi un algoritm care citeste elementele unui vector
LIMBAJE DE şi determia valoarea minimă a acestor elemente cat şi
poziţia ei în vector.
PROGRAMARE I
float x(20), xmin
2010/2011 - Suceava int i,n,l
citeşte n
┌─pentru i=1,n execută
│ citeşte x(i)
PSEUDOCOD └ n
xmin=x(1)
l=1
┌ pentru i=2,n execută
Exemple de │ ┌ dacă xmin>x(i) atunci
│ │ xmin = x(i)
algoritmi │ │ l=i
│ └ n
└ n
scrie "Min=", xmin, " se află pe poziţia", l,
l=1 stop
┌ pentru i=1,n execută
TEMA:
│ citeşte x(i)
Rezolvati algoritmul intr-o singura structura repetitiva,
│ dacă x(l) > x(i) atunci l=i n
fara memorarea elementelor
└─n
scrie "Min=",x(l),"pe poziţia",l
Observaţie:
stop
Programul putea fi construit cu ajutorul unei singure
structuri pentru şi chiar fără utilizarea unei variabile
suplimentare
PROGRAMAREA
CALCULATOARELOR SI ¨ Exemplul IV
Scrieţi un algoritm care să citească o matrice pătrată de
LIMBAJE DE numere reale şi să înlocuiască elementele aii de pe diagonala
principală cu media aritmetică a elementelor de pe linia i.
PROGRAMARE I
float A[20,20]
2010/2011 - Suceava int i,j,n
citeşte n
┌─pentru i=1,n execută
│ ┌─pentru j=1,n execută
PSEUDOCOD │ │ citeşte A[i,j]
│ └ n
└ n
┌─pentru i=1,n execută
Exemple de │ S=0
algoritmi │ ┌─pentru j=1,n execută
│ │ S=S+A[i,j]
│ └ n
│ A[i,i]=S/n
└ n
… tema individuala …
*) afişare matrice
stop

Observatie
Enunţul nestandard din algoritmul de mai sus se
explicitează printr-o secvenţă asemănătoare cu cea
utilizată la citirea matricii.
PROGRAMAREA
CALCULATOARELOR SI ¨ Exemplul V
Să se scrie un algoritm care să determine şi să afişeze factorii
LIMBAJE DE primi ai unui număr introdus de utilizator.

PROGRAMARE I Soluţie
Ideea acestui algoritm este dată în următoarea reprezentare,
2010/2011 - Suceava conţinând şi enunţuri pseudocod nestandard, care constituie o
primă abordare a problemei:

citeşte N
PSEUDOCOD D = 2
┌ repetă
│ *) diviz. repetată (de E ori) a lui N cu D
│ dacă E>0 atunci scrie D, En
│ *) treci la următorul D
Exemple de └ până când N = 1

algoritmi
stop

*) diviz. Repetată ... este:


E = 0
Observatie ┌ cât timp *) N divizibil cu D execută
│ N = N / D
1. După cum se observă, în prima explicitare, a │ E = E + 1
mai rămas un singur enunţ nestandard de └ n
*) treci la următorul D este :
explicitat : "N este divizibil cu D".
┌─ dacă D = 2 atunci
│ D = D + 1
2. Acesta va fi explicitat prin instrucţiunile │ altfel
limbajului de programare, utilizând funcţia │ D = D + 2
INT(x) care returnează parte întreagă din x. └ n
PROGRAMAREA
CALCULATOARELOR SI 1) Scrieţi un algoritm care să determine maximul din trei
numere întregi.
LIMBAJE DE
PROGRAMARE I 2) Concepeţi un algoritm care să determine vârsta unei
persoane în ani, luni şi zile, pe baza datei de naştere şi a
2010/2011 - Suceava
datei curente.

3) Scrieţi un algoritm care să citească un şir de numere


PSEUDOCOD întregi, să calculeze suma elementelor pozitive şi să afişeze
valoarea acestei sume şi elementele negative din şir.
4) Scrieţi un algoritm care să realizeze produsul scalar a doi
TEME vectori x şi y de dimensiune n:

p = ∑xi • yi
n

i=1

5) Scrieţi algoritmul de rezolvare a unui sistem de două


ecuaţii cu două necunoscute.

6) Scrieţi algoritmul ce calculează valoarea unui polinom de


gradul n, P(x), pentru o anumită valoare a lui x. Se vor citi
gradul polinomului, coeficienţii săi şi valoarea x.
PROGRAMAREA
CALCULATOARELOR SI 7) Dezvoltaţi algoritmul anterior astfel încit să realizaţi o
LIMBAJE DE tabelare a valorilor unui polinom de grad n, P(x) , pentru x
PROGRAMARE I luând valori într-un interval închis [a,b] cu pasul de afişare p.
Afişarea produsă va fi de forma :
2010/2011 - Suceava
x P(x)
----------- -------------
a P(a)
PSEUDOCOD a+p P(a+p)
: :
b P(b)
TEME ----------- -------------
( In afişarea de mai sus s-a presupus că b = a + k * p ) cu k ε N.

8) Scrieţi un algoritm care să calculeze valoarea derivatei în


raport cu x a unei funcţii polinomiale de grad n într-un punct
x0.

9) Scrieţi un algoritm care să calculeze valoarea polinomului


R(x) unde R(x)= P(x) * Q(x), iar P(x) şi Q(x) sunt polinoame
de grad n şi respectiv m.
PROGRAMAREA
CALCULATOARELOR SI 10) Scrieţi un algoritm care să ordoneze crescător numai
LIMBAJE DE elementele pozitive ale unui şir.
PROGRAMARE I Nota:
2010/2011 - Suceava Acest algoritm va fi realizat în două variante. Intr-o primă
variantă se va forma un şir separat ce conţine doar elementele
pozitive ale şirului iniţial şi se va ordona crescător acest nou şir,
aşa cum s-a arătat la curs.
PSEUDOCOD Exemplu :
şir_iniţial = 19, -2, 5, 7, -1, 3
şir_rezultat = 3, 5, 7, 19
Algoritmul va afişa doar şir_rezultat.
TEME
In a doua variantă veţi încerca ordonarea elementelor pozitive ale
şirului iniţial astfel încât elementele negative să-şi păstreze
nemodificată poziţia lor în şir.
Exemplu:
Presupunând acelaşi şir iniţial se va afişa:
şir_rezultat = 3, -2, 5, 7, -1, 19

Si această variantă poate fi rezolvată la rândul ei în două


moduri: utilizând un vector suplimentar sau nu.

Rezolvaţi această problemă în toate variantele prezentate.

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