elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java (Moderadores: Debci, Leyer)
| | | |-+  Program java numeros primos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Program java numeros primos  (Leído 63,263 veces)
painkillerpucela

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Program java numeros primos
« en: 14 Noviembre 2008, 22:44 »

Buenas a todos, es la primera vez que me paso x aki, asi que ya os ire conociendo poco a poco.
Mi duda es sobre un programa en java que me tiene que decir si un numero es primo o no, el caso es que me funciona bien excepto con el 2 y el 3, seguro que es una chorrada pero no lo veo.
Bueno aqui os dejo el codigo:
public class Ej_5
{
   public static void main (String[]args)
   {

      if (args.length ==0)
      {      
         System.out.println("Introduzca al menos un argumento");
      }
      else
      {
         
         int numero=0; boolean es_primo; int j;
         numero=Integer.parseInt(args[0]);

         es_primo=1;
              j = 2;
              while((es_primo==1) && (j<numero) )/* Si es divisible por otro numero no es primo */
         {
                  if( numero%j==0 )
            {   
                           es_primo==false;
                        j=j+1;
                 }
                 if( es_primo=true)
            {
               System.out.println(numero+ "es primo \n");
            }
            else
            {
               System.out.println(numero+ "no es primo \n");
            }
         }
      }
   }
}         
         
Bueno espero que me podais ayudar.
Bye!!


En línea

WannaBeHacker

Desconectado Desconectado

Mensajes: 273



Ver Perfil
Re: Program java numeros primos
« Respuesta #1 en: 14 Noviembre 2008, 23:26 »

Para empezar, es un caos de código, acostúmbrate a programar con un orden, sentencia por línea y esas cosas...

Código
  1. public class Primo {
  2.  
  3.    public static void main(String[] args) {
  4.  
  5.        if (args.length == 0) {
  6.            System.out.println("Introduzca al menos un argumento");
  7.        } else {
  8.  
  9.            int numero = 0;
  10.            boolean es_primo;
  11.            int j;
  12.            numero = Integer.parseInt(args[0]);
  13.  
  14.            es_primo = 1;
  15.            j = 2;
  16.            while ((es_primo == 1) && (j < numero))/* Si es divisible por otro numero no es primo */ {
  17.                if (numero % j == 0) {
  18.                    es_primo==false;
  19.  
  20.                    j = j + 1;
  21.                }
  22.                if (es_primo = true) {
  23.                    System.out.println(numero + "es primo \n");
  24.                } else {
  25.                    System.out.println(numero + "no es primo \n");
  26.                }
  27.            }
  28.        }
  29.    }
  30. }      

Y lo segundo, aquí: es_primo = 1; quieres meter un entero en una variable declarada como booleana.


« Última modificación: 14 Noviembre 2008, 23:30 por WannaBeHacker » En línea

Flakito81


Desconectado Desconectado

Mensajes: 513



Ver Perfil
Re: Program java numeros primos
« Respuesta #2 en: 15 Noviembre 2008, 01:20 »

Yo sinceramente dudo que eso funcione, y que conste que no lo he probado. Aparte del problema con el tipo de datos con la variable es_primo que ya comentó WannaBeHacker, veo el siguiente trozo que me llama la atención:
Código
  1. if (numero % j == 0) {
  2.    es_primo==false;
  3.  
  4.     j = j + 1;
  5. }
  6.  
según eso la variable j no se incrementa al no ser que el numero sea no_primo, y para ser más concreto, j no se incrementa si el numero es diferente de multiplo de dos. Lo correcto sería tener el if sólo para cambiar el estado de la bandera (es_primo) y la j se incrementa siempre o si te gusta liar mas el codigo pones un else e incrementas la j. Sin salir de ese trozo de código recordarte algo básico casi que del prescolar de la programacion:
  = asignacion
== comparacion
asi que es_primo == false no es correcto. Al igual que if (es_primo = true) tmp lo es
.Lo dicho, corrige eso y pon más atención ;)


Saludos!

