Ayuda con Programa numeros primos matriz

Iniciado por Jaime1315, 8 Febrero 2013, 04:50 AM

0 Miembros y 1 Visitante están viendo este tema.

Jaime1315

HOLA A TODOS ESPERO ALGUIEN ME PUEDA AYUDAR CON UN PROBLEMA QUE TENGO..
BUENO ESTOY REALIZANDO UNA MATRIZ DE 3X3 LA CUAL ME VA A GUARDAR SOLAMENTE NUMEROS PRIMOS... CUANDO SE INGRESE UN NUMERO DEBE VERIFICAR SI ES PRIMO O NO, SI ES PRIMO LO GUARDA EN LA MATRIZ SINO MANDA UN MESAJE DE QUE NO ES PRIMO Y VUELVE A PEDIR EL NUMERO MI CODIGO ES EL SIGUIENTE:
MUCHAS GRACIAS DE ANTE MANO SALUDOS :D


Código (java) [Seleccionar]
package numprim;
import java.util.*;

public class operacions {
   int matriz[][]=new int[3][3];
   int c,num,f,cl;
   Scanner dato = new Scanner(System.in);
   void sbprimo(){
      f=0;
      cl=0;
      do{
      System.out.println("Ingresa un numero primo");
      num=dato.nextInt();
      res();
      if(res()==true){
          matriz[f][cl]=num;
          cl++;
          c=0;
      }else{System.out.println("no es primo");}
      if(cl>2){
          cl=0;
          f++;
      }
     
   }while((f<3)&(cl<3));
       }
   
   public boolean res(){
       for(int x=1;x<num;x++)
       if(num%x==0)
       c++;
       if(c==2){
           return true;
       }else{
           return false;
       }
   }
   
   void muestram(){
   for(f=0;f<3;f++){
       for(cl=0;cl<3;cl++){
           System.out.print(matriz[f][cl]);
       }
       System.out.println("");
   }
   }
}


--------------------------------------------------------------------
public class Numprim {

   /**
    * @param args the command line arguments
    */
   public static void main(String[] args) {
       operacions mm = new operacions();
       System.out.println("Programa que almacena numeros primos");
       mm.sbprimo();
       mm.muestram();
   }
}

engel lex

dijiste lo que tienes y quieres pero no cual es el problema :s
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Jaime1315

Cita de: engelx en  8 Febrero 2013, 04:58 AM
dijiste lo que tienes y quieres pero no cual es el problema :s

A ok pasa que cuando ingreso  solo numeros primos no hay problema, los guarda y me imprime bien la matriz.... pero si pongo un numero par me manda que nos es primo todo bien hasta ahora pero despues cuando ingreso otro numero  no importa si es primo opar se cicla pidiendo que ingrese numeros nunca termina de pedir  :P

engel lex

#3
no soy experto en java pero veo lo siguiente....

Código (java) [Seleccionar]
while((f<3)&(cl<3));

no deberias usar "&" sino "&&" ya que en java hasta donde recuerdo un & solo hace una operación en binario (por ejemplo 123 & 39 da 35)... en cambio && chequea el resultado y devuelve true o false... puede no se el factor pero nunca está de más hacelo bien porque ese "&" puede retornar valores inesperados (como null pointer exeption y locuras así...)

puedes poner algo como
Código (java) [Seleccionar]

System.out.println(f);
System.out.println(cl);
   }while((f<3)&(cl<3));


y ve si están avanzando apropiadamente f y cl

por otro lado este tipo de operaciones está bien, pero recomiendo colocarle sus llaves "{ }" para asegurarte que no te equivocas en el control de flujo

Código (java) [Seleccionar]
for(int x=1;x<num;x++)
       if(num%x==0)
       c++;



por ultimo creo que este es tu error
x<num
Código (java) [Seleccionar]

for(int x=1;x<num;x++)
       if(num%x==0)
       c++;


ya que si ingresaste 5, el revisará del 1 al 4 (x < 5) asi que en un numero primo, c solo será 1 y nunca 2


lo ultimo que puedes usar es... para saber si un numero es primo, solo debes probar con los números enteros menores a su raíz cuadrada (si es entero e igual, entonces obviamente no es primo) y no es necesario contar el 1...

prueba esos cambios y avisas... yo mañana reviso es tarde para mi D: (1:30am)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Mitsu

#4
Hola,

Soy principiante en Java también, pero tu código no hacía lo que querías. Tu forma de saber si un numero era primo o no era incorrecta.

Aquí te dejo tu código un poco retocado y comentado, trata de comentar lo mas posible tu codigo, asi cualquiera entendera exactamente lo que quieres hacer.

Código (=java) [Seleccionar]
import java.util.Scanner;

public class operacions {

   // creamos la matriz para almacenar los numeros primos
   private int matriz[][]=new int[3][3];
    private int num,f,cl; // creamos las variables numero, fila y columa
    boolean permanencia = true; //creamos la variable de permanencia en el ciclo
   
   Scanner dato = new Scanner(System.in);
   
   void sbprimo(){
      f=0; // inicializamos fila en 0
      cl=0; // inicializamos columna en 0
     
      // pedimos que se ingrese el primer numero
      System.out.println("Ingrese numeros primos o 0 para salir");
      num = dato.nextInt();
     
      //si el numero ingresado es 0, imprimimos un mensaje de salida
      if(num == 0)
      {
        System.out.println("No se ingresaron datos");
      }
     
      // si el numero ingresado es primo se hace el codigo correspondiente:
      if(num!=0)
      {
       // hacemos un bucle do - while que se ejecutara mientras permanencia sea true.
       do{
     
      // le pasamos el numero ingresado por parametro al metodo 'res' para saber si es primo
      res(num);
     
      // si es primo, agregamos el numero ingresado a la fila '0' columna '0'
      if(res(num)==true){
          matriz[f][cl]=num;
          cl++; // Y aumentamos columna en 1
         
      // si no es primo, mostramos un mensaje para que se ingrese nuevamente el numero
      }else{
       
        System.out.println("No es primo. Ingrese nuevamente un numero o 0 para salir");  
      }
     
        // pedimos nuevamente otro numero
        num = dato.nextInt();
        if(num == 0) // si el nuevo numero ingresado es '0', permanencia sera false,
                     // terminando así el procoeso
         permanencia = false;
       
        // si ya se han ingresado las 3 columnas en la fila actual
        // aumentamos fila en 1 y reseteamos columna a 0
        if(cl>2){
          cl=0;
          f++;
      }
        // cuando ya no haya filas para procesar, terminamos el proceso
        if(f>2)
        {
          permanencia = false;
        }
       
       
    // este proceso se ejecutara solo si permanencia es true
   }while( (permanencia == true));
  }
       
   // una vez qu acabe el proceso, imprimimos un mensaje de adios
   System.out.println("\nHa decidido salir del programa. Adios");
       

   muestram(); // e imprimimos los nuevos resultados
 } // fin del metodo sbprimo
   
   public boolean res(int numx){
       int aux; // esta variable nos ayudara a saber si el numero es primo
       for(int cont = 2; cont<numx; cont++)
       {
        aux = numx % cont; // guardamos en 'aux' el modulo del numero y contador
        if(aux == 0)
        return false; // si resulta que los numeros entre
                      // 1 y el numero-1, da residuo 0, devuelve false
       }
        return true; // si no, devolvemos true, indicando que es primo
       
       } // fin del metodo
       
   // mostramos los resultados de la nueva matriz
   void muestram(){
       System.out.println("\nResultados: \n");
    // itera a travez de la matriz
   for(f=0;f<matriz.length;f++){
       // itera a traves de la fila actual
       for(cl=0;cl<matriz[f].length;cl++){
           System.out.print(matriz[f][cl]+" "); // imrpime la matriz
       }
       System.out.println(""); // nueva linea
   }
   } // fin del metodo
   
} // fin


Jaime1315

Hola nuevamente a todos muchas gracias por los comentarios recibidos, ayer pude resolver el problema de manera parecida en que lo resolvió Randomized muchas gracias por el comentario y pues en un ratito mas les subo el programa como tal para que  puedan ver como lo resolvi y casi de manera similar al de  Randomized :D y mil gracias por las respuestas :P

Jaime1315

Citar

package numprim;
import java.util.*;
/**
*
* @author jimmybibi
*/
public class operacions {
    int matriz[][]=new int[3][3];
    int c,num,f,cl;
    Scanner dato = new Scanner(System.in);
    void sbprimo(){
       f=0;
       cl=0;
       do{
       System.out.println("Ingresa un numero primo");
       num=dato.nextInt();
       res();
       if(res()==true){
           matriz[f][cl]=num;
           cl++;
           c=0;
       }else{
           System.out.println("no es primo");
            c=0;
            }
       if(cl>2){
           cl=0;
           f++;
       }
       
    }while((f<3)&(cl<3));
        }
   
    public boolean res(){
        for(int x=1;x<num;x++) {
            if(num%x==0) {
                c++;
            }
        }
        if(c==2){
            return true;
        }
        else{
            return false;
        }
    }
   
    void muestram(){
    for(f=0;f<3;f++){
        for(cl=0;cl<3;cl++){
            System.out.print("["+matriz[f][cl]+"]");
        }
        System.out.println("");
    }
    }
}


------------------------------------------------------------------------

package numprim;

/**
*
* @author jimmybibi
*/
public class Numprim {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        operacions mm = new operacions();
        System.out.println("Programa que almacena numeros primos");
        mm.sbprimo();
        mm.muestram();
    }
}
]


Mitsu

#7
Se ve bien. Podrías poner la salida del algoritmo? para ver su funcionamiento :)

Pd: Coloca los codigos entre code == java TU CODIGO  /code.

code == java va encerrado entre [] y  /code tambien.

esto:

Código (=java) [Seleccionar]
while((f<3)&(cl<3));

Se simplifica a:

Código (=java) [Seleccionar]

while(f<3); // iterará solo si hay filas que recorrer. Si f>=3, el bucle termina


Saludos.