Documente Academic
Documente Profesional
Documente Cultură
#include <iostream>
using namespace std;
int v[]={1,4,2,7,4,6,8,2};
int maxim(int i, int j)
{
int m,m1,m2;
if(i==j) //DACA AM AJUNS LA UN VECTOR CU O SINGURA COMP.
return v[i];
else
{
m=(i+j)/2; // DETERMIN MIJL. INTERVALULUI (I,J)
m1=maxim(i,m); // DETERMIN MAXIM PE PRIMUL INTERVAL
m2=maxim(m+1,j); // SI PE AL DOILEA INTERVAL
if(m1>m2) // COMPAR MAXIMELE GASITE SI INTORC
return m1; // PE CEL MAI MARE
else
return m2;
}
}
int main()
{
cout<<"Maximul este "<<maxim(0,7);
return 0;
}
CAUTAREA BINARA INTR-UN VECTOR
PRIN METODA - DIVIDE ET IMPERA
#include <iostream>
using namespace std;
int v[]={1,2,4,6,7,8,11};
int caut_binar(int i, int j, int elem)
{
if(i<=j)
{
int m=(i+j)/2;
if(v[m]==elem)
return m;
else
if(elem<v[m])
caut_binar(i,m1, elem);
else
caut_binar(m+1,j,elem);
}
else return 1;
}
int main()
{
int poz=caut_binar(0,7,6);
if(poz==1)
cout<<"Elementul nu exista !";
else
cout<<"Elementul exista pe pozititia "<<poz;
return 0;
}
// Suma elementelor dintrun vector – prin DEI
int suma(int i, int j)
{
int m,m1,m2;
if(i==j)
return v[i];
else
{
m=(i+j)/2;
m1=suma(i,m);
m2=suma(m+1,j);
return m1+m2;
}
}
//CMMDC DEI
int cmmdc(int a, int b) // cmmdc a doua valori
{
while(a!=b)
if(a>b)
a=ab;
else
b=ba;
return a;
}
int cmmdc_DEI(int i, int j) // cmmdc intrun vector
{
int m,m1,m2;
if(i==j)
return v[i];
else
{
m = (i+j)/2;
m1 = cmmdc_DEI(i,m);
m2 = cmmdc_DEI(m+1,j);
return cmmdc(m1,m2);
}
}
// Numarul valorilor pare
int nr_pare(int i, int j)
{
int m,m1,m2;
if(i==j)
if(v[i]%2==0)
return 1;
else
return 0;
else
{
m=(i+j)/2;
m1=nr_pare(i,m);
m2=nr_pare(m+1,j);
return m1+m2;
}
}
// maximul si minimul simultan
void maxim_minim(int i, int j, int &max, int &min)
{
int m, max1, min1, max2,min2;
if(i==j)
max=min=v[i];
else
{
m=(i+j)/2;
maxim_minim(i,m,max1,min1);
maxim_minim(m+1,j,max2,min2);
if(max1>max2)
max=max1;
else
max=max2;
if(min1<min2)
min=min1;
else
min=min2;
}
}
// afisarea valorilor negative
void afisare_neg(int i, int j)
{
int m;
if(i==j)
{
if(v[i]<0)cout<<v[i]<<" ";
}
else
{
m=(i+j)/2;
afisare_neg(i,m);
afisare_neg(m+1,j);
}
}