PD: mira el abre llave del while que WannaBeHacker lo elimino sin querer
« Última modificación: 15 Noviembre 2008, 01:22 por Flakito81 » En línea

sapito169


Desconectado Desconectado

Mensajes: 561



Ver Perfil
Re: Program java numeros primos
« Respuesta #3 en: 15 Noviembre 2008, 01:27 »

en primer lugar tu variable es primo es boolean
esta mal que le das un valor entero

en segundo lugar primero compruebas si es primo con el while y despues muestras el mensaje

segun tu algoritmo tu muestrarias varias veces el mensaje es primo
En línea

juancho77


Desconectado Desconectado

Mensajes: 455


rie con demencia


Ver Perfil
Re: Program java numeros primos
« Respuesta #4 en: 15 Noviembre 2008, 04:36 »

ALGORITMO
Código:
si (numero mod 2 = 0) or (numero mod 3 = 0)
  entonces es_primo<-- true
sino
  para (x desde 2 hasta numero -1 mientras es_primo=true)
    si (numero mod x=0)
      es_primo=false
if (es_primo) mostrar valor.


Algo asi? Es sencillo. Solo debes considerar los casos bases 2 y 3. Obviamente, el 1 es primo y el 0 depende de la teoria donde hayas estudiado. Si son enteros negativos le aplicas math.abs y listo. Saludos.
   
En línea

painkillerpucela

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Re: Program java numeros primos
« Respuesta #5 en: 15 Noviembre 2008, 21:18 »

Muchas gracias a todos por vuestro interes. De todas formas os pido perdon si he metido mucho la gamba ya que estoy aprendiendo java, voy a volver a reescribir el ejercicio y a tener en cuenta las anotaciones que me habeis dicho.
Venga un saludo a todos y si me surge algo nuevo ya me paso por aqui
Bye!!!
En línea

painkillerpucela

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Re: Program java numeros primos
« Respuesta #6 en: 16 Noviembre 2008, 21:43 »

Bueno aqui os dejo el programa corregido otra vez, pero me sigue haciendo lo mismo, ahora me funciona con todos los numeros excepto con el 2(me dice que no es primo) y el 4 (me dice que es primo). A ver si me podeis decir que es lo que esta mal
public class prueba
{
   public static void main (String[]args)
   {

      if (args.length ==0)
      {      /*Comprueba si le pasamos al menos un argumento*/
         System.out.println("Introduzca al menos un argumento");
      }
      else
      {
         int numero=0;int j=2; int primo=1;
         numero=Integer.parseInt(args[0]);

         if(((numero%2)==1)||((numero%3)==1)))
         {
            primo=1;
            j=j+1;
         }
            
         else
         {
            primo=0;
         }
         
         if (primo==1)
         {
            System.out.println(numero+ "es primo \n");
         }
         else
         {
            System.out.println(numero+ "no es primo \n");
         }
      }
   }
}

Venga un saludo y mxas gracias!!!
En línea

Sp1D3rXxX

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Program java numeros primos
« Respuesta #7 en: 20 Noviembre 2008, 23:33 »

a ver si te funciona a mi me va mu bien:

Código
  1. public class ClasePrimo
  2. {
  3. public static void main(String[] args)
  4.  
  5. {
  6. int n=0,d=1;
  7. int N=0;
  8. System.out.print("Introduzca el numero : ");
  9. N=ClaseLectura.leerInt();
  10. do
  11. {
  12. if(N%d==0)
  13. {      
  14. n=n+1;
  15. }
  16. d=d+1;
  17. }
  18. while(d<=N);
  19. if(n==2)
  20. {
  21. System.out.println("Es primo");
  22. }
  23. else
  24. {
  25. System.out.println("No es primo");
  26. }
  27. }
  28. }
  29.  
En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.802


Ver Perfil
Re: Program java numeros primos
« Respuesta #8 en: 26 Noviembre 2008, 20:29 »

Yo no se Java (Apenas aprendiendo)

Pero creo que igual esto te serviria :

Código:
class aplicacion {

public static void main(String[] args) {

Scanner x = new Scanner(System.in);

int numero;

System.out.println("Inserte un numero!");
numero = x.nextInt();

int contador;

for ( contador = 0; contador <= numero; ++contador ) {
if ((contador%2) == 0) {
System.out.println("Es un numero primo "+contador);
} else {
System.out.println("No es un numero primo "+contador);
}
}
}
}

En línea

43H4FH44H45H4CH49H56H45H
Wiki

Desconectado Desconectado

Mensajes: 493



Ver Perfil
Re: Program java numeros primos
« Respuesta #9 en: 27 Noviembre 2008, 15:05 »

Yo no se Java (Apenas aprendiendo)

Pero creo que igual esto te serviria :

Código:
class aplicacion {

public static void main(String[] args) {

Scanner x = new Scanner(System.in);

int numero;

System.out.println("Inserte un numero!");
numero = x.nextInt();

int contador;

for ( contador = 0; contador <= numero; ++contador ) {
if ((contador%2) == 0) {
System.out.println("Es un numero primo "+contador);
} else {
System.out.println("No es un numero primo "+contador);
}
}
}
}


Primero deberias tomar un curso de algoritmos, entender como se comporta una sentencia de control de flujo (en este caso el bucle con for), en este y en la mayoria de los lenguajes.
- Me quedo la duda al ver este codigo
que entiendes por numero primo?

Sp1D3rXxX
Código:
while(d<=N);
no está bien aplicado fijate en el concepto de número primo y verás que tienes cosas demás.

Y el resto de códigos  :laugh:

Código
  1. // NetBeans 5.5
  2. package primo;
  3. import java.io.*;
  4. public class Main {
  5.  
  6.    public Main() {
  7.    }
  8.  
  9.  
  10.    public static void main(String[] args) {
  11.  
  12.            BufferedReader tec;
  13.            String leer;
  14.            int num;
  15.            int cont;
  16.            tec = new BufferedReader( new InputStreamReader(System.in) );  
  17.            try
  18.            {            
  19.            System.out.print("Ingrese numero: \n");                                
  20.            leer = tec.readLine();
  21.            num = Integer.parseInt(leer);            
  22.            if(num > 1)
  23.            {
  24.            cont = 0;
  25.            for(int nu = 2; nu < num; nu++){                
  26.                if(num % nu == 0)
  27.                {
  28.                System.out.print("NO ES PRIMO\n");
  29.                cont = 1;
  30.                break;
  31.                }
  32.            }
  33.            if (cont == 0)  System.out.print("ES PRIMO\n");            
  34.            }
  35.            else if (num == 1) System.out.print("ES NUMERO UNITARIO\n");
  36.            else System.out.print("NUMERO INVALIDO\n");
  37.            }            
  38.  
  39.            catch(Exception e)
  40.            {
  41.                System.out.print("error: " + e.toString());
  42.            }
  43.  
  44.    }
  45.  
  46. }

Bueno esto lo hice de a la rapida, falta agregar varias cosas y mejorar el algoritmo, pero para darse idea de lo que menciono sirve de ejemplo.
En línea


-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W
^Tifa^


Desconectado Desconectado

Mensajes: 2.802


Ver Perfil
Re: Program java numeros primos
« Respuesta #10 en: 27 Noviembre 2008, 15:13 »

43H4FH44H45H4CH49H56H45H  yo creo que deberias hablar menos y aportar mas  ;)

No creo que seas tu la persona mas adecuada para comentar aca como deberia y como no alguien programar un codigo, sobretodo porque observando tu pequeno 'ejemplo' lo mismo que criticas en mi lo estas aplicando en tu codigo.... yo esperaba al menos, ya que te tomas la molestia de criticar algo redundante que tu tambien estas aplicando, yo espera al menos ver que tu creases tu propia funcion independiente que funcionase como un bucle y una sentencia de control de flujo a la vez... al menos si criticas algo, ten con que respaldarlo, sino tienes con que respaldarlo mejor no digas nada.

