Documente Academic
Documente Profesional
Documente Cultură
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.
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 :
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.
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