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