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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


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

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Ayuda!
« en: 24 Octubre 2011, 23:29 pm »

Me piden que implemente un programa que pida una frase y un carácter por teclado, pidiendo dicho carácter hasta que sea correcto (ósea qué pertenezca al alfabeto castellano comprendido en la tabla ASCII 850) y que cuente la veces que dicho carácter aparece en la frase introducida. El programa debe calcular también, si dicho número resultante se trata de un número primo o no.

Ejemplo:

Frase introducida:

“El viaje no termina jamás. Solo los viajeros terminan. Y también ellos pueden subsistir en memoria, en recuerdo, en narración... El objetivo de un viaje es solo el inicio de otro viaje.”

Carácter introducido:

“j”

Salida:

-Existe 6 js en la frase introducida

-6, No es un número primo.


que errores cometo?

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void) {
  5. char frase[100];
  6. char caracter;
  7. int i, contador, longitud, aux=2;
  8.  
  9. printf("Introduzca una frase.\n");
  10. gets (frase);
  11.  
  12. longitud=strleng(frase); //Resto el valor nulo que crea gets()
  13. longitud-=1;
  14.  
  15. do { //Controlo el caracter pedido
  16. printf("Introduzca un caracter:\n");
  17. scanf("%c", caracter);
  18.  
  19. } while ((caracter<A && caracter>Z) && (caracter <a && caracter>z));
  20.  
  21. for (i=0; i<longitud; i++) //Comparo y cuento los caracteres que esten        repetidos
  22. {
  23. if (frase[i]= frase[longitud])
  24. contador++;
  25. else
  26. printf("El caracter %c no se encuentra en la frase", caracter);
  27. }
  28. while (contador%aux!=0) //inicialmente aux=2 por lo tanto busco un numero que su resto sea
  29. aux+=1; //diferente de 0 y pueda dividirse por el mismo.
  30. if (contador==aux){
  31. printf("Existe %i %c en la frase introducida.\n", contador, caracter);
  32. printf("El %i, es primo.\n", contador);
  33. }
  34. else
  35. {
  36. printf("Existe %i %c en la frase.\n", contador, caracter); //Salida final
  37. printf("El %i, no es primo.\n", contador);
  38. }
  39.  
  40. return EXIT_SUCCESS;
  41. }
  42.  


« Última modificación: 24 Octubre 2011, 23:30 pm por madpitbull_99 » En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Ayuda!
« Respuesta #1 en: 24 Octubre 2011, 23:42 pm »

¡Buenas!

El planteamiento del programa no es que este mal (bueno, si lo esta, pero la idea mas o menos la tienes). Lo que te falla es la logica de las condiciones. Repasala a ver si te das cuenta de tus errores. Piensa en cada una de las condiciones que has puesto, observa bien si realmente se pueden cumplir alguna vez o si pueden fallar en algun caso.

Y otra cosa, no utilices gets, utiliza fgets (pasandole stdin como fichero del que debera tomar los datos):

http://www.cplusplus.com/reference/clibrary/cstdio/fgets/

¡Saludos!


En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Ayuda!
« Respuesta #2 en: 25 Octubre 2011, 05:20 am »

Aparte de lo ya comentado el nombre correcto de la funcion es "strlen" y antes de utilizarla debes incluir el encabezado <string.h>.

Y para conocer si un caracter es alfabetico puedes utilizar la funcion isalpha, antes de cualquier uso de esta debes incluir el encabezado <ctype.h>.

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
bazokajoe

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Ayuda!
« Respuesta #3 en: 25 Octubre 2011, 08:55 am »

Así es como al fina ha quedado el codigo.Gracias por los consejos, es la primera vez que veo un lenguaje de programacion en mi vida y los profesores tampoco ayudan mucho.
Saludos.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
   char frase[200], caracter;
   int i, contador, longitud, aux=2;

   printf("Introduzca una frase:\n");
   gets (frase);

   longitud=strleng(frase);         //Resto el valor nulo que crea gets()
   longitud-=1;

   do {                  //Controlo el caracter pedido
         printf("Introduzca un caracter a buscar:\n");
         scanf("%c", caracter);

      } while ((caracter<A && caracter>Z) || (caracter<a && caracter>z));

      for (i=0; i<longitud; i++)         /*Comparo y cuento los caracteres que esten repetidos*/
      {
         if (caracter== frase)
               contador++;
         else
            printf("El caracter %c no se encuentra en la frase", caracter);
      }

      while (contador%aux!=0)         /*Para determinar si un numero es primo o no, lo que debemos hacer
                              es dividir dicho numero por todos lo menores que el de forma que si el resto de todas estas divisiones
                              es 0 excepto cuando dividimos por si mismo y por la unidad.Puesto que todos los numeros son divisinles
                              por la unidad esta posibilidad la excluimos*/
      aux+=1;
      if (contador==aux){
      printf("Existe %i %c en la frase introducida.\n", contador, caracter);//Salida final
      printf("El %i, es primo.\n", contador);
         }
         else
         {
            printf("Existe %i %c en la frase.\n", contador, caracter);   //Salida final
            printf("El %i, no es primo.\n", contador);
         }

   return EXIT_SUCCESS;
}
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines