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;
}
¡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/ (http://www.cplusplus.com/reference/clibrary/cstdio/fgets/)
¡Saludos!
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
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;
}