Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/02/2014, 11:33
Avatar de floppy-dj
floppy-dj
 
Fecha de Ingreso: diciembre-2006
Ubicación: Huelva
Mensajes: 25
Antigüedad: 18 años
Puntos: 0
Respuesta: Duda con matrices

hola shin18, se me ocurre que lo hagas de la siguiente forma:

creas una función a la que le pasas una matriz, 2 coordenadas y una matriz mas pequeña, esta función te meterá la matriz pequeña dentro de esas dos coordenadas, puedes pensar que la segunda coordenada es una tontería meterla ya que si es de 3x3 para que le vas ha decir desde donde hasta donde si ya sabe que serian 3 posiciones más, pero si lo haces hasi, podrás meter una matriz del tamaño que quieras, 3x3, 3x2, 4x5...

La función sería una cosa como ésta:
Código:
private static void meter(int[][] m9x9, int cx1, int cy1, int cx2, int cy2, int[][] m3x3) {
        for (int i = cx1; i < cx2; i++) {
            for (int j = cy1; j < cy2; j++) {
                m9x9[i][j] = m3x3[i - cx1][j - cy1];
            }
        }
    }
y la llamada seria asi:
Código:
meter(m9x9,0,0,2,2,m3x31);
Ésta llamada mete la matriz m3x31 dentro de la matriz m9x9, empezando por la posicion 0,0 y terminando en la 2,2 ambas inclusive.


y aqui te dejo un ejemplo completo:
Código:
package javaapplication18;

/**
 *
 * @author floppy
 */
public class JavaApplication18 {
    public static void main(String[] args) {
        int[][] m9x9=new int[9][9];
        int[][] m3x31=new int[3][3];
        int[][] m3x32=new int[3][3];
        int[][] m3x33=new int[3][3];
        int[][] m3x34=new int[3][3];
        int[][] m3x35=new int[3][3];
        int[][] m3x36=new int[3][3];
        int[][] m3x37=new int[3][3];
        int[][] m3x38=new int[3][3];
        int[][] m3x39=new int[3][3];
        int a=0;
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
            //aqui meto valores a las matrices pequeñas
                m3x31[i][j]=a;a++;
                m3x32[i][j]=a;a++;
                m3x33[i][j]=a;a++;
                m3x34[i][j]=a;a++;
                m3x35[i][j]=a;a++;
                m3x36[i][j]=a;a++;
                m3x37[i][j]=a;a++;
                m3x38[i][j]=a;a++;
                m3x39[i][j]=a;a++;
            }
        }
        meter(m9x9,0,0,2,2,m3x31);
        meter(m9x9,0,3,2,5,m3x32);
        meter(m9x9,0,6,2,8,m3x33);
        meter(m9x9,3,0,5,2,m3x34);
        meter(m9x9,3,3,5,5,m3x35);
        meter(m9x9,3,6,5,8,m3x36);
        meter(m9x9,6,0,8,2,m3x37);
        meter(m9x9,6,3,8,5,m3x38);
        meter(m9x9,6,6,8,8,m3x39);
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
            //aqui muestro la matriz grande
               System.out.print(m9x9[i][j]+" ");
            }
            System.out.println("");
        }
    }
    private static void meter(int[][] m9x9, int cx1, int cy1, int cx2, int cy2, int[][] m3x3) {
        for (int i = cx1; i <= cx2; i++) {
            for (int j = cy1; j <= cy2; j++) {
                m9x9[i][j] = m3x3[i - cx1][j - cy1];
            }
        }
    }
}