Documente Academic
Documente Profesional
Documente Cultură
Unde secvenţă reprezintă instrucţiunile din corpul instrucţiunii REPEAT, trebuie să fie de tip
boolean şi se evaluează după fiecare iteraţie.
Atenţie: spre deosebire de While, ieşirea din această instrucţiune se face atunci cînd valoarea
condiţiei este True.
Principiul de execuţie:
se execută secvenţa de instrucţiuni;
se evaluează expresia logică;
dacă rezultatul evaluării este FALSE atunci se execută din nou secvenţa de instrucţiuni,
în caz contrar se trece mai departe;
secvenţa de instrucţiuni se execută cel putin o dată, după care se pune problema reluării
sau nu a execuţiei, după evaluarea expresiei logice.
1. Se da un numar n. Sa se scrie un algoritm care calculeaza suma s= 1/2 + 1/3 + 1/4 +...+1/n si
produsul p=n!.
algoritm sumafact (n, s, p) //date de intrare = n, date de iesire = s, p
s = 0; p = 1; i = 1;
repeat
i = i + 1;
s = s + 1/i
p = p *i;
until i == n
return s;
return p;
end alg.
Laborator 5 Algoritmi fundamentali 2
Aplicații de laborator
2. Fie polinoamele p si q, având gradele m si respectiv n. Să se scrie un algoritm care calculează
suma celor doua polinoame.
OBS. Adunarea a doua polinoame este asemanatoare cu adunarea numerelor mari.
algoritm sumapoli (m, n, p, q, d, r) // r = polinomul suma, d = gradul polinomului suma
for i = 1 to min (m, n)
r[i]= p[i] + q[i];
end for.
If (m < n)
d=n; // d ia valoarea gradului cel mare
for i = m+1 to n
r[i]= p[i];
end for.
End if.
If (m > n)
d=m;
for i = n+1 to m
r[i]= q[i];
end for.
else
d=m;
while (p[d]+q[d]==0) and (d>=0)
d = d -1;
end while.
end if.
end alg.
p= 3 X^6 + X^5+0X^4+2X^3 + X
p + q= 5 X^6 + 5X^5 + X^4 + 2X^3 +2X
q = 2X^6 + 4X^5+X^4 +0X^3 + X
Tema: scrieti un algoritm care calculeaza produsul a doua polinoame si transcrieti algoritmul
anterior, putand sa-l rulati, explicati/interpretati rezultatele.
Laborator 5 Algoritmi fundamentali 3
4. Adunarea numerelor mari. Numerele naturale cu foarte multe cifre se pot memora cu ajutorul
vectorilor. Sa se calculeze si sa se returneze adunarea a doua numere naturale memorate în doi
vectori, a si b, cu n si respectiv m elemente.
Algoritm adunare(a[n], b[m], n, m, s[n+m], p) //p=numarul maxim de cifre
p=n;
if(n<m)
p=m; // nr max de cifre
for i = 1 to n
a[p-i+1]= a[n-i+1]; //mut elem pentru a putea completa cu 0 in dreapta vectorului
end for.
for i = 1 to p-n
a[i]=0 //completez cu 0
else
p=n; //nr max de cifre
for i = 1 to m
b[p-i+1]= b[n-i+1]; //mut elem pentru a putea completa cu 0 in dreapta vectorului
Laborator 5 Algoritmi fundamentali 4
end for.
for i = 1 to p-m
b[i]=0 //completez cu 0
end for
end if.
t=0;
for i = p downto 1
c=a[i]+b[i]+t; //adun cifra cu cifra
s[i]=c%10; //restul se pune
t=c/10; //catul e transport
end for.
if(t==1) // a ramas transport
p = p + 1; //avem cu o cifra mai mult
for i =
s[p] = t;
end if.
end alg.
Tema: Având exemplul de mai sus, scrieți un algoritm care calculează diferența a doua numere
naturale mari.
citire(a, n, m);
for i = 1 to n
for j = 1 to m
if a[i][j]> max
max= a[i][j];
imax= i;// imax salvam linia curecta cu elementul maxim
end if
if a[i][j]< min
min= a[i][j];
imin= i;
end if
end for; end for;
return interlin(a[][], m, imin, imax)
end alg.
Tema. Avand ca exemplu problema anterioara, sa se scrie un algoritm care determina minimul si
maximul de pe coloane, interschimbâd coloanele între ele (coloana cu elementul minim se
interschimbă cu cea care contine elementul maxim).
7. Se da un numar natural n. Scrieti un algoritm care returneaza: 1 daca numarul n are mai multe
cifre pare decat impare, 0 daca numarul n are la fel de multe cifre pare ca si impare si -1 daca
numarul n are mai putine cifre pare decat impare
Exemplu: pentru n=234523 functia va returna 0
algoritm numar(n)
p=0,i=0;
while(n>0)
if(n%2==0)
Laborator 5 Algoritmi fundamentali 6
p = p +1;
else
i = i + 1;
end if.
n=n/10;
end while.
if(p>i)
return 1;
else if(p==i)
return 0;
else return -1;
end if.
end alg.
8. Se dă un vector cu n elemente numere intregi, n fiind cel mult egal cu 1000. Să se scrie un
algoritm care calculează si returnează cate dintre elementele vectorului sunt egale cu diferenta
dintre cel mai mare si cel mai mic element din vector.
Exemplu: Pentru n=7 si vectorul cu elementele {5, 4, 5, 2, 7, 6, 5} se va afisa 3 (5 apare de 3 ori
si e egal cu diferenta dintre 7 si 2).
algoritm vector(a[], n, min, max)
c = 0;
min=max=A[1];
for i = 2 to n
if(A[i]>max)
max=A[i];
if(A[i]<min)
min=A[i];
end for.
For i = 1 to n
if((max-min)==A[i])
c = c + 1;
return c;
end alg.
Tema: Să se scrie un algoritm care calculează si returnează cate dintre elementele vectorului
sunt egale cu ultima cifra a sumei dintre cel mai mare si cel mai mic element din vector.