Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: fedemaxrul en 3 Diciembre 2016, 19:30 pm



Título: cual es el error en este codigo en el lenguaje de programacion c??
Publicado por: fedemaxrul en 3 Diciembre 2016, 19:30 pm
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
  1. #include <stdio.h>
  2. void qshort(int*array,int*izquierda,int*derecha,int(*intercambio)(int,int),int(*comp)(int,int));
  3. void intercambio(int a[],int izquierda,int derecha);
  4. int comp(int a,int b);
  5. int main()
  6. {
  7.    int array[]={6,1,9,8,2,7,4,0,3,5};
  8.    int izquierda,derecha,i;
  9.    izquierda=0;
  10.    derecha=9;
  11.    for(i=0;i<10;i++)
  12.    {
  13.        printf("array[%d] = %d\n",i,array[i]);
  14.    }
  15.    qshort(array,&izquierda,&derecha,intercambio,comp);
  16.    printf("\n\n");
  17.        for(i=0;i<10;i++)
  18.    {
  19.        printf("array[%d] = %d\n",i,array[i]);
  20.    }
  21.    return 0;
  22. }
  23. void intercambio(int a[],int derecha,int izquierda)
  24. {
  25.    int temp;
  26.     temp=a[izquierda];
  27.     a[izquierda]=a[derecha];
  28.     a[derecha]=temp;
  29. }
  30. void qshort(int array[],int*izquierda,int*derecha,int(*intercambio)(int,int),int(*comp)(int,int))
  31. {
  32.    int pivote,i;
  33.    pivote=*izquierda+*derecha/2;
  34.    while(*izquierda<*derecha)
  35.    {
  36.        while(comp(array[*izquierda],array[pivote]))
  37.        {
  38.            *izquierda+=1;
  39.        }
  40.        while(comp(array[pivote],array[*derecha]))
  41.        {
  42.            printf(".\n");
  43.            *derecha-=1;
  44.        }
  45.        intercambio(array,*izquierda,*derecha);
  46.        for(i=0;i<10;i++)
  47.    {
  48.        printf("array[%d] = %d\n",i,array[i]);
  49.    }
  50.    system("pause");
  51.    }
  52. }
  53. int comp(int a,int b)
  54. {
  55.    if(a<b)
  56.    {
  57.        return 1;
  58.    }
  59.    else if(a>b)
  60.    {
  61.        return 0;
  62.    }
  63. }
  64.  
  65.  


Título: Re: cual es el error en este codigo en el lenguaje de programacion c??
Publicado por: 0xFer en 3 Diciembre 2016, 20:49 pm
Creo que es porque defines 2 parámetros aqui:

Código
  1. int(*intercambio)(int,int)

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

Código
  1. void(*intercambio)(int[],int,int)

Saludos  ;-)