Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Dem0ny en 27 Noviembre 2008, 18:20 pm



Título: No me sale el algoritmo! >_>
Publicado por: Dem0ny en 27 Noviembre 2008, 18:20 pm
Hola buenas! Tengo un pequeño problemilla. Intento hacer un codigo que solicite 2 numeros y que me imprima los numeros impares y primos de entre los numeros enteros entre los dos numeros que nos facilita el usuario (por separado). (En realidad no es un programa que haga simplemente esto si no, una de las opciones de un menú donde hay multitud de operaciones matemáticas, pero especialmente en el algoritmo de calcular primos y el de impares por separado, no me sale he probado mil algoritmos con mil bucles distintos, for, while, do-while con switch no lo e llegado a intentar aunke kreo que no saldrá....

El de los primos no tengo ni idea asike lo más seguro ske lo suprima del menú. Lo que mas me gustaría centrarme es para calcular los impares, por lo menos:

Tengo algoritmos como:

Código
  1. while ( numero1<numero2)
  2. {
  3. if((numero1%2)!=0)
  4. {
  5. System.out.printf("El numero impar es: %d", numero1);
  6. }
  7. numero1++;
  8. }
  9.  

Este me crea bucle infinito.

Código
  1. while ((numero1<numero2) && ((numero1%2)!=0)){
  2. s.o.p.("El numero impar es: %d", numero1);
  3. numero1++;
  4. }
  5.  

Se me keda frito, tapoco funciona.

**********eSTos son los 2 algoritmos que veo mas probables para hacerlo con while, tengo muchos mas luego los pego por aki si hace falta pero enfin..

TB e probao con otros como:

Código
  1. for(i=numero1;i=<numero2){
  2. if((i%2)!=0){
  3. System.out.printf("Impar: %d\n", i);
  4. }
  5. i++;
  6. }
  7.  

Con for, este por ej. tengo otro por ahi, otro con do while, pero es muy parecido al del while, haciendo incremente y tal. y con el swicht me gustaria saber si es posible hacerlo. Por curiosidad nada mas.

Saludos! Aver si pueden echarme un cable que me trae de cabeza este algoritmo y se que me ekivoco en una idiotez pero no la identifico, gracias de antemano



Título: Re: No me sale el algoritmo! >_>
Publicado por: -Ramc- en 27 Noviembre 2008, 18:33 pm
Si entendi bien, lo que quieres es que te imprima los números impares y primos, en el otro post, puse un algortimo para ver si un número es primo, tal vez te sirva, y para los impares podrias hacer algo mas o menos así:

Código
  1. for(int i = numero1; i < numero2; i++) {
  2.                if((i % 2) != 0)
  3.                        System.out.println(i + " es impar");
  4. }
  5.  

el de los primos es:

Código
  1. public boolean esPrimo(int numero) {
  2.            double raiz = Math.sqrt(numero);
  3.            for(int i = 2; i <= raiz; i++) {
  4.                     if(numero % i == 0)
  5.                                return false;
  6.            }
  7.            return true;
  8. }

En tus algoritmos:
printf no existe y no se usa de esa forma el println, mira como lo uso en el de arriba.

El segundo algoritmo sale al primer número que no sea impar.

Y el tercero, igual lo del printf y ademas es <= no =<, también te dara errores. No tengo tiempo de mirarlos bien, porque voy de salida a clases, pero, creo que es eso mas o menos.


Título: Re: No me sale el algoritmo! >_>
Publicado por: juancho77 en 27 Noviembre 2008, 19:45 pm
Código
  1. public boolean esPrimo(numero)
  2. {
  3.  if ((numero==1)||(numero==2)||numero==3))
  4.     return true;
  5.  else
  6.  {
  7.     for (int i=2;i<numero;i++)
  8.     {
  9.        if (numero % i ==0)
  10.         return false;
  11.     }
  12.  return true;
  13. }

Ese es el basico esPrimo. Lo puedes optimizar disminuyendo la cantidad de condiciones del primer if y evitando que recorra (en el for) numero innecesarios: un numero nunca sera divisible por aquellos que esten entre (numero/2)+1 y numero-1.
Saludos.


Título: Re: No me sale el algoritmo! >_>
Publicado por: Dem0ny en 27 Noviembre 2008, 19:58 pm
Joer muchas gracias por lo del numero primo, :)) :) Y por el codigo rmc, tb, dios que idiotez fallaba en una tonteria y me volvia loco buscando.

Que estaría mal en este bucle?:

Código
  1. do{
  2. System.out.printf.("El numero impar es: %d", numero1);
  3. numero1++;
  4. }while ((numero1<numero2) && ((numero1%2)!=0))
  5.  

Nosé porque me sale mal porque sale impar: un numero, impar: otro numero y estan mal uno de ellos siempre y no imprime mas de 2 numeros... nose como solucionarlo, si me facilitan una orientación se lo agradeceria, esque los bucles me cuestan xDD

Gracias  de nuevo por lo del numero primo


Título: Re: No me sale el algoritmo! >_>
Publicado por: -Ramc- en 28 Noviembre 2008, 20:15 pm
~AbbadoN~  printf no existe :P

supongo que numero1 es 0, al principio del bucle y lo imprime, después aumenta en 1 es decir que numero1 seria 1, hace la comprobación de que numero1 sea menor que numero2, supongo que numero2 sera uno mas grande, luego comprueba que numero1%2 no sea 0 y pasa la comprobación, vuelve a entrar, imprime el 1, aumenta a 2, hace la comprobación y como 2%2 da 0, sale del bucle y no entra mas. Por eso solo te imprime 2 numeros.


Título: Re: No me sale el algoritmo! >_>
Publicado por: Dem0ny en 29 Noviembre 2008, 03:51 am
Ya funciona.

Printf si existe en java, pruebalo  :P