22/12/2012, 05:03
|
| | Fecha de Ingreso: diciembre-2012
Mensajes: 1
Antigüedad: 12 años Puntos: 0 | |
Respuesta: Encontrar el error en este programa Tienes multitud de errores en el código, te digo algunos para que vayas avanzando en tu propia solución, que es una de las mejores maneras de aprender:
en el procedimiento calculo:
<code>
printf("\n\n\n\n\n\n\n\n\n\n\n\n\nLo sentimos. El numero %d no es primo.");
</code>
debería ser
<code>
printf("\n\n\n\n\n\n\n\n\n\n\n\n\nLo sentimos. El numero %d no es primo.",n);
</code>
Es decir, se ha de indicar la variable de la que tomar el entero, sino mostrará basura.
en el procedimiento eleccion:
Tienes todas las ideas mal, te explico:
<code>
char n,s;
</code>
En esta línea declaras dos variables de tipo char, que además no están inicializadas por lo que contienen basura, y creo que querías algo así
<code>
char respuesta[]={'n','s'};
//o
char respuesta[]={"ns"};
</code>
Más adelante pones
<code>
if(getchar() == n)
{
printf("\n\nHasta luego!");
getch();
exit(0);
}
if(getchar() == s) calculo();
if(getchar() != n&&getchar() != s);
</code>
Debes de tener en cuenta que cada vez que llamas a getchar() se lee una tecla del teclado, que si no la asignas sólo te sirve para una unica comparación, después el valor se pierde, que además el valor que lees del teclado lo comparas con la variable n, que contiene basura, no con una variable n conteniendo el valor 'n' ni tan siquiera con la constante 'n'. Deberías entender los conceptos básicos de variable, constante, asignación, retorno de una función..., antes de continuar avanzando
por cierto, una implementación d¡ferente de la respuesta de ecfisa, en la que se debe tener en cuenta lo siguiente en una sentencia for la sentencia de evaluación se ejecuta una vez más de las veces que se ejecute el bucle, por lo que en aras de la eficiencia se deben evitar llamadas a función que retornan el mismo valor todas las veces que son llamada(s).
<code>
#include<stdio.h>
#include<math.h>
int esprimo(int);
int main()
{
int num;
printf("Introduzca el numero a comprobar: ");
scanf("%d",&num);
printf("\n");
printf("%d %s es primo",num,esprimo(num)?"":"no");
}
int esprimo(int nro)
{
int i,sq=sqrt(nro);
for(i=2; i <= sq; i++)
if (nro % i == 0) return 0;
return 1;
}
</code> |