SoloCodigo

CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: sergiotarrillo en Miércoles 6 de Julio de 2005, 05:56

Título: Optimizar Declaraciones De Matrizes
Publicado por: sergiotarrillo en Miércoles 6 de Julio de 2005, 05:56
Código: Text
  1.  public void CrearMatriz(int[][] matrizA, int[][] matrizB) {
  2.  
  3.             int fil;
  4.             int col;
  5.  
  6.             Console.Write("ingrese el numero de filas de la matriz: ");
  7.             fil = int.Parse(Console.ReadLine());
  8.  
  9.             Console.Write("ingrese el numero de columnas de la matriz: ");
  10.             col = int.Parse(Console.ReadLine());
  11.  
  12.             matrizA = new int[fil][];
  13.             for (int i = 0; i < fil; i++)
  14.                 matrizA[i] = new int[col];
  15.  
  16.             matrizB = new int[fil][];
  17.             for (int i = 0; i < fil; i++)
  18.                 matrizB[i] = new int[col];
  19.             
  20.         }
  21.  

quiero optimizar ese codigo?, alguien tiene alguna idea?
Título: Re: Optimizar Declaraciones De Matrizes
Publicado por: Güorker en Miércoles 6 de Julio de 2005, 08:31
Funcionaria esto?
Código: Text
  1. matrizA = new int[fil][col];
  2.  


YO no le he probado, pero si funciona te ahorras los for.

Saludos
Título: Re: Optimizar Declaraciones De Matrizes
Publicado por: JuanK en Miércoles 6 de Julio de 2005, 14:07
creo que no funciona.
Título: Re: Optimizar Declaraciones De Matrizes
Publicado por: JuanK en Miércoles 6 de Julio de 2005, 14:30
Esto optimizaria tu codigo:
Código: Text
  1.  public void CrearMatriz(out int[][] matrizA, out int[][] matrizB)
  2.       {
  3.            int col, i;
  4.  
  5.            Console.Write("ingrese el numero de filas de la matriz: ");
  6.            matrizA = new int[int.Parse(Console.ReadLine())][];
  7.            
  8.            Console.Write("ingrese el numero de columnas de la matriz: ");
  9.            col = int.Parse(Console.ReadLine());    
  10.  
  11.            while(i<matrizA.Length)
  12.                matrizA[i++] = new int[col];
  13.  
  14.            matrizB = MatrizA.Clone();      
  15.        }
  16.  
Esto se usa mucho pero con jagged matrix, es decir donde no necesariamente todas las filas son de 'n' columnas sino que algunas filas son de 'x' y otras de 'z' o'y' columnas.

Pero como segun veo lo que quieres es una matriz de n*m es mejor asi:
Código: Text
  1.  public void CrearMatriz(out int[,] matrizA, out int[,] matrizB)
  2.       {
  3.            int col,  fil;
  4.  
  5.            Console.Write("ingrese el numero de filas de la matriz: ");
  6.            fil = int.Parse(Console.ReadLine());
  7.  
  8.            Console.Write("ingrese el numero de columnas de la matriz: ");
  9.            col = int.Parse(Console.ReadLine());
  10.  
  11.            matrizA = new int[fil,col];
  12.            matrizB = matrizA.Clone();      
  13.        }
  14.  

Si te fijas en ambos casos coloqué en los parametros out, pero no estoy seguro si es permitido en el uso de matrices, eso lo tendrás que verificar tú.
Título: Re: Optimizar Declaraciones De Matrizes
Publicado por: sergiotarrillo en Sábado 9 de Julio de 2005, 20:21
diferencia entre estas dos declaraciones:

Código: Text
  1. int[][] M;
  2.  
  3. int[,] M;
  4.  
Título: Re: Optimizar Declaraciones De Matrizes
Publicado por: JuanK en Sábado 9 de Julio de 2005, 22:20
la primera te sirve para decalarar matrices de 'n' filas
donde cada fila tiene un numero indeterminado e columnas es decir, la primera fila tiene por ejemplo 5 columnas, la segunda tiene 2 etc etc... segun lo que necesites

por esta razon eso no se llama matriz sino suele llamarse jagged array

y la segunda si son propiamente matrrices de 'n' filas por 'm' columnas, es decir todas y cada una de las filas tienen el mismo numero de columnas por lo que si es realmente una matriz.

como es de suponerce la primera tiene más implicaciones de rendimiento que la segunda.
Título: Re: Optimizar Declaraciones De Matrizes
Publicado por: sergiotarrillo en Sábado 9 de Julio de 2005, 22:23
:kicking:

Gracias JuanK!