Funkcia vracajuca smernik na globalnu premennu (pole) C++
int* maxmin(int n, int p[])
{
int array[2];
int array_left[2];
int array_right[2];
if(n == 1)
{
array[0] = p[0];
array[1] = p[0];
}
else if(n == 2)
{
if(p[0]<p[1])
{
array[0] = p[0];
array[1] = p[1];
}
else
{
array[0] = p[1];
array[1] = p[0];
}
}
else
{
if(n%2 == 0)
{
int* left = maxmin(n/2,p);
array_left[0] = left[0];
array_left[1] = left[1];
int* right = maxmin(n/2,&p[n/2]);
array_right[0] = right[0];
array_right[1] = right[1];
}
else
{
int* left = maxmin(n/2,p);
array_left[0] = left[0];
array_left[1] = left[1];
int* right = maxmin(n/2+1,&p[n/2]);
array_right[0] = right[0];
array_right[1] = right[1];
}
if(array_left[1] < array_right[1]) array[1] = array_right[1];
else array[1] = array_left[1];
if(array_left[0] < array_right[0]) array[0] = array_left[0];
else array[0] = array_right[0];
}
return array; // 2. warning
}
int main(int argc, char *argv[])
{
int p[]= {7,6,1,3,9,5,8,0,12,4,15,11,10,4,7};
n=15;
int array[2];
int* vysledok_maxmin = maxmin(n,p); // 1. warning
printf("maxmin: %d , %d", vysledok_maxmin[0],vysledok_maxmin[1]);
}
2 nedostatky:
1. [Warning] initialization makes pointer from integer without a cast
2. [Warning] function returns address of local variable
Pre pridávanie komentárov sa musíte prihlásiť.
static int array[2];
static int array[2];
a do funkcie my bude vstupovat toto pole cez smernik, nebude v parametroch funkcie, funkcia mi toto pole naplni resp. zmeni a v returne budem mat smernik na prvy prvok tohto pola, pritom nebudem mat problem s rekurzivnym volanim...
-da sa to zrealizovat pri splneni vsetkych tychto podmienok?
lepsie by mozno bolo -Wextra, namiesto toho -Werror a to -lm uz vane neviem co tam robi:)