Sunteți pe pagina 1din 6

Laborator 5 Algoritmi fundamentali 1

Structura repetitiva condiționata posterior. Instrucțiunea REPEAT


Instrucţiunea REPEAT este un ciclu cu test final care indică repetarea unei secvenţe de
instrucţiuni în funcţie de valoarea unei expresii.

Instrucţiunea repeat are forma:


REPEAT
secvenţă
UNTIL condiţie;

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

Scrieti algoritmul min (m, n), folosit in algoritmul anterior.

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

3. Se considera doua matrici cu n linii si n coloane. Să se scrie un algoritm care calculează


produsul celor doua matrici si afișează matricea rezultata.
algoritm inmultire(n, k, a[10][10],b[10][10],c[10][10]) // c- matricea rezultat
for i=1 to n
for j = 1 to n
return a[i][j];
end for.; end for.
for i =1 to n
for j = 1 to n
return b[i][j];
end for.; end for.
for i =1 to n
for j = 1 to n
c[i][j]=0;
for k = 1 to n
c[i][j] = c[i][j] + a[i][k]*b[k][j];
for i =1 to n
for j = 1 to n
return c[i][j];
end for.; end for.
end alg.
123 145 19 33 39
135 x 378 = 30 50 59
345 456 35 65 77
Tema: scrieti un algoritm care calculeaza suma a doua matrici.

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.

5. Se da o matrice cu n linii si m coloane (n si m <=100), cu elemente numere naturale distincte.


Sa se scrie un algoritm care gaseste elementul minim si pe cel maxim din matrice și interschimba
linia minimului cu linia maximului.
Exemplu: 1 2 3 4 10 11 12 8
10 11 12 8 min=1, max=12, interschimband linia 1 cu linia2  1 2 3 4
5679 5679
algoritm citire(a[][], n, m)
for i = 1 to n
for j = 1 to m
return a[i][j];
end for; end for; end alg.
algoritm interschimba(x, y)
aux = x;
x = y;
y = aux;
end alg.
algoritm interlin(a[][], m, x, y)
for j=1 to m
interschimba(a[x][j], a[y][j]);
end for; end alg.
algoritm detindici(a[][], n, m, imax, imin)
max = 0; min= maxint; imax=0; imin=0;
Laborator 5 Algoritmi fundamentali 5

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).

6. Se dă un număr natural n. Să se scrie un algoritm care returneaza numarul de factori primi ai


lui n.
Exemplu: pt n=45 returneaza 2 (3 si 5 sunt factorii primi ai lui 45)
alg divprim( n, x)
d=2; x=0;
while(n>1)
if(n%d==0)
x = x + 1;
while(n%d==0)
n=n/d;
else
d = d + 1;
return x;
end alg.

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.

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