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

 

 


Tema destacado:


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

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Ayuda con este codigo recursivo
« en: 24 Septiembre 2014, 22:47 pm »

Hola me estoy iniciando en la recursividad y me encuentro estancado en este código para arrojar de forma recursiva la devolución de una frase al revés.

Había pensado en guardar la frase en un array, seguidamente con un índice ir moviendome por este array recursivamente, pero me encuentro que no se como devolver el retorno de la función a la función principal, independientemente de que esté bien ideado el código......

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. void alreves (char vector[],int posicion);
  6.  
  7. void main(int argc, char *argv[]){
  8.  
  9.    char cadena[50];
  10.    int n;
  11.    printf("\nIntroduzca frase: ");
  12.    gets(cadena);
  13.    n=strlen(cadena);
  14. alreves(cadena,n);
  15. }
  16.  
  17. void alreves (char vector[],int posicion){
  18.  
  19.    if(posicion=='\0')
  20.        return 0 ;
  21.    else
  22.        alreves(vector,posicion-1);
  23. }
  24.  

Gracias!!


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Ayuda con este codigo recursivo
« Respuesta #1 en: 25 Septiembre 2014, 05:01 am »

Lo primero que debes hacer es cambiar el tipo de retorno de la función main a int y ya que no utilizas los argumentos de linea de comandos su definición debe terminar como "int main(void) ...".

También hay que eliminar la variable "n" ya que solo pasa la cubeta y sustituir el uso de gets por fgets, la explicación de esto en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

----

En cuanto a la función no es necesario el segundo argumento, esta en pseudocodigo es:
Código:
funcion -- argumento es la direccion en memoria de la cadena
   Si el -carácter actual- es diferente de '\0'
      llamada recursiva pasando la direccion del -siguiente caracter-
      imprimir el -caracter actual-
   fin si
fin funcion

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
++c

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Re: Ayuda con este codigo recursivo
« Respuesta #2 en: 25 Septiembre 2014, 20:09 pm »

Hola rir3760 gracias por contestar.

Te cuento el uso de gets porque fgets me arroja ' \n ', ya me avisaste hace un tiempo de este mal uso.

Las indicaciones que me has puesto creo que son con punteros ya que me indicas direcciones, pero aún no he llegado a ese tema, cuando acabe estos ejercicios de recursividad me pondré con ello. No obstante he visto ahora algo por encima pero tengo que verlo con más detalle como trabajan ya que se me queda colgado el código, te cuelgo lo que he modificado del programa pero me gustaría me guiaras también para hacerlo sin punteros.

Código
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #define N 50
  6.  
  7. void alreves (char *vector);
  8.  
  9. int main(void){
  10.  
  11.    char cadena[N];
  12.    printf("\nIntroduzca frase: ");
  13.    fgets(cadena,sizeof cadena,stdin);
  14.    printf("\nFrase invertida: ");
  15.    alreves(cadena);
  16. }
  17.  
  18. void alreves (char *vector){
  19.  
  20.    if(*vector!='\0'){ /*Estado general*/
  21.            alreves(vector+1);
  22.            putchar(*vector);
  23.    }
  24.    else return ; /*Estado base*/
  25. }

Gracias !!
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Ayuda con este codigo recursivo
« Respuesta #3 en: 26 Septiembre 2014, 17:38 pm »

Te cuento el uso de gets porque fgets me arroja ' \n ', ya me avisaste hace un tiempo de este mal uso.
Nada impide que elimines el avance de linea mediante la función strchr (prototipo en <string.h>) o un bucle.

No obstante he visto ahora algo por encima pero tengo que verlo con más detalle como trabajan ya que se me queda colgado el código
Ese programa funciona correctamente, si el programa en un momento dado se congela asegúrate de publicar la versión tal cual, sin cambios.

Las indicaciones que me has puesto creo que son con punteros ya que me indicas direcciones, pero aún no he llegado a ese tema [...] te cuelgo lo que he modificado del programa pero me gustaría me guiaras también para hacerlo sin punteros.
No es posible por lo siguiente:

1) Todo parámetro de una función declarado en la forma "T identificador[N]" se procesa en realidad como "T *identificador", en otras palabras cada parámetro declarado como array se procesa como un puntero.

2) El operador "[]" requiere de dos operandos: un entero y un puntero sin importar el orden, cuando uno de ellos es el nombre de un array este genera de forma automática el puntero necesario.

Como espero entenderás no hay escape: se utilizan punteros (direcciones de memoria) si o si.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
++c

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Re: Ayuda con este codigo recursivo
« Respuesta #4 en: 26 Septiembre 2014, 18:56 pm »

Citar
Nada impide que elimines el avance de linea mediante la función strchr (prototipo en <string.h>) o un bucle.
Tomo nota  ;D

Citar
Ese programa funciona correctamente, si el programa en un momento dado se congela asegúrate de publicar la versión tal cual, sin cambios.
Sí que funciona!! Lo más probable que tocara algo... ;)

Citar
No es posible por lo siguiente:

1) Todo parámetro de una función declarado en la forma "T identificador[N]" se procesa en realidad como "T *identificador", en otras palabras cada parámetro declarado como array se procesa como un puntero.

2) El operador "[]" requiere de dos operandos: un entero y un puntero sin importar el orden, cuando uno de ellos es el nombre de un array este genera de forma automática el puntero necesario.

Como espero entenderás no hay escape: se utilizan punteros (direcciones de memoria) si o si.
Más claro imposible  ;-)

Gracias!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con este codigo
Programación Visual Basic
5v5 2 3,002 Último mensaje 31 Mayo 2005, 22:56 pm
por 5v5
ayuda con este codigo
Programación Visual Basic
<housedir> 3 2,312 Último mensaje 17 Noviembre 2007, 03:05 am
por mos-k
Ayuda problema recursivo java
Java
chiche92 0 1,571 Último mensaje 28 Noviembre 2015, 19:52 pm
por chiche92
Laberinto Recursivo
Programación C/C++
Sebastian Leiva 0 3,431 Último mensaje 25 Diciembre 2016, 18:59 pm
por Sebastian Leiva
Incremento porcentual Recursivo
Java
jorgecotrinax 1 2,462 Último mensaje 8 Julio 2021, 04:52 am
por 3n31ch
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines