• Domingo 28 de Abril de 2024, 21:21

Autor Tema:  Pasar Un Vector Como Argumento De Funcion  (Leído 1419 veces)

Dunadan

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Pasar Un Vector Como Argumento De Funcion
« en: Martes 28 de Junio de 2005, 22:59 »
0
Buenas, concurro a esta comunidad para aclarar mis dudas.  HAce poco encontre uno ejercicios de recursividad bastante buenos, y como la vi muy por encima me puse a practicarlos.  En uno tenía que buscar un elemento en un vector de manera recursiva, con una funcion obviamente.  Pero cuando llamo a la funcion se me cuelga el compilador, diciendome que efectuo una operacion no permitida.  Aca está el código:

Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int BuscarN(int *a,int);
  6.  
  7. main()
  8. {
  9.   int iVector[10];
  10.     int iNumero=0,iPosicion=0;
  11.   register int i;
  12.  
  13.   for(i=0;i<10;i++)
  14.     iVector[i]=rand() % 100;
  15.  
  16.   for(i=0;i<10;i++)
  17.     printf("%d\t",iVector[i]);
  18.  
  19.   printf("Ingrese un numero, se buscara recursivamente en un vector\n");
  20.  
  21.   scanf("%d",&iNumero);
  22.  
  23.   iPosicion=BuscarN(iVector,iNumero); /* acá se cuelga */
  24.  
  25.   if (iPosicion)
  26.   {
  27.     printf("\nNumero %d encontrado en posicion %d",iNumero,iPosicion);
  28.   }
  29.   else
  30.   {
  31.     printf("\nNumero %d no encontrado",iNumero);
  32.   }
  33. }
  34.  
  35. int BuscarN(int *a,int x)
  36. {
  37.   int i=0,r=0;
  38.  
  39.   if(i<10)
  40.   {
  41.     if(a[i] != x)
  42.     {
  43.       i++;
  44.       BuscarN(a,x);
  45.     }
  46.     else
  47.     {
  48.       return i;
  49.     }
  50.   }
  51. return r;
  52. }
  53.  

Tal vez sea un error de adentro de la función, pero la verdad no lo encuentro, y error de sintaxis no creo que sea ya que ni el borland ni el dev-c++ me tiraron error en la compilación.  Si aparte pueden corregir la función o cualquier otra sugerencia es bienvenida  ;) .

Saludos
"Desde antaño se dice que el espíritu que al demonio se ha vendido no se apresura en dejar la envoltura de la carne, sino que alimenta y enseña al mismo gusano que roe, hasta que desde la corrupción emerge una vida terrible, y las criaturas que con carroña de la tierra se alimentan se multiplican a escondidas para hostigarla, y se hacen monstruosas para infestarlas.  En secreto son excavadas interminables galerías donde debían bastar los poros de la tierra, y unas criaturas que sólo debían arrastrarse han aprendido a caminar"

[size=109]H.P. Lovecraft "El Ceremonial"[/size]

pitukilloloco

  • Miembro MUY activo
  • ***
  • Mensajes: 104
    • Ver Perfil
Re: Pasar Un Vector Como Argumento De Funcion
« Respuesta #1 en: Miércoles 29 de Junio de 2005, 00:12 »
0
Hay varios errores en la función recursiva. El principal es que nunca hay una terminación de la recursividad y esta termina hasta que se derborda la pila en donde se depositan los datos cada vez que se llama recursivamente esta función. Otro error es que si la función BuscarN regresa un entero entonces cada vez que se llama recursivamente a esta función debe de llamarse con un return y no solamente invocando a la función como si esta no regresara valor alguno. Otra observación que se puede hacer a este ejemplo es que es muy artificial. Cuando se enseña la recursividad se ponen ejemplos que por su definición son recursivos, como los árboles binarios, el cálculo del factorial, el cálculo del máximo cómun divisor entre dos enteros o el ejemplo de las torres de Hanoi, pero en este caso con una simple iteración secuencial del vector desde el inicio hasta el final se puede determinar si hay un número en él y no es necesario la recursividad.

Dunadan

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Re: Pasar Un Vector Como Argumento De Funcion
« Respuesta #2 en: Miércoles 29 de Junio de 2005, 15:25 »
0
Gracias por la ayuda y la corrección de errores, me funcionó haciendo a la variable i en Static, y poniendole el return al BuscarN dentro de la función.  La verdad que este ejercicio es muy "artificial", en el momento que lo leí, lo primero que se me ocurrió fue la versión iterativa, sólo lo hice para practicar.

Saludos.
"Desde antaño se dice que el espíritu que al demonio se ha vendido no se apresura en dejar la envoltura de la carne, sino que alimenta y enseña al mismo gusano que roe, hasta que desde la corrupción emerge una vida terrible, y las criaturas que con carroña de la tierra se alimentan se multiplican a escondidas para hostigarla, y se hacen monstruosas para infestarlas.  En secreto son excavadas interminables galerías donde debían bastar los poros de la tierra, y unas criaturas que sólo debían arrastrarse han aprendido a caminar"

[size=109]H.P. Lovecraft "El Ceremonial"[/size]