Sunteți pe pagina 1din 10

Laborator 7 Algoritmi fundamentali 1

Aplicații de laborator
1. Se dă un vector v, cu n elemente, numere naturale. Să se scrie un algoritm care inserează un
element x, pe prima poziție a vectorului.
algoritm pozitie(v[100], n, x)
for i = 1 to n
return v[i];
end for;
n=n+1; //creare "loc" nou
for i = n downto 2 //mutare elemente la dreapta
v[i]=v[i-1];
end for;
v[1]=x; // inserarea pe prima pozitie
for i = 1 to n //afisare
return v[i];
end for; end alg;
2. Se dă un vector a cu n (n<=1000) elemente numere naturale. Să se scrie un algoritm care
returnează numarul de perechi de două elemente din vector care au suma divizibila cu n.
Exemplu: n=4, A={2, 6, 8, 10} => 3, adica perechile (2, 6) , (2, 10) si (6,10)
algoritm perechi(a[], n, ct)
ct=0;
for i = 1 to n
return a[i];
for i = 1 to n-1
for j=i+1 to n
if((A[i]+A[j])%n==0)
ct = ct + 1;
end if;
end for; end for;
Laborator 7 Algoritmi fundamentali 2

return ct;
end alg.
3. Se dă un vector cu n elemente numere intregi, n <= 1000. Să se scrie un algoritm care
parcurge și returnează elementele vectorului astfel: primul, ultimul, al doilea, penultimul, ...
Exemplu: Pentru n=7 si vectorul cu elementele {5, 4, 5, 2, 7, 6, 5} se vor afisa
numerele: 5 5 4 6 5 7 2
algoritm numere(a[], n)
for i = 1 to n
return a[i];
end for;
i=1, j=n;
while(i<j)
return a[i];
return a[j];
i = i + 1; j = j - 1;
end while;
if(i==j)
return a[i];
end if;
end alg;
4. Se dă un numar natural n cu cel mult 9 cifre. Să se scrie un algoritm care returnează suma
numerelor care se pot construi din n prin permutarea cifrelor sale.
Exemple:
pentru n=123  numerele obținute din permutarea cifrelor lui n: 123, 132, 213, 231, 312 si 321,
iar suma lor este 1332
algoritm fact(n) //calculeaza n!
p=1;
for i = 1 to n
p=p*i;
Laborator 7 Algoritmi fundamentali 3

end for;
return p;
end alg.
algoritm permutare(n, a[], s[])
t=0; sc=0;
k=0;
while(n != 0)
a[k+1]=n%10;
n=n/10;
k = k+1;
end while;
n=k;
//calculeaza suma de (n-1)!*cifra pt fiecare cifra
For i = 1 to n
sc = sc + fact(n-1)*a[i];
//aduna cifra cu cifra (si transport)
For i = 1 to n
s[i]=(sc+t)%10; //retin cifra
t=(sc+t)/10; //retin transportul
end for;
if(t>0) // a ramas transport
n = n + 1; //il pun in fata
s[n]=t;
end if;
for i = n downto 1 //afisez invers numarul
return s[i];
end for;
end alg.
Laborator 7 Algoritmi fundamentali 4

// Varianta fara permutări ale cifrelor numărului n


algoritm suma(n)
c=n
nr=0
s=0
while(c>0)
nr++;
c=c/10;
endwhile
while(n>0)
nrn=nr
p=1
while(nrn<0)
s=s+n%10*p*(nrn-1)
p=p*10;
nrn--;
endwhile
n=n/10;
endwhile
return s;
end alg

5. Sa se scrie un algoritm care adauga intr-un vector liniile unei matrici a, cu n linii si m coloane,
linie dupa linie.
Exemplu:
2345
2468 v[i]={2 3 4 5 2 4 6 8 4 5 7 1}
4571

algoritm linie (a[][], v[], n, m)


Laborator 7 Algoritmi fundamentali 5

for i=1 to n
for j=1 to m
return a[i][j];
end for; end for;
k=1;
for i=1 to n
for j=1 to m
v[k]=a[i][j];
k = k +1;
end for; end for;
for i=1 to k
return v[i];
end for;
end alg.
// varianta a II-a
for k = 1 to m*n
for i=1 to n
for j=1 to m
v[k]=a[i][j];
end for; end for;
for k = 1 to n*m
return v[k];
end for;
end alg.
6. Se da o matrice cu n linii si m coloane cu elemente numere naturale. Sa se returneze
elementele din matrice care au proprietatea ca sunt egale cu c.m.m.d.c. (cel mai mare divizor
comun) al sumei elementelor liniei i si produsul elementelor coloanei j.
Exemplu:
n=3, m=3
Laborator 7 Algoritmi fundamentali 6

556
456 Elementele care respecta cerinta sunt 5, 3, 1
315

algoritm sumaprod (a[][], n, m, )


