C sharp - Rotar o desplazar una matriz

 
Vista:
sin imagen de perfil
Val: 1
Ha aumentado su posición en 43 puestos en C sharp (en relación al último mes)
Gráfica de C sharp

Rotar o desplazar una matriz

Publicado por Fernando (1 intervención) el 02/03/2019 13:16:54
Hola buenas, tengo que hacer un ejercicio donde rotar una posición a la derecha en cada fila en una matriz.

Por ejemplo:

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

se convierta en
4 1 2 3
8 5 6 7
12 9 10 11
16 13 14 15
20 17 18 19

El caso es que no lo tengo bien resuelto, pero creo que no es correcto. Por usar en los if valores constantes (por ejemplo J==0). En este caso la matriz siempre es de 5x4. pero para que sirva en matrices de otros tamaños?.
Gracias.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void rotar(int[,] matriz)
        {
            int i, j;
            int filas, columnas, inicio, fin=0;
 
            filas = matriz.GetLength(0);
            columnas = matriz.GetLength(1);
 
            for (i = 0; i < filas; i++)
            {   //este siempre será el valor de la primera fila y  columna  matriz[i, 0]
                inicio = matriz[i,0];
                // Recorremos todos los valores 
                for (j = 0; j < columnas; j++)
                {
                    if (j == 1)
                    {
                        //estamos en la segunda columna
                        matriz[i, j] = fin;
 
                    }
                    //matriz[i,j]= matriz[i,j];
                    if (j == columnas - 1)
                    {// si se cumple es porque es el último valor de cada fila  
                        fin = matriz[i, j];
                        matriz[i, j] = matriz[i, j - 1];
                    }
                }
            }
 
        }
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Rotar o desplazar una matriz

Publicado por Nacho (115 intervenciones) el 02/03/2019 21:33:33
Sí que te vale para matrices de cualquier tamaño porque lo que te da ese tamaño es el GetLength(0) y GetLength(1).

También te has liado un poco en el desarrollo. Si el bucle lo haces de mayor a menor y acabas una posición antes de la última columna no necesitas ningún if.

1
2
3
4
5
6
for (i = 0; i < filas; i++)
{
    fin = matriz[i, columnas - 1];
    for (int j = columnas-2; j >= 0; j--) matriz[i, j+1] = matriz[i, j];
    matriz[i, 0] = fin;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar