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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


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

Desconectado Desconectado

Mensajes: 147



Ver Perfil
[C] - Recursividad problema
« en: 4 Julio 2010, 00:36 am »

Hola, estoy repasando nuevamente lo que sé hasta el momento y se me cruzó por la cabeza resolver recursivamente un conteo de vocales, quisiera saber si ustedes creen que es la manera correcta de resolverlo, si existen mejores soluciones... etc

Código
  1. #include <stdio.h>
  2.  
  3. #define ptrNULL 0
  4.  
  5. int es_vocal(char c)
  6. {
  7.  /* Aqui se presento la situacion de un switch
  8.       no se precisamente cual solucion es la mejor
  9.  */
  10.  char conjunto[] = {'a','e', 'i', 'o', 'u'};
  11.  int i;
  12.  for(i = 0; i < 5; i++)
  13.    if(c == conjunto[i]) return 1;
  14.  return 0;
  15. }
  16.  
  17. unsigned int contar_vocal(char *palabra)
  18. {
  19.  if(*palabra == ptrNULL)
  20.    return 0;
  21.  else
  22.    if(es_vocal(tolower(*palabra)))
  23.    {
  24.      palabra++;
  25.      return (1 + contar_vocal(palabra));
  26.    }
  27.    else
  28.    {
  29.      palabra++;
  30.      return contar_vocal(palabra);
  31.    }
  32. }
  33.  
  34. int main()
  35. {
  36.  char *s = "MUrCiELagO";
  37.  int cnt;
  38.  cnt = contar_vocal(s);
  39.  printf("\nCantidad > %d\n", cnt);
  40.  return 0;
  41. }


En línea

MIG80

Desconectado Desconectado

Mensajes: 38



Ver Perfil
Re: [C] - Recursividad problema
« Respuesta #1 en: 4 Julio 2010, 02:03 am »

Otra solución:
Código
  1. #include <stdio.h>
  2. #include <ctype.h>
  3.  
  4. int esvocal(char c);
  5.  
  6. int main(void)
  7. {
  8.  char *pchar,str[]="MurCieLago";
  9.  int nv=0;
  10.  
  11.  for(pchar=str;*pchar;pchar++)
  12.  {
  13.     if(esvocal(*pchar))
  14.       nv++;
  15.  }
  16.  printf("Cantidad de vocales:%d\n",nv);
  17.  
  18.  return 0;
  19. }
  20.  
  21. int esvocal(char c)
  22. {
  23.  c=tolower(c);
  24.  return (c=='a'||c=='e'||c=='i'||c=='o'||c=='u');
  25. }
  26.  

Opino que las soluciones recursivas solo deben ser utilizadas cuando hacen más facil el entender el problema. Como en el caso de las torres de hanoi por ejemplo.


« Última modificación: 4 Julio 2010, 02:06 am por czealt » En línea

cbug

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Re: [C] - Recursividad problema
« Respuesta #2 en: 4 Julio 2010, 03:27 am »

De cierta manera, es otra forma de resolverlo, pero sin recursividad...

Respecto a tu opinión, por el momento no tengo un argumento fuerte para poner en discusión...
En línea

nicolas_cof


Desconectado Desconectado

Mensajes: 348


Into the Wild


Ver Perfil WWW
Re: [C] - Recursividad problema
« Respuesta #3 en: 4 Julio 2010, 06:34 am »

cbug, te falta incluir la libreria ctype.h para la funcion tolower()

Aca dejo otro codigo...

Código:
#include <stdio.h>
#include <ctype.h>