for i = 1 to n
for j = 1 to m
return a[i][j];
end for; end for;
for i = 1 to n
for j = 1 to m
s=0;
for k = 1 to n
s = s + a[i][k];
p=1;
for k = 1 to m
p = p * a[k][j];
while(p!=0) // sau algoritm cmmdc scăderi repetate
r= s % p;
s=p;
p=r;
end while;
if(s==a[i][j])
return s;
end if;
end alg;
//var II
int cmmdc(int i, int j)
Laborator 7 Algoritmi fundamentali 7

{
while(i!=j)
if(i>j)
i= i - j;
else
j= j - i;
return i;
}
void numerespeciale(int a[10][10],int n,int m)
{
int i,j,s,p;
for (i=1,i<=n,i++)
{
for (j=1,j<=m,j++)
{
s = 0;
p = 1;
for (int j2 = 1,j2 <= m, j2++) s+= a[i][j2];
for (int i2 = 1,i2 <= n, i2++) p*= a[i2][j];
if(a[i][j]==cmmdc(s,p)) cout<<a[i][j]<<' ';
}
}

7. Se dă o matrice cu n linii si m coloane, formată din elemente numere naturale, fiecare element
având cel mult 6 cifre. Să se scrie un algoritm care numără câte elemente din matrice au
proprietatea ca au toti vecinii pari. Se vor lua in considerare vecinii de pe linie si de pe coloana.
Algoritm vecinpar(a[][],n,m)
For i = 1 to n
For j = 1 to m
Laborator 7 Algoritmi fundamentali 8

return a[i][j];
//bordez matricea cu 0
for i=0 to n+1
a[i][0]= 0
a[i][m+1]=0;
for j = 0 to m+1
a[0][j]=0
a[n+1][j]=0;
k=0;
for i = 1 to n
for j = 1 to m
if(a[i][j-1]%2==0 && a[i][j+1]%2==0 && a[i-1][j]%2==0 && a[i+1][j]
%2==0) //&& = and
k = k + 1;
return k;
end alg.

00000
05560
04560
03150
00000

// varianta Vlad Surubariu in C++


#include<iostream>
using namespace std;
int main()
{
int a[50][50], i, j,m,n,nr=0;
cin >> n >> m;
for (i = 0;i < n;i++)
Laborator 7 Algoritmi fundamentali 9

for (j = 0;j < m;j++)


cin >> a[i][j];
for(i=0;i<n;i++)
for (j = 0;j < m;j++)
{
if (i == 0)
{
if ((a[i][j - 1] % 2 == 0) && (a[i][j + 1]) % 2 == 0)
if (a[i + 1][j] % 2 == 0)
nr++;
if ((j == 0)||(j==m))
if ((a[i][j + 1] % 2 == 0) && (a[i + 1][j] % 2 == 0))
nr++;
}
if (j == 0)
{
if (i == n)
if ((a[i - 1][j] % 2 == 0) && (a[i][j+1]%2==0))
nr++;
if ((a[i - 1][j] % 2 == 0) && (a[i + 1][j] % 2 == 0))
if (a[i][j + 1] % 2 == 0)
nr++;
}
if((i==n-1)&&(j==m-1))
if((a[i-1][j]%2==0)&&(a[i][j-1]%2==0))
nr++;
if ((i == n - 1)&&((j!=1)&&(j!=m)))
if ((a[i][j - 1] % 2 == 0) && (a[i][j + 1]) % 2 == 0)
if (a[i-1][j] % 2 == 0)
nr++;
if ((j == m-1) && ((i != 1) && (i != n)))
if ((a[i - 1][j] % 2 == 0) && (a[i + 1][j] % 2 == 0))
if (a[i][j -1] % 2 == 0)
nr++;
}
cout<<nr;

}
Laborator 7 Algoritmi fundamentali 10

Tema laborator
1. Se dă un vector, cu n elemente, numere naturale. Să se scrie un algoritm care inserează un
element a, pe ultima poziție a vectorului.
2. Se da un vector cu n elemente intregi distincte. Inversati ordinea elementelor cuprinse
intre elementul minim si elementul maxim din vector.
Exemplu: v = 2 1 3 4 6 10 11 13 17 15 14 12  2 17 13 11 10 6 4 3 1 15 14 12
3. Se dă un vector de n numere întregi. Să se scrie un algoritm care verifică dacă vectorul
conține numai palindroame.
4. Se dă un Vector de n numere întregi. Să se scrie un algoritm care Determină lungimea
celei mai lungi secvențe de elemente consecutive ordonate crescător.
Exemplu: v = 2,7,1,5,9,4,1 ==> cea mai lungă secvență crescătoare este> 1, 5, 9, și este
de lungime 3.
5. Se dă o matrice a, de n linii, n coloane, elemente numere naturale. Să se scrie un algoritm
care calculează și returnează, suma valorilor de pe cele două diagonale.
6. Se dă un vector de cifre cu n elemente, să se scrie un algoritm care determină dacă
vectorul conține reprezentarea unui număr în baza 8.
7. Se dă un vector de n numere întregi să se scrie un algoritm care construiește matricea a
de nxn, cu elementele vectorului v luate circular.

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