Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Supermanxd en 28 Mayo 2015, 05:26 am



Título: Programa que cuenta vocales
Publicado por: Supermanxd en 28 Mayo 2015, 05:26 am
No me ejecuta como quiero ;c necesito que me cuente las vocales ingresadas y no me sale:CCCCCCC
Que tengo mal??

Código
  1. #include <stdlib.h>
  2. #include <conio.h>
  3. #include <stdio.h>
  4.  
  5. char *pidetexto();
  6. void contar_vocal(char *p, int num[5]);
  7. void imprime(int num[5]);
  8.  
  9. int main()
  10. {
  11. char *texto;
  12. int num[5];
  13. texto=pidetexto();
  14. contar_vocal(texto,num);
  15. imprime(num);
  16. getch();
  17.  
  18. }
  19.  
  20. char* pidetexto()
  21. {
  22. char *q,text[50];
  23. printf("\ningrese el texto: ");
  24. scanf("%s", &text);
  25. q=text;
  26. return q;
  27. }
  28.  
  29. void contar_vocal(char *p , int num[5])
  30. {
  31. int num1[5];
  32. num1[0]=0;
  33. num1[1]=1;
  34. num1[2]=2;
  35. num1[3]=3;
  36. num1[4]=4;
  37.  
  38. while (*p)
  39. {
  40.  
  41.  
  42. if(*p =='a' || *p== 'A')
  43. {num1[0]=num1[0]+1;}
  44.  
  45.  
  46.  
  47.  
  48. if(*p =='e' || *p== 'E')
  49. {num1[1]=num1[1]+1;}
  50.  
  51.  
  52.  
  53.  
  54. if(*p =='i' || *p== 'I')
  55. {num1[1]=num1[1]+1;}
  56.  
  57.  
  58.  
  59.  
  60. if(*p =='o' || *p== 'O')
  61. {num1[1]=num1[1]+1;}
  62.  
  63.  
  64. if(*p =='u' || *p== 'U')
  65. {num1[1]=num1[1]+1;}
  66.  
  67.  
  68.  
  69. p++;
  70.  
  71. }
  72.  
  73. *(&num[0])=num1[0];
  74. *(&num[1])=num1[1];
  75. *(&num[2])=num1[2];
  76. *(&num[3])=num1[3];
  77. *(&num[4])=num1[4];
  78.  
  79. //muercielago
  80.  
  81. }
  82.   void imprime(int num[5])
  83.    {
  84.     printf("\nla letra a se repite %d", num[0]);
  85.     printf("\nla letra e se repite %d", num[1]);
  86.     printf("\nla letra i se repite %d", num[2]);
  87. printf("\nla letra o se repite %d", num[3]);
  88. printf("\nla letra u se repite %d", num[4]);
  89.    }


Título: Re: Programa que cuenta vocales
Publicado por: engel lex en 28 Mayo 2015, 05:45 am
no te debería salir "CCCCCCC" te sale la cantidad de apariciones... pero el numero es incorrecto por lo que hay en las lineas de la 33 a la 36, porque le das valores diferentes a 0... los if deberías hacerlos con if else, es inutil que recorra todo, ya que si es "a" no puede ser ningúna de las otras


si arreglas lo de esos valores, estás listo


Título: Re: Programa que cuenta vocales
Publicado por: Supermanxd en 29 Mayo 2015, 02:42 am
le cambie los valores a 0 y lo de las condiciones de if else y no me sale:C ayuda xfa


Título: Re: Programa que cuenta vocales
Publicado por: 0xFer en 29 Mayo 2015, 03:10 am
Código
  1. if(*p =='a' || *p== 'A')
  2. {num1[0]=num1[0]+1;} //mejor - > {num[0]+=1;}
  3.  
  4. if(*p =='e' || *p== 'E')
  5. {num1[1]=num1[1]+1;}
  6.  
  7. if(*p =='i' || *p== 'I')
  8. {num1[1]=num1[1]+1;} //mejor -> {num[2]+=1;}
  9.  
  10.  
  11. if(*p =='o' || *p== 'O')
  12. {num1[1]=num1[1]+1;} //mejor -> {num[3]+=1;}
  13.  
  14. if(*p =='u' || *p== 'U')
  15. {num1[1]=num1[1]+1;} //mejor -> {num[4]+=1;}
  16.  

Puedes iniciar todos los valores de num a 0 con memset(num,0,sizeof(num));

No se si con eso ya funcione, no tengo un compilador para probar

Un saludo


Título: Re: Programa que cuenta vocales
Publicado por: Supermanxd en 29 Mayo 2015, 03:46 am
gracias ya me salio :DDD


Título: Re: Programa que cuenta vocales
Publicado por: engel lex en 29 Mayo 2015, 05:09 am
limpiando un poco el codigo

Código
  1.    #include <stdlib.h>
  2.    #include <conio.h>
  3.    #include <stdio.h>
  4.  
  5.    char *pidetexto();
  6.    void contar_vocal(char *p, int num[5]);
  7.    void imprime(int num[5]);
  8.  
  9.    int main()
  10.    {
  11.    char *texto;
  12.    int num[5];
  13.    texto=pidetexto();
  14.    contar_vocal(texto,num);
  15.    imprime(num);
  16.    getch();
  17.  
  18.    }
  19.  
  20.    char* pidetexto()
  21.    {
  22.    char *q,text[50];
  23.    printf("\ningrese el texto: ");
  24.    scanf("%s", &text);
  25.    q=text;
  26.    return q;
  27.    }
  28.  
  29.    void contar_vocal(char *p , int num[5])
  30.    {
  31.  
  32.    num[0]=0;
  33.    num[1]=0;
  34.    num[2]=0;
  35.    num[3]=0;
  36.    num[4]=0;
  37.  
  38.    while (*p){
  39.    if(*p =='a' || *p== 'A')
  40.    {num[0]++;}
  41.    else if(*p =='e' || *p== 'E')
  42.    {num[1]++;}
  43.    else if(*p =='i' || *p== 'I')
  44.    {num[2]++;}
  45.    else if(*p =='o' || *p== 'O')
  46.    {num[3]++;}
  47.    else if(*p =='u' || *p== 'U')
  48.    {num[4]++;}
  49.    p++;
  50.    }
  51.    }
  52.  
  53.    void imprime(int num[5]){
  54.        printf("\nla letra a se repite %d", num[0]);
  55.        printf("\nla letra e se repite %d", num[1]);
  56.        printf("\nla letra i se repite %d", num[2]);
  57.    printf("\nla letra o se repite %d", num[3]);
  58.    printf("\nla letra u se repite %d", num[4]);
  59.       }


Título: Re: Programa que cuenta vocales
Publicado por: rir3760 en 2 Junio 2015, 16:37 pm
No me ejecuta como quiero ;c necesito que me cuente las vocales ingresadas y no me sale
Ademas de lo ya comentado por engel lex y 0xFer deberías evitar el uso de la biblioteca conio de Borland (la explicación en |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html)) y un error importante se encuentra en la función de lectura:
Código
  1. char* pidetexto()
  2. {
  3. char *q,text[50];
  4. printf("\ningrese el texto: ");
  5. scanf("%s", &text);
  6. q=text;
  7. return q;
  8. }
El valor que retorna "pidetexto" es la dirección de "text" pero al ser esta una variable local se destruye (su memoria se libera) al terminar la función con lo cual el puntero resultante (de la llamada) no es valido.

Para solucionarlo debes reservar memoria con malloc y utilizar la dirección en memoria del bloque como valor de retorno de la función, por ejemplo:
Código
  1. char *pidetexto(void)
  2. {
  3.   char *q;
  4.  
  5.   if ((q = malloc(50)) != NULL){
  6.      puts("Ingrese el texto:");
  7.      scanf("%s", q); /* Falta validar el resultado de scanf */
  8.   }
  9.  
  10.   return q;
  11. }
Y después del uso del bloque hay que liberar la memoria mediante la función free.

Un saludo