Pascal/Turbo Pascal - Rotar Matriz

 
Vista:

Rotar Matriz

Publicado por Santiago (2 intervenciones) el 02/11/2016 18:55:37
Hola a todos.
Mi consulta creo que les va a resultar bastnte sencilla...

Como podría rotar una matriz 90 grados? De esta forma

1 2 3 ____ 7 4 1
4 5 6 ____ 8 5 2
7 8 9 ____ 9 6 3

También me gustaría poder hacerlo en sentido antihorario.
Mi idea es hacerlo en la misma matriz, sin utilizar una auxiliar.


Muchas Gracias y no se rían jaja
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 Matriz

Publicado por ramon (2158 intervenciones) el 02/11/2016 23:28:52
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
{Mira esto puede servir}
 
program rotamatriznum;
 uses
   crt;
  const
     n = 3;
     numeros : array[1..n,1..n] of integer = (
     (1,2,3),(4,5,6),(7,8,9));
  type
    matriz = array[1..n,1..n] of integer;
 
 
  var
    maz : matriz;
    k, i : integer;
 
   procedure cargamatriz(var mt : matriz);
   begin
      for i := 1 to n do
        for k := 1 to n do
        begin
        mt[k,i] := numeros[i,k];
        end;
   end;
 
   procedure rotamatriz(var mm : matriz);
   var
     ll, mb : integer;
     j, t : integer;
   begin
     ll := 1;
     repeat
      j := 1;
      t := 1;
      mb := mm[t,j];
      for j := 1 to n do
      mm[t,j - 1] := mm[t,j];
      for t := 2 to n do
      mm[t - 1,j] := mm[t,j];
      for j := n downto 1 do
      mm[t,j] := mm[t,j - 1];
      for t := n downto 2 do
      mm[t,j] := mm[t - 1,j];
      mm[t,j] := mb;
      ll := ll + 1;
   until ll = 3;
   end;
 
 
   begin
       clrscr;
       cargamatriz(maz);
       for i := 1 to n do
       begin
          for k := 1 to n do
          begin
            write('  ',maz[k,i]);
          end;
          writeln;
        end;
        rotamatriz(maz);
        writeln;
      for i := 1 to n do
       begin
        for k := 1 to n do
          begin
            write('  ',maz[k,i]);
          end;
          writeln;
         end;
        readkey;
   end.
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

Rotar Matriz

Publicado por Santiago (2 intervenciones) el 03/11/2016 00:50:59
Muchas gracias por responder. Ese código solo sirve con matrices de 3x3 no? Me olvide de mencionarlo, pero quisiera que sea genérico, para modificaro el tamaño de la matriz a gusto, siendo siempre cuadrada.
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
sin imagen de perfil
Val: 6
Ha aumentado su posición en 2 puestos en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

Rotar Matriz

Publicado por Mateo (6 intervenciones) el 03/11/2016 23:33:17
cambiando n = 3 por n=4 te queda, 1..4,1..4, cambiando el until = n te rota siempre hasta 4x4
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