Maximul dintr-un vector



Se citește un vector cu n componente, numere naturale. Se cere să se tipărească valoarea maximă.
Funcția căutată va genera valoarea maximă dintre numerele reținute în vector pe o poziție dintre i și j (inițial, i=1, j=n). Pentru aceasta, se procedează astfel:


  • dacă i=j, valoarea maxima va fi v[i];
  • în caz contrar, se imparte vectorul în doi subvectori - presupunem varianta pentru paralelizare pe 2 procesoare. Se calculează mijlocul m al intervalului [i, j]: m = (i+j) div 2. Primul subvector va conține componentele de la i la m, al doilea va conține componentele de la (m+1) la j; se rezolvă subproblemele (aflându-se astfel maximul pentru fiecare din subvectori), iar soluția curentă va fi dată de valoarea maximă dintre rezultatele celor două subprobleme.




#include <iostream>

using namespace std;

int v[10],n;

int max(int i, int j)
{ int a, b, m;
if (i==j)
return v[i];
else
{ m = (i+j)/2;
a = max(i, m);
b = max(m+1, j);
if (a>b)
return a;
else
return b;
}
}
int main( )
{ cout<<"n=";
cin>>n;
for(int i=1; i<=n; i++)
{ cout<<"v["<<i<<"]=";
cin>>v[i];
}
cout<<"max="<<max(1,n);

return 0;
}

Niciun comentariu:

Trimiteți un comentariu