Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: gerardo_salas en 21 Junio 2017, 01:13 am



Título: al ejecutarlo me marca un error y no encuentro donde esta
Publicado por: gerardo_salas en 21 Junio 2017, 01:13 am
este programa me deberia dar los numeros primos o no o sin son par o no, pero al ejecutarlo me marca un error y no encuentro donde esta, me podrian ayudar a encontrar el error?  gracias

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. bool EsPrimo (int x);
  6. bool EsPar (int x);
  7.  
  8. bool EsPrimo (int x){
  9. bool primo = false;
  10. int num_divisibles = 0;
  11. int y = x;
  12.  
  13. while (x > 1){
  14. if (x%y == 0)
  15. num_divisibles++;
  16. y--;
  17. }
  18. if (num_divisibles == 2)
  19. primo = true;
  20. return primo;
  21. }
  22.  
  23. bool EsPar (int x){
  24. bool par = false;
  25. if (x%2 == 0)
  26. par = true;
  27. return par;
  28. }
  29.  
  30.  
  31. int main(){
  32. int x;
  33. bool primo, par;
  34. string stpar = "es par";
  35. string stprimo = " es primo";
  36.  
  37.  
  38. cout << "Indique el numero: ";
  39. cin >> x;
  40.  
  41. while (x/10 != 0){
  42. primo = EsPrimo (x%10);
  43. par = EsPar (x%10);
  44.  
  45. if (primo == false)
  46. stprimo = " no es primo";
  47.  
  48. if (par == false)
  49. stpar = " no es par";
  50.  
  51.  
  52. cout << "El numero " << x%10 << stprimo << " y " << stpar << endl;
  53. x = x/10;
  54.  
  55. stprimo = " es primo";
  56. stpar = "es par";
  57. }
  58.  
  59. return 0;
  60.  
  61.  
  62. }
  63.  


· Los códigos deben ir en etiquetas GeSHi
· No se debe escribir en mayúsculas
>aquí las reglas del foro (http://foro.elhacker.net/reglas.htm)
-Engel Lex


Título: Re: al ejecutarlo me marca un error y no encuentro donde esta
Publicado por: engel lex en 21 Junio 2017, 01:37 am
el codigo me paerece que es muy optimizable, por ejemplo, es obvio que el numero es divisible entre 1, por lo tanto no es necesario ver si hay 2, divisibles, pero no entiendo el while x/10...

pero más allá de eso el error está aquí, desde la linea 13
Código
  1. int y = x;
  2.  
  3. while (x > 1){
  4. if (x%y == 0)
  5. num_divisibles++;
  6. y--;
  7. }

disminuyes y que es el divisor, por consecuencia terminas dividiendo entre 0 y en un ciclo infinito, porque x siempre será el mismo valor , si cambias atento a los divisibles... nada más sera 1