Autor
|
Tema: problemas con else no puedo compilar (Leído 2,753 veces)
|
myblade2011
Desconectado
Mensajes: 1
|
#include <cstdlib> #include <iostream> using namespace std; int main() { //Realice un programa en C++ que lea un numero N, entero y positivo, que diga si N es un numero primo o no. Los números primos son aquellos que solo son divisibles por 1 y por ellos mismos. .// int n,i,c; cout<<"ingrese un numero"<<endl; cin>>n; for( i=1; i<=n;i++); if (n%i==0)c++; if(c==2);{ cout<<"el numero es primo"<<endl; } else { cout<<"no es un numero primo "<<endl; } system("pause"); return EXIT_SUCCESS; } [code][code][code][code][code][code][code] [/code][/code][/code][/code][/code][/code][/code]
|
|
|
En línea
|
|
|
|
Gh057
Desconectado
Mensajes: 1.190
|
hola myblade2011 antes de todo el código debes insertarlo dentro de las etiquetas geshi, a groso modo, sobra el ; en las líneas: (haría el loop y luego seguría las sentencias siguientes) y en (luego de la condición, no haría nada; después seguiría el curso normal del programa) saludos
|
|
|
En línea
|
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
Como te comentó Gh057 el problema por el que no compila se encuentra en la línea if(c==2);{
Al tener ese punto y coma el if, simplemente, termina ahí, luego se abren unas llaves que ya no están relacionadas con el if y el else se queda huérfano. Hay que tener bastante cuidado al poner los ';' en C y C++... ya que si no el compilador da errores que pueden llegar a ser bastante complicados de encontrar.
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Antes que nada, cuando le das a GeSHi elige las etiquetas de C++, así el código sale coloreado y es más fácil de seguir y justito en medio de las dos etiquetas code que te salen, repito, justito en medio, pegas tu código.
Además de lo que ya te han comentado sólo un par de observaciones:
* Si un for, if else...se componen de una sola instrucción, no son necesarias las llaves, sólo consigues recargar el códigó
Por ejemplo en:if(c==2);{ cout<<"el numero es primo"<<endl; } else { cout<<"no es un numero primo "<<endl; }
te sobran las llaves. No están mal, no, pero lo que te dije, recargas el código innecesariamente, además te falla la indentación sin ninguna necesidad.
* Y si el "cuerpo" del for, while, if, ....se componen de varias líneas entonces es obligado el poner las llaves.
Por ejemplo en tu código:
for( i=1; i<=n;i++); if (n%i==0)c++;
además de sobrarte, como ya te comentaron el punto y coma del for, sólo te queda por separa en líneas diferentes, para una mejor claridad:for( i=1; i<=n;i++); if (n%i==0)c++;
amén de que no es buena praxis el usar la misma línea para lo que en realidad son dos juegos de instrucciones:así no:f (n%i==0)c++;
así sí:for( i=1; i<=n;i++) if (n%i==0) c++;
Un último detalle, la variable "c" es lo que podríamos denominar un acumulador ya que "partiendo de un valor inicial" se le van sumando incrementos en este caso concreto, c++, y sin embargo tú en la declaración no tienes inicializada esta variable:int n,i,c;
deberías haberle dado a "c" el valor inicial de cero para luego ir sumando con "c++". Al no hacerlo así es muy probable, todo depende del compilador ya que algunos por defecto inicializan las variables a cero por defecto, aunque no es lo usual, como decía es muy probable que la variable tome lo que se llama un valor basura o aleatorio y ahí te fallará siempre la condición de c==2 por culpa de haber tomado c un valor inicial extraño.
Además no dejes de indentar o sangrar todo el código con el mismo criterio.
Te paso el código con todas las observaciones:#include <cstdlib> #include <iostream> using namespace std; int main(){ //Realice un programa en C++ que lea un numero N, entero y positivo, que diga si N es un numero primo o no. Los números primos son aquellos que solo son divisibles por 1 y por ellos mismos. .// int n,i,c=0; cout<<"ingrese un numero"<<endl; cin>>n; for( i=1; i<=n;i++) if (n%i==0) c++; if(c==2) cout<<"el numero es primo"<<endl; else cout<<"no es un numero primo "<<endl; system("pause"); return EXIT_SUCCESS; }
Otra cosa es el criterio que has seguido para comprobar si el número es o no primo. Si quieres mejorarlo busca en este mismo foro o googlea un poco y obtendrás códigos más eficientes que el que estas usando.¡¡¡¡ Saluditos! ..... !!!! EDITADO con la observación de ivancea96
|
|
« Última modificación: 19 Marzo 2014, 19:56 pm por leosansan »
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
al componerse el for de dos líneas sí son necesarias y obligatorias las llaves, así no: for( i=1; i<=n;i++); if (n%i==0)c++;
En realidad, el "IF", y todo el código que entra dentro de este, es como solo 1 instrucción para el "FOR". Ya tiene sus propias llaves. Era correcto.
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
En realidad, el "IF", y todo el código que entra dentro de este, es como solo 1 instrucción para el "FOR". Ya tiene sus propias llaves. Era correcto.
Bien visto ivancea96 . Ya he editado el código con tu observación. ¡¡¡¡ Saluditos! ..... !!!!
|
|
« Última modificación: 22 Marzo 2014, 08:34 am por leosansan »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[C++]Registros - No puedo compilar
Programación C/C++
|
VCore
|
4
|
2,630
|
15 Junio 2010, 15:07 pm
por VCore
|
|
|
No puedo compilar!
Programación C/C++
|
markosliveup
|
2
|
9,132
|
7 Marzo 2011, 16:05 pm
por Gunit
|
|
|
No puedo compilar con make
Programación C/C++
|
chica_23
|
3
|
12,899
|
25 Marzo 2011, 05:34 am
por D4RIO
|
|
|
No puedo compilar esto.
Programación C/C++
|
0xDani
|
2
|
2,633
|
3 Junio 2012, 12:58 pm
por 0xDani
|
|
|
No puedo crear y compilar proyectos en Mac c++
Programación C/C++
|
yoyefej298
|
1
|
3,580
|
9 Marzo 2021, 21:58 pm
por Eternal Idol
|
|