cual es el error en este codigo en el lenguaje de programacion c??

Iniciado por fedemaxrul, 3 Diciembre 2016, 19:30 PM

0 Miembros y 1 Visitante están viendo este tema.

fedemaxrul

estoy practicando punteros a funciones, por eso hago el programa de esta forma, en la funcion intercambio, cuando la llamo en qshort me tira un error, a que se refiere?? como lo puedo solucionar?? como le debo pasar los argumento "derecha" y "izquierda "a la función intercambio llamado en qshort que recibe punteros a "derecha" y "izquierda", que deberan ser pasados a la funcion que llamara.
perdon si los confundi.
muchas gracias desde ya!!!

[MOD] Al publicar código, usar las etiquetas GeSHi


Código (cpp) [Seleccionar]

#include <stdio.h>
void qshort(int*array,int*izquierda,int*derecha,int(*intercambio)(int,int),int(*comp)(int,int));
void intercambio(int a[],int izquierda,int derecha);
int comp(int a,int b);
int main()
{
   int array[]={6,1,9,8,2,7,4,0,3,5};
   int izquierda,derecha,i;
   izquierda=0;
   derecha=9;
   for(i=0;i<10;i++)
   {
       printf("array[%d] = %d\n",i,array[i]);
   }
   qshort(array,&izquierda,&derecha,intercambio,comp);
   printf("\n\n");
       for(i=0;i<10;i++)
   {
       printf("array[%d] = %d\n",i,array[i]);
   }
   return 0;
}
void intercambio(int a[],int derecha,int izquierda)
{
   int temp;
    temp=a[izquierda];
    a[izquierda]=a[derecha];
    a[derecha]=temp;
}
void qshort(int array[],int*izquierda,int*derecha,int(*intercambio)(int,int),int(*comp)(int,int))
{
   int pivote,i;
   pivote=*izquierda+*derecha/2;
   while(*izquierda<*derecha)
   {
       while(comp(array[*izquierda],array[pivote]))
       {
           *izquierda+=1;
       }
       while(comp(array[pivote],array[*derecha]))
       {
           printf(".\n");
           *derecha-=1;
       }
       intercambio(array,*izquierda,*derecha);
       for(i=0;i<10;i++)
   {
       printf("array[%d] = %d\n",i,array[i]);
   }
   system("pause");
   }
}
int comp(int a,int b)
{
   if(a<b)
   {
       return 1;
   }
   else if(a>b)
   {
       return 0;
   }
}



0xFer

Creo que es porque defines 2 parámetros aqui:

int(*intercambio)(int,int)

pero en realidad en el método usas 3 y debe retornar void, debería ser así:

void(*intercambio)(int[],int,int)

Saludos  ;-)

Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}