Sunteți pe pagina 1din 14

Capitolul III.

Proiectarea algoritmilor
3. Structuri de control ciclice

Enunţ 3.1.4. : Pentru un număr întreg n, diferit de zero, preluat de la consolă, se cere să se calculeze şi
să se afişeze suma şi numărul cifrelor sale în baza 10.
Soluţie 3.1.4. :

start
citeşte n
atribuie n  |n|
atribuie suma_cifre  0
atribuie număr_cifre  0
cât timp n ≠ 0 execută
| atribuie cifra_curentă  *restul împărţirii lui n la 10
| atribuie suma_cifre  suma_cifre + cifra_curentă
| atribuie număr_cifre  număr_cifre + 1
| atribuie n  *câtul împărţirii lui n la 10
|_□
scrie suma_cifre, număr_cifre
stop

Temă : Completaţi soluţia astfel încât afişarea numărului de cifre să fie corectă inclusiv pentru cazul
n=0.
Enunţ 3.3.3 : Se cere ca, pentru o valoare x preluată de la consolă , |x|≤½, să se calculeze valoarea
aproximativă a valorii funcţiei ex , cu o eroare inferioară unui ε precizat.

Se pleacă de la dezvoltarea în serie a funcţiei ex :


x x x2 x3 xk
e  1    
1! 2! 3! k!
care se mai poate scrie :

x xk
 n xk 
e     t k  R n ( x ), tk  , R n (x)   t k
k 0 k! k 0 k! k  n 1

Să notăm cu e_aprox valoarea aproximativă a lui ex. Evident modulul erorii de aproximare care se
face trunchiind suma la n+1 termeni este :

| err | = | ex – e_aprox| = | Rn(x) |

Se poate demonstra că , pentru orice n natural, dacă :


0 < 2| x |  n
atunci :
| Rn(x) | < | tn |
Rezultă că
| tn | < ε => | Rn(x) | = |err| < ε

Observaţii :
1. Condiţia suplimentară impusă ca |x|  ½ face ca majorarea de mai sus să fie valabilă începând
chiar de la n = 1.
2. Calculul termenilor sumei ca raport între o putere a lui x şi un factorial este ineficient din punct
de vedere numeric, de aceea se caută o relaţie de recurenţă.
Soluţie 3.3.2. :

start
citeşte x, ε
dacă |x| <=0.5 atunci
| atribuie t  1
| atribuie k  1
| atribuie e_aprox  1
| repetă
| atribuie t  t*x/k
| atribuie e_aprox  e_aprox + t
| atribuie k  k + 1
| cât timp | t | ≥ ε
| scrie e_aprox
| altfel
| scrie ”Date eronate ! ”
|_□
stop

Temă :
1. Completaţi tabloul de evoluţie a valorilor variabilelor algoritmului pentru cazul x=0.4 şi
ε=0.0001
2. Scrieţi soluţia completă a algoritmului de calcul a valorii aproximative a valorii ex (inclusiv
pentru cazul |x|>½).
3. Modificaţi soluţia astfel încât să se limiteze numărul maxim de iteraţii în care se calculează
aproximarea la o valoare impusă, MAX _ITER = 1000.
4. Date structurate

 Un tip de date defineşte mulţimea valorilor pe care le pot lua datele respective precum şi
mulţimea operaţiilor care se pot executa asupra datelor respective
 Datele care sunt indivizibile în raport cu operaţiile ce se execută asupra lor, se numesc date
simple. O dată simplă poate memora o singură valoare - un număr unic, întreg sau real, o
valoare booleană unică sau un caracter unic. Datele simple aparţin unor tipuri de date
simple
 Tipurile de date rezultate prin organizarea altor tipuri de date, în particular a celor simple, se
numesc tipuri structurate, iar datele ce aparţin unor astfel de tipuri se numesc date
structurate
 Pentru a caracteriza o dată aparţinând unui tip structurat e necesar sa se considere :
- numărul şi tipul elementelor din care poate fi compusă data respectivă
- modul de acces la elementele componente
- posibilitatea adăugării ulterioare de noi componente.

Dintre tipurile structurate cele mai utilizate amintim :


- tipul tablou
- tipul structură
- tipul uniune
- tipul fişier
4.1. Tabloul

 tabloul este o structură omogenă, ce constă dintr-o mulţime cu un număr fixat de


componente de acelaşi tip, numit tip de bază
 fiecare element al unui tablou este accesibil pe baza poziţiei sale în structură, poziţie
precizată prin intermediul unor valori numite indici (indecşi)
 dimensiunea unui tablou este dată de numărul de indici necesari pentru a specifica
poziţia uni element din structură
 după dimensiune, tablourile se clasifică în :
- tablouri unidimensionale (vectori, şiruri)
- tablouri bidimensionale (matrici)
- tablouri multidimensionale
 referirea la elementele unui tablou se face prin intermediul unei aşa-numite variabile
indexate.

Observaţie : În teoria algoritmilor nu există actualmente un standard privitor la modul în care se


construieşte numele unei variabile indexate. De aceea vom folosi o notaţie specifică limbajului C. Astfel
numele unei date indexate se formează plecând de la numele tabloului, urmat, între paranteze drepte
(croşete), de expresiile indiciale adecvate. Suplimentar, se va folosi convenţia din C, în conformitate cu
care indicele tablourilor are ca valoare de start valoarea zero.
Enunţ 4.1.: Pentru un vector x, se preiau de la consolă, numărul n al elementelor sale, precum şi
valorile acestora. Se cere să se afişeze elementele vectorului şi să se determine şi afişeze elementul
maxim şi poziţia acestuia.
Soluţie 4.1. :
start
citeşte n
pentru i = 0, n-1 execută
| citeşte x[i]
|_□
atribuie max  x[0]
atribuie poz_max  0
pentru i = 1,n-1 execută
| dacă x[i] > max atunci
| | atribuie max  x[i]
| | atribuie poz_max  i
| |_□
|_□
pentru i = 0 , n-1 execută
| scrie x[i]
|_□
scrie max
scrie poz_max
stop
Enunţ 4.2 : Pentru un vector v cu n elemente să se ordoneze crescător elementele sale folosind sortarea
prin interschimbare.

Indicaţie : Metoda presupune compararea fiecărui element al şirului, de la primul, la penultimul, cu


toate elementele care îi urmează, interschmbând elementele ori de câte ori acestea nu respectă relaţia de
ordonare.
Soluţie 4.2. :

start
citeşte n
pentru i = 0 , n - 1 execută
| citeşte v[i]
|_□
pentru i = 0 , n - 2 execută
| pentru j = i +1, n-1 execută
| | dacă v[i] > v[j] atunci
| | | atribuie aux  v[i]
| | | atribuie v[i]  v[j]
| | | atribuie v[j]  aux
| | |_□
| |_□
|_□
pentru i = 0 , n - 1 execută
| scrie v[i]
|_□
stop
Enunţ 4.3 Fie un vector x cu n elemente. Să se construiască în memorie şi apoi să se afişeze un nou
vector y care să conţină doar elementele pare din vectorul x.
Soluţie 4.3. :

start
citeşte n
pentru i = 0, n-1 execută
| citeşte x[i]
|_□
atribuie j  0
pentru i = 0, n-1 execută
| dacă * restul împărţirii lui x[i] la 2 = 0 atunci
| | atribuie y[j]  x[i]
| | atribuie j  j + 1
| |_□
|_□
dacă j ≠ 0 atunci
| pentru i = 0 , j-1 execută
| | scrie y[i]
| |_□
altfel
| scrie “Nu sunt elemente pare !”
|_□
stop
Enunţ 4.4 : Fie o matrice A, cu m linii şi n coloane, m şi n preluate de la consolă. Să se citească
elementele matricii, să se afişeze matricea, să se calculeze şi afişeze suma şi produsul elementelor
matricii .
Soluţie 4.4. :

start
citeşte m,n
pentru i = 0 , m-1 execută
| pentru j = 0 , n-1 execută
| | citeşte a[i][j]
| |_□
|_□
atribuie s  0
atribuie p  1
pentru i = 0 , m-1 execută
| pentru j = 0 , n-1 execută
| | atribuie s  s + a[i][j]
| | atribuie p  p * a[i][j]
| |_□
|_□
pentru i = 0 , m-1 execută
| pentru j = 0 , n-1 execută
| | scrie a[i][j]
| |_□
|_□
scrie s , p
stop

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