Sunteți pe pagina 1din 5

MAXIMUL DINTR-UN VECTOR

PRIN METODA - DIVIDE ET IMPERA

#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,m­1, 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 dintr­un 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=a­b;
        else
            b=b­a;
    return a;
}

int cmmdc_DEI(int i, int j) // cmmdc intr­un 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);
    }
}

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