Yo se perfectamente como funciona una sentencia de control de flujo y es totalmente valido usarlo dentro de un bucle for como lo idealize en mi codigo (aunque imprima numero pares/impares y no primos).

En lo unico que te doy la razon es en lo de numero primo. Pero no en el concepto de la forma como hice el codigo.

Un saludo.
« Última modificación: 27 Noviembre 2008, 15:21 por ^TiFa^ » En línea

-Ramc-


Desconectado Desconectado

Mensajes: 493



Ver Perfil
Re: Program java numeros primos
« Respuesta #11 en: 27 Noviembre 2008, 15:43 »

43H4FH44H45H4CH49H56H45H tu algoritmo no es muy bueno, ademas de que el break en muchos casos quiere decir que la condición de parada de tu bucle no es la correcta, otra cosa, te recomiendo usar Scanner en vez del InputStreamReader, yo propongo este algoritmo para comprobar si un numero es primo:

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. }
Si a alguien le sirve, simplemente lo envias en un for y listo, guardas en un arreglo los que te devuelvan true.
« Última modificación: 27 Noviembre 2008, 15:47 por -Ramc- » En línea


Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.
43H4FH44H45H4CH49H56H45H
Wiki

Desconectado Desconectado

Mensajes: 493



Ver Perfil
Re: Program java numeros primos
« Respuesta #12 en: 28 Noviembre 2008, 06:45 »

43H4FH44H45H4CH49H56H45H  yo creo que deberias hablar menos y aportar mas  ;)

No creo que seas tu la persona mas adecuada para comentar aca como deberia y como no alguien programar un codigo, sobretodo porque observando tu pequeno 'ejemplo' lo mismo que criticas en mi lo estas aplicando en tu codigo.... yo esperaba al menos, ya que te tomas la molestia de criticar algo redundante que tu tambien estas aplicando, yo espera al menos ver que tu creases tu propia funcion independiente que funcionase como un bucle y una sentencia de control de flujo a la vez... al menos si criticas algo, ten con que respaldarlo, sino tienes con que respaldarlo mejor no digas nada.

Yo se perfectamente como funciona una sentencia de control de flujo y es totalmente valido usarlo dentro de un bucle for como lo idealize en mi codigo (aunque imprima numero pares/impares y no primos).

En lo unico que te doy la razon es en lo de numero primo. Pero no en el concepto de la forma como hice el codigo.

Un saludo.
No esperaba que entiendas el código y menos el algoritmo, pero no creí que pudieses confundir cosas tan distintas, ni modo, intentaré con las plastilinas.
*******************************************************************
En tu código indicas que inserte un número, sea para saber si es par o primo ok?
En cada iteración imprimirá si es primo o par, o si no es alguno de ellos ok?
Si introduce 1000 cuantas líneas imprimirá en pantalla hasta llegar al número deseado.

tu propia funcion independiente que funcionase como un bucle y una sentencia de control de flujo a la vez...

Investiga que son las Sentencias de Control de Flujo en Java y te darás cuenta de la tontería que escribiste.

Yo se perfectamente como funciona una sentencia de control de flujo y es totalmente valido usarlo dentro de un bucle for como lo idealize en mi codigo (aunque imprima numero pares/impares y no primos).

Se nota perfectamente.  :rolleyes:

Acerca del código:
Citando la Frikipedia

Código:
El conjunto de los números primos es un subconjunto propio de los números naturales que engloba a
todos los elementos de este conjunto mayores que 1 que son divisibles únicamente por sí mismos y por
la unidad.

Por ejemplo, el número 7 tiene sólo dos divisores que son el 1 y el mismo 7 por lo que 7 es número primo.

Hasta aquí ok?

Si tenemos  1, 2, 3,..., n  para mostrar el ejemplo descartamos el 1 y el mismo número que sería n para hacer la comprobación con módulo "%" puesto que si existe algún número superior a 1 e inferior a n que sea divisor de n, entonces NO SERA PRIMO, por lo tanto es inútil recorrer todos los números hasta n si encontramos algún divisor antes. Y remarcar que es una tontería comprobar con módulo "%" si n es divisible entre n eso por el "<=".
Expresado en java:
Código
  1. if(num > 1)
  2.            {
  3.            cont = 0;
  4.            for(int nu = 2; nu < num; nu++){                
  5.                if(num % nu == 0)
  6.                {
  7.                System.out.print("NO ES PRIMO\n");
  8.                cont = 1;
  9.                break;
  10.                }
  11.            }
  12.            if (cont == 0)  System.out.print("ES PRIMO\n");
  13. }

Espero que hayas captado algo de lo dicho puesto que no sabría como explicarlo de forma más sencilla.


43H4FH44H45H4CH49H56H45H tu algoritmo no es muy bueno, ademas de que el break en muchos casos quiere decir que la condición de parada de tu bucle no es la correcta, otra cosa, te recomiendo usar Scanner en vez del InputStreamReader, yo propongo este algoritmo para comprobar si un numero es primo:

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. }
Si a alguien le sirve, simplemente lo envias en un for y listo, guardas en un arreglo los que te devuelvan true.


- if/numero % i == 0) en que planeta funciona semejante linea?  :-\
- i <= raiz  en que momento un entero puede ser igual a un double??? por ejemplo Math.sqrt(10);  :-X

- Así que hay que crear un arreglo para guardar los true  :o
- Prueba tu algoritmo con 900 o similares y veras que buen funcionamiento tiene  :rolleyes:

Citar
te recomiendo usar Scanner en vez del InputStreamReader
- Excelente recomendación de alguien que no sabe ni como funciona su propio algoritmo  :rolleyes:
- No voy a comentar matemáticas de primaria para hacerte ver lo ineficiente de tu algoritmo con ciertos tipos de números.
« Última modificación: 28 Noviembre 2008, 06:56 por 43H4FH44H45H4CH49H56H45H » En línea


-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W
^Tifa^


Desconectado Desconectado

Mensajes: 2.802


Ver Perfil
Re: Program java numeros primos
« Respuesta #13 en: 28 Noviembre 2008, 17:17 »

-Ramdc-    te doy mucha razon en el uso del break en un bucle  ;) eso es una mera violacion de un lenguaje limpio estructurado. Pero conversando con Mister Perfecto en logica y analitica no creo que llevemos mucha ventaja o si  :-*

Citar
Si introduce 1000 cuantas líneas imprimirá en pantalla hasta llegar al número deseado.

Lo mas logico al hacer un programa de uso para otra persona es hacer los tipos de inserciones dinamicas, ya sean para vectores, arreglos o variables. Si ponemos datos meramente estaticos, para que servira tu aplicacion??? imaginate una calculadora donde este solamente predestinada a sumar 2+2 de que te sirve a ti o a otro??? Sinceramente, si te basas en que un codigo esta mal, sencillamente por aplicar la tecnica de valores dinamicos, asumo que tu no programas ninguna aplicacion para uso particular de nadie, ya que el 90% de aplicaciones teoricamente aplican el uso de valores dinamicos sino son inusables.

Y si para ti es una limitante que yo no haya colocado un numero maximo de insercion, eso no es mala logica analitica porque para datos grandes por eso se desarrollo y existe el tipo de datos para guardar una cantidad de numero infinitos.. entonces si mi teoria segun tu esta erronea, los desarrolladores que crearon el tipo de datos a guardar en una variable tambien.

Esto amigo, no es un error, cualquier programador novato si considera puede hacer una variable de valor dinamico y limitar hasta que numero maximo (En el caso del programa expuesto) tiene x usuario capacidad de realizar una insercion. Por ende, vuelvo y te repito...

Habla menos y aporta mas   ;)
En línea

Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Multiplica 2 numeros con java
Java
Tuplado 4 1,499 Último mensaje 13 Octubre 2012, 21:27
por Tuplado
Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines