elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  recursividad cruzada
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: recursividad cruzada  (Leído 5,319 veces)
fernaEDLP

Desconectado Desconectado

Mensajes: 48


Ver Perfil
recursividad cruzada
« en: 12 Enero 2019, 06:57 am »

hola nakamas como estan?, espero que bien, necesitaría ayuda, me piden que cree una función recursiva que determine si un numero es positivo o no, es un caso de recursividad cruzada, casi seguro que tengo un error conceptual en mi problema, mi duda està en que en c no puedo  usar public boolean(con false y true), e hice esto, pero obviamente no compila:
y tengo otra, se puede crear una tercer funcion para que solamente llame a esa sola?

   

Código
  1. #include <stdlib.h>
  2. #include <string.h>
  3. int  negativo(int n);
  4. int  positivo(int n);
  5.  
  6.  
  7. int main()
  8. {
  9.    int N;
  10.    printf("ingrese el numero\n");
  11.    scanf("%d",&N);
  12.    positivo(N);
  13.    negativo(N);
  14.    return 0;
  15. }
  16.  
  17. int positivo(int n)
  18. {
  19.    if(n>=0)
  20.    {
  21.        printf("el numero ingresado es positivo");
  22.    }
  23.    else
  24.    {
  25.        return negativo(n);
  26.    }
  27. }
  28. int  negativo(int n)
  29. {
  30.    if(n<0)
  31.    {
  32.        return n;
  33.        printf("el numero ingresado es nevativo");
  34.    }
  35.    else
  36.    {
  37.        return positivo(n);
  38.    }
  39. }
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  


En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: recursividad cruzada
« Respuesta #1 en: 12 Enero 2019, 15:12 pm »

- Que valor retorna la funcion positivo si el valor que recibe como parametro es efectivamente positivo?
- Sugiero que las funciones positivo y negativo retornen 1 o 0.
- Sugiero que no hagas ningun printf al interior de esas funciones, sino que sea el main el que lo haga basado en el valor que esas funciones retornen.


En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: recursividad cruzada
« Respuesta #2 en: 12 Enero 2019, 15:18 pm »

Si pudieras especificar un poco más tu problema... Es decir, ese programa compilar, compila (si le añades la librería <stdio.h> para poder usar <scanf()> y <printf()>). Además puedes quitar <stdlib.h> y <string.h> ya que no estás usándolo para nada en todo el programa.

De todos modos ese programa sigue teniendo errores (aunque ya compila). Si llamas a <positivo(n)> con n positivo, sale el mensaje por pantalla "el numero ingresado es positivo" pero no has hecho ningún <return> (creo que entonces se retorna n pero es mejor especificarlo en el código para que quede explícito).

Si llamas a <negativo(n)> con n negativo, la función retorna n, pero no se mostrará por pantalla "el numero ingresado es nevativo" (creo que querías poner "neGativo" :xD) porque una vez que una función ejecuta un <return> ya sale de la función y no se ejecuta lo que venga después.

Por eso que no se muy bien cual es el fin de esa función, si quieres retornar el mismo número que mandas como parámetro o quieres retornar 1 o 0 como si fuese true o false respectivamente... Y sí, si quieres crear otra función que llame a una de esas puedes hacerlo, pero lo veo un poco absurdo todo esto porque son dos funciones muy sencillas. Algo más funcional sería:
Código
  1. int positivo(int n){
  2.    return (n >= 0);
  3. }
Que devuelve 1 si es positivo y 0 si es negativo. De que sirve crear una función <negativo()> si <negativo() == !positivo()>??

En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
fernaEDLP

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: recursividad cruzada
« Respuesta #3 en: 12 Enero 2019, 17:10 pm »

Hola gracias a los dos por las respuestas, ajaja si creo que la RAE todavia no modifico el negativo a nevativo, en realidad el enunciado del problema dice cree un algoritmo recursivo que diga si un numero ingresado es negativo o positivo, ya c que suena tonto, pero buscando por internet vi que lo resuelven con recursividad cruzada, pero usan una sentencia que dice public boolean y retornan un true o un false, pero eso estaba resuelto en java
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: recursividad cruzada
« Respuesta #4 en: 12 Enero 2019, 18:01 pm »

0 es considerado false, diferente a 0 es considerado true.
Pero a partir de C99 hicieron la librería stdbool que sirve para manejar true y false.
En línea

fernaEDLP

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: recursividad cruzada
« Respuesta #5 en: 12 Enero 2019, 21:29 pm »

graciass
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: recursividad cruzada
« Respuesta #6 en: 13 Enero 2019, 03:46 am »

Me gustó el problema y supongo que ya lo tienes solucionado, así que me he dispuesto a dar solución recursiva a ello. Poco eficiente pero recursiva. Usa una función de interface:

Código
  1. #include  <stdio.h>
  2.  
  3. int f1(unsigned long n, unsigned long long s) {
  4.    return s==1? n : f1(n>>1, --s);
  5. }
  6.  
  7. int es_negativo(unsigned long n) {
  8.    return f1(n, sizeof(unsigned long long)*8);
  9. }
  10.  
  11. int main() {
  12.    printf("%d\n", es_negativo(65536));
  13.    printf("%d\n", es_negativo(-32));
  14. }
En línea

fernaEDLP

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: recursividad cruzada
« Respuesta #7 en: 13 Enero 2019, 07:43 am »

Mafus gracias,se nota que sabes programar avanzado pero es demasiado eso para mi, ajaajaj, hace de cuenta que le estas enseñando a un cavernicola, porque  usas sizeof?, y que significa --s?
En línea

fernaEDLP

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: recursividad cruzada
« Respuesta #8 en: 13 Enero 2019, 07:48 am »

tampoco entiendo porque le pasas como parametro n>>1
En línea

fernaEDLP

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: recursividad cruzada
« Respuesta #9 en: 13 Enero 2019, 08:00 am »

tu codigo para super pro, a mi al final me quedo esto estaria bien?

Código
  1. int  negativo(int n);
  2. int  positivo(int n);
  3.  
  4.  
  5. int main()
  6. {
  7.    int N;
  8.    printf("ingrese el numero\n");
  9.    scanf("%d",&N);
  10.    positivo(N);
  11.    negativo(N);
  12.  
  13.    return 0;
  14. }
  15.  
  16. int positivo(int n)
  17. {
  18.    if(n>=0)
  19.    {
  20.        return 1;
  21.    }
  22.    else
  23.    {
  24.        printf("el numero es negativo\n");
  25.        return negativo(n);
  26.    }
  27. }
  28. int  negativo(int n)
  29. {
  30.    if(n<0)
  31.    {
  32.        return 0;
  33.    }
  34.    else
  35.    {
  36.        printf("el numero es positivo\n");
  37.        return positivo(n);
  38.    }
  39. }
  40.  







En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Facebook intensifica su cruzada contra los “Me gusta” falsos
Noticias
wolfbcn 1 2,500 Último mensaje 3 Septiembre 2012, 18:25 pm
por crazykenny
Mi primera cruzada contra un EXECryptor ? « 1 2 »
Ingeniería Inversa
TrashAmbishion 11 7,491 Último mensaje 6 Septiembre 2013, 05:04 am
por apuromafo CLS
Compilacion cruzada
Programación C/C++
engel lex 6 3,454 Último mensaje 21 Septiembre 2013, 19:11 pm
por engel lex
OPENCV imposible compilacion cruzada para ARM
GNU/Linux
cacaito 0 2,355 Último mensaje 18 Junio 2014, 17:35 pm
por cacaito
referencia cruzada de campos de una tabla en mysql
Desarrollo Web
iori100 0 2,818 Último mensaje 15 Enero 2018, 14:26 pm
por iori100
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines