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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Ayuda Matrices Dispersas
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda Matrices Dispersas  (Leído 5,708 veces)
Web-On

Desconectado Desconectado

Mensajes: 3



Ver Perfil
Ayuda Matrices Dispersas
« en: 28 Marzo 2015, 18:10 pm »

Buenas tardes, estoy haciendo un ejercicio en java de matrices dispersas en tripletas, el cual es un menu con lo siguiente:
1.Mostrar la matriz dispersa.
2.Sumar dos matrices dispersas.
3.multplicar.
4.Sumar traspuestas.
5.Comparar dos matrices dispersas.

Mis dudas son las siguientes:
-¿Uso bien la segunda matriz?,estoy perdido en eso, no se si la puedo haer con el contructor.
-¿Como podria hacer las traspuestas?
-¿La suma y la multplicacion estan bien?¿necesitan otra condicion?
-¿Que otros errores tengo?

Lo que llevo es lo siguiente:
Código:
import java.util.Scanner;


public class MatDisp {
   private Scanner teclado;
   private int Nfilas;
   private int Ncol;
   private int CantDatos;
   private int[][] Mat;

   
   
   //Constructor
   public MatDisp(int Nf, int Nc, int Cd){
      Nfilas = Nf;
      Ncol = Nc;
      CantDatos = Cd;
      Mat = new int [CantDatos +1][3];
      Mat[0][0]= Nfilas;
      Mat[0][1]= Ncol;
      Mat[0][2]= CantDatos;
   }
   
   
   
   //Llenar
   public void Llenar(){
       teclado=new Scanner(System.in);
       int i;
       for(i = 1;i < Mat[0][2] + 1;i++){
           System.out.println("Ingrese la fila ");
           Mat[i][0] = teclado.nextInt();
           System.out.println("Ingrese la columna ");
           Mat[i][1] = teclado.nextInt();
           System.out.println("Ingrese el dato diferente de 0");
           Mat[i][2] = teclado.nextInt();
           while(Mat[i][2] == 0){
               System.out.println("No se puede ingresar un dato 0");
               System.out.println("Ingrese el dato diferente de 0");
               Mat[i][2] = teclado.nextInt();
           }
       }
   }
   
   //Mostrar
   public void Mostrar(){
       int i;
       for(i = 1;i < Mat[0][2] + 1;i++){
           System.out.println(Mat[i][2]);
       }   
   }
   
   //Sumar
   public void Sumar(int B[][]){
       int i = 1;
       int[][] R;
       if((Mat[0][0] == B[0][0]) && (Mat[0][1] == B[0][1])){
           R = new int[Mat[0][0]][Mat[0][1]];
           while((i <= B[0][2]+1)&&(i <= Mat[0][2]+1)){
               if((B[i][0] == Mat[i][0]) && (B[i][1] == Mat[i][1])){
                   R[i][0] = Mat[i][0];
                   R[i][1] = Mat[i][1];
                   R[i][2] = Mat[i][2] + B[i][2];
                   if(R[i][2] == 0){
                       //eliminar
                       //redimensionar
                   }
                   i =i + 1;
                   
               }
               else{
                  R[i][0] = Mat[i][0];
                  R[i][1] = Mat[i][1];
                  R[i][2] = Mat[i][2];
                  i =i + 1;
               }
           }
       }
   }
   
    //Multiplicar
    public void multiplicacion(int B[][]){
        int i = 1;
        int[][] R;
        if(Mat[0][1] == B[0][0]){
           R = new int[Mat[0][0]][Mat[0][1]];
           while((i <= B[0][2]+1)&&(i <= Mat[0][2]+1))
            if((B[i][0] == Mat[i][0])&&(B[i][1] == Mat[i][1])){
               R[i][0] = Mat[i][0];
               R[i][1] = Mat[i][1];
               R[i][2] = Mat[i][2]*B[i][2];
               i =i + 1;
            }
        }
        else{
          System.out.println("No se pueden multiplicar las matrices");
        }
    }
   
    //SumarTraspuestas
    public void SumarTraspuestas(int B[][]){
       
    }
   
    //comparar
    public void Comparar(int B[][]){
        int i,j;
        for(i = 0;i <= Mat[0][2] + 1;i++){
          for(j = 0;j <= Mat[0][2] + 1;i++) {
              if(Mat[i][j] == B[i][j]){
                  System.out.println("Las matrices son iguales");
              }
              else{
                  System.out.println("Las matrices no son iguales");
              }
          }
        }
    }
   
    public static void main(String[] args) {
       Scanner teclado=new Scanner(System.in);
       int Nf,Nc,Cd,Op,f,c,d;
       int[][] B;
       System.out.println("Ingrese el numero de filas ");
       Nf = teclado.nextInt();
       System.out.println("Ingrese el numero de columnas ");
       Nc = teclado.nextInt();
       System.out.println("Ingrese la cantidad de datos ");
       Cd = teclado.nextInt();
       MatDisp Tri = new MatDisp(Nf, Nc,Cd);
       Tri.Llenar();
       
       do{
          System.out.println("Menu principal ");
          System.out.println("1) Mostrar ");
          System.out.println("2) Sumar ");
          System.out.println("3) Multiplicar ");
          System.out.println("4) Sumar traspuestas ");
          System.out.println("5) Comparar ");
          System.out.println("6) Salir ");
          System.out.println("Ingrese una opcion ");
          Op = teclado.nextInt();
          switch(Op){
              case 1 : Tri.Mostrar();
                       break;
              case 2 : System.out.println("Ingrese el numero de filas de la matriz B");
                       f = teclado.nextInt();
                       System.out.println("Ingrese el numero de columnas de la matriz B ");
                       c = teclado.nextInt();
                       System.out.println("Ingrese la cantidad de datos de la matriz B ");
                       d = teclado.nextInt();
                       B = new int[d+1][3];
                       B[0][0]= f;
                       B[0][1]= c;
                       B[0][2]= d;
                       Tri.Llenar();
                       Tri.Sumar(B);
                       break;
              case 3 : System.out.println("Ingrese el numero de filas de la matriz B");
                       f = teclado.nextInt();
                       System.out.println("Ingrese el numero de columnas de la matriz B ");
                       c = teclado.nextInt();
                       System.out.println("Ingrese la cantidad de datos de la matriz B ");
                       d = teclado.nextInt();
                       B = new int[d+1][3];
                       B[0][0]= f;
                       B[0][1]= c;
                       B[0][2]= d;
                       Tri.Llenar();
                       Tri.multiplicacion(B);
                       break;
              case 5 : System.out.println("Ingrese el numero de filas de la matriz B");
                       f = teclado.nextInt();
                       System.out.println("Ingrese el numero de columnas de la matriz B ");
                       c = teclado.nextInt();
                       System.out.println("Ingrese la cantidad de datos de la matriz B ");
                       d = teclado.nextInt();
                       B = new int[d+1][3];
                       B[0][0]= f;
                       B[0][1]= c;
                       B[0][2]= d;
                       Tri.Llenar();
                       Tri.Comparar(B);
              case 6 : break;
          }
       }while(Op >= 1 || Op <= 6);
    }
   
}

Gracias de antemano.


En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Ayuda Matrices Dispersas
« Respuesta #1 en: 28 Marzo 2015, 18:26 pm »

No se tú, pero yo tu código lo veo bastante ilegible. Por ejemplo, para sumar dos matrices, lo haría así:

Código
  1. public Integer[][] sum(Integer[][] values) {
  2. Integer[][] sum = new Integer[mat.length][math[0].length];
  3. for(int row=0; row<mat.length; row++) {
  4. sum[row][col] = 0;
  5. for(int col=0; col<mat[row].length; col++) {
  6. sum[row][col] = mat[row][col] + values[row][col];
  7. }
  8. }
  9. return sum;
  10. }

Cabe alcarar que no puedes redimensionar un array. Lo que puedes es crear un array temporal y luego asignarlo (referencia) al original. Si quiseras redimensionar, tendrías que usar List.

Sobre los errores, ¿te muestra algunos el compilador, o lo que quieres es que vean si tu código está bien hecho?


Saludos.


En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
Web-On

Desconectado Desconectado

Mensajes: 3



Ver Perfil
Re: Ayuda Matrices Dispersas
« Respuesta #2 en: 28 Marzo 2015, 22:12 pm »

¿Porque ilegible?,¿El metodo suma que tienes no es para una matriz normal?

Pongo un ejemplo de representacion de matrices dispersas en tripletas

En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Ayuda Matrices Dispersas
« Respuesta #3 en: 29 Marzo 2015, 17:47 pm »

Hola,

Citar
¿Porque ilegible?

¿Qué significa ésto?

Código
  1. public void Sumar(int B[][]){
  2.       int i = 1;
  3.       int[][] R;
  4.       if((Mat[0][0] == B[0][0]) && (Mat[0][1] == B[0][1])){
  5.           R = new int[Mat[0][0]][Mat[0][1]];
  6.           while((i <= B[0][2]+1)&&(i <= Mat[0][2]+1)){
  7.               if((B[i][0] == Mat[i][0]) && (B[i][1] == Mat[i][1])){
  8.                   R[i][0] = Mat[i][0];
  9.                   R[i][1] = Mat[i][1];
  10.                   R[i][2] = Mat[i][2] + B[i][2];
  11.                   if(R[i][2] == 0){
  12.                       //eliminar
  13.                       //redimensionar
  14.                   }
  15.                   i =i + 1;
  16.  
  17.               }
  18.               else{
  19.                  R[i][0] = Mat[i][0];
  20.                  R[i][1] = Mat[i][1];
  21.                  R[i][2] = Mat[i][2];
  22.                  i =i + 1;
  23.               }
  24.           }
  25.       }
  26.   }

Para tí, tiene un significado fácil de comprender, porque tú lo has escrito, pero si otro programador viene y lee ese código, no entenderá un carajo (al menos en primera instancia).

¿Qué es R?
¿Qué es B?
¿Qué hace el if?
¿Qué hace el while?

Java es un lenguaje orientado a objetos y debe de aprovecharse esa característica. Lo que tienes que hacer, es modularizar. Dividir un código extenso y difícil de mantener en clases y métodos, de manera que todos interactúen entre sí para dar con la solución de una manera ordenada.

Alternativamente, si vas a realizar un código así, te recomiendo comentar mucho tu código, cosa que por un lado, no es tan bueno. Por último, las variables en Java comienzan con minúscula y además, según las buenas prácticas dadas por Sun/Oracle, nos dice que debemos de darle nombres descriptivos a las variables/objetos que usemos, de manera, que con tan solo ver el nombre sepamos qué es lo que hace o para qué está allí.


Saludos.
En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
Web-On

Desconectado Desconectado

Mensajes: 3



Ver Perfil
Re: Ayuda Matrices Dispersas
« Respuesta #4 en: 29 Marzo 2015, 18:09 pm »

Hola,

¿Qué significa ésto?
Tienes razon, perdon pero apenas estoy aprendiendo el lenguaje.
Bueno, La matriz B es la segunda matriz , sumare Mat[][] y B[][], R[][] sera la matriz resultante.
El if lo que hace es comparar que tengan las mismas dimensiones para que se puedan sumar, ya que en una matriz dispersa en forma de tripletas, La posicion [ 0 ][ 0 ] guarda el numero de filas de la matriz, la [ 0 ][1] el numero de columnas, si se cumple esto puedo sumar.
El while lo que hace es recorrer las dos matrices, la recorrera hasta que i<= Mat[ 0 ][2] +1 , en lforma de tripletas en la posicion [ 0 ][2] va a cantidad de datos diferentes de cero(0).

« Última modificación: 29 Marzo 2015, 18:12 pm por Web-On » En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Ayuda Matrices Dispersas
« Respuesta #5 en: 29 Marzo 2015, 18:13 pm »

Ahora cambia la cosa xD, ¿ya ves la importancia de hacer un código limpio? Imagina tener que explicar en un documento todo lo que hace tu clase, cuando modularizando y tomando buenas prácticas, tan solo con leer el código entiendes qué es lo que hace.

Un saludo y gracias por compartir, seguro a alguien le servirá ;)
En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con matrices
Java
fileto 2 2,889 Último mensaje 13 Febrero 2009, 06:13 am
por fileto
Ayuda con matrices
.NET (C#, VB.NET, ASP)
sheccid65 0 2,480 Último mensaje 6 Febrero 2010, 19:44 pm
por sheccid65
Ayuda con matrices
Java
ArhennJosey 2 2,864 Último mensaje 7 Mayo 2010, 22:29 pm
por 1mpuls0
ayuda en matrices c# !!
.NET (C#, VB.NET, ASP)
jcac12 1 6,167 Último mensaje 13 Noviembre 2011, 18:02 pm
por Morringos
Matrices Dispersas En C++
Programación C/C++
Ing99 0 4,679 Último mensaje 3 Octubre 2017, 04:54 am
por Ing99
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines