Ayuda!

Iniciado por bazokajoe, 24 Octubre 2011, 23:29 PM

0 Miembros y 1 Visitante están viendo este tema.

bazokajoe

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?


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

int main(void) {
char frase[100];
char 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:\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 (frase[i]= frase[longitud])
contador++;
else
printf("El caracter %c no se encuentra en la frase", caracter);
}
while (contador%aux!=0) //inicialmente aux=2 por lo tanto busco un numero que su resto sea
aux+=1; //diferente de 0 y pueda dividirse por el mismo.
if (contador==aux){
printf("Existe %i %c en la frase introducida.\n", contador, caracter);
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;
}

do-while

¡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!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

rir3760

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
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

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;
}