int contarVocales( char *palabra )
{
    char c;

    if ( *palabra == '\0' )
    {
        return 0;
    }
    else
    {
        c = tolower( *palabra );
        if ( c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' )
        {
            return ( 1 + contarVocales( ++palabra ) );
        }
        else
        {
            return contarVocales( ++palabra );
        }
    }
}

int main( void )
{
    char *s = "MUrCiELagO";
    printf("Cantidad: %d\n", contarVocales( s ) );
    return 0;
}

Salu10.
En línea

cbug

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Re: [C] - Recursividad problema
« Respuesta #4 en: 4 Julio 2010, 14:28 pm »

Cierto, ahora una pregunta, tu que estás más adentrado en el tema...

Es más conveniente hacer un bucle de búsqueda de "vocal", o hacer una comparación ya sea mediante un if() o switch()?
En línea

Horricreu
Wiki

Desconectado Desconectado

Mensajes: 290

¡La verdad os hará libres!


Ver Perfil WWW
Re: [C] - Recursividad problema
« Respuesta #5 en: 4 Julio 2010, 15:29 pm »

Cierto, ahora una pregunta, tu que estás más adentrado en el tema...

Es más conveniente hacer un bucle de búsqueda de "vocal", o hacer una comparación ya sea mediante un if() o switch()?

Yo lo que haría, es un puntero a la matriz y, con un bucle que la vaya recorriendo. Luego le añades un if() para buscar la letra.

Saludos :P
« Última modificación: 26 Agosto 2010, 01:04 am por Horricreu » En línea

cbug

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Re: [C] - Recursividad problema
« Respuesta #6 en: 4 Julio 2010, 16:04 pm »

No comprendo.
En línea

Horricreu
Wiki

Desconectado Desconectado

Mensajes: 290

¡La verdad os hará libres!


Ver Perfil WWW
Re: [C] - Recursividad problema
« Respuesta #7 en: 4 Julio 2010, 16:42 pm »

No comprendo.

Es lo que hizo czealt, pero te explico la parte dónde busca:

Código
  1. char str[] = "MurCieLago";
  2. char *pchar = str;
  3.  
  4. for(; *pchar; pchar++)
  5. {
  6. if(esvocal(*pchar))
  7.  
  8. //...

Primero creas una matriz con la palabra deseada, en este caso: murciélago; seguidamente, creamos un puntero que va a apuntar a la matriz creada; luego en el for(), con el puntero creado vamos recorriendo el CONTENIDO de la matriz, o sea los carácteres, y dentro de este for(), le hacemos un if() para comprobar si existe una vocal. ¿Entiendes? Te lo puedo explicar mejor si quieres :) Aunque esta sería mi forma de hacerlo :P

Saludos :P
    
« Última modificación: 26 Agosto 2010, 01:02 am por Horricreu » En línea

cbug

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Re: [C] - Recursividad problema
« Respuesta #8 en: 4 Julio 2010, 16:49 pm »

Ah, claro... me confundí, porque pensé que hacías referencia a mi última pregunta... Porque en realidad estaba tratando el tema de recursividad antes que el método iterativo  :xD
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: [C] - Recursividad problema
« Respuesta #9 en: 4 Julio 2010, 18:31 pm »

¡Buenas!

Si te referias a comprobar si un caracter es una vocal tambien puedes utilizar este metodo.
Código
  1. int esvocal(char c)
  2. {
  3.    char vocales[]="aeiou";
  4.  
  5.    return (strchr(vocales , tolower(c)) != NULL);
  6. }
  7.  

Y bueno, el metodo recursivo que haas planteado es correcto, aunque prefiero el iterativo.

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema de entendimiento recursividad.
Programación C/C++
axeelcs 7 5,064 Último mensaje 20 Agosto 2011, 21:34 pm
por BlackZeroX
Problema de recursividad en VB
.NET (C#, VB.NET, ASP)
Anabel3 0 2,300 Último mensaje 26 Junio 2012, 07:17 am
por Anabel3
problema con recursividad + punteros + TRIE, PLAIN C
Programación C/C++
luisdr22 7 4,224 Último mensaje 23 Octubre 2012, 21:31 pm
por do-while
Problema con recursividad y buscaminas.
Programación C/C++
miguel0542 1 3,763 Último mensaje 5 Junio 2016, 23:49 pm
por do-while
[Problema con recursividad] Java
Java
Desu Nya 2 3,806 Último mensaje 8 Octubre 2017, 20:24 pm
por Desu Nya
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines