Pascal/Turbo Pascal - giro matriz

 
Vista:

giro matriz

Publicado por Alba (9 intervenciones) el 03/02/2010 21:53:13
Hola a todos !!! estoy aprendiendo lenguaje pascal por mi cuenta resolviendo varios ejercicios y me e encontrado con uno que, realmente he realizado algunos parecidos pero no logro conseguirlo. Mi duda es: como puedo girar la matriz 90 grados. Yo he realizado ejercicios de volteo, pero este es diferente y no sé como afrontarlo. Por ejemplo sería :

Matriz original

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

y me deberia de quedar:

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

Resulta que yo he realizado volteos verticales y horizontales en otros ejercicios que he encontrado, pero este no sé como plantearlo.

Si pudiesen ayudarme me serian de gran ayuda.
Muchas gracias de antemano.
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

RE:giro matriz

Publicado por Antonio (74 intervenciones) el 04/02/2010 14:56:05
Hola, Alba.
Si, como dices, haz realizado otros volteos pues supongo los habrás hecho con la funcion FOR así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
VAR
            fila, col,x,y  : integer;
tabla : array[1..4,1..4] for integer;
 
begin
           clrscr;
{le asignas valor a cada posicion de la tabla, bien al implementar el programa o creas un bucle para asignar los valores el ejecutar el programa}.
Para presentar la tabla, más o menos, lo harías así:
y := 10;
FOR fila := 1 to 4 do
begin
x := 10;
FOR col := 1 to 4 do
begin
    gotoxy(x,y);
        clreol;
write(tabla[fila,col]);
x := x+3
end;
y := y+2; {los valores numericos son a modo de ejemplo}
end;


Y también, alternativamente con lo anterior,cambiando de posición en write(tabla[fila,col] o [col,fila) y los valores del FOR
fila := 1 to 4 ó fila 4 downto 1, e igualmente con las columas podrás obtener diferentes presentaciones de la matriz.
Solo soy un aficionado a la programacion, pero espero te solucione el problema.
Un Saludo
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

RE:giro matriz

Publicado por Alba (9 intervenciones) el 06/02/2010 17:30:13
Gracias por atenderme antonio.

Pero la verdad es que aún sigo liado.

Lo que yo he puesto es lo siguiente
tengo una matriz de tamaño n x n entonces para no perder el giro , he realizado una copia de dicha matriz. y me falta el giro que no logro comprenderlo.

Lo que tengo que modificar es qué celda de la matriz copia pase
a ser la celda [i,j] de la matriz original. En un ejemplo la fila de
la matriz sin girar pasa a ser la columna opuesta de la matriz girada. Y el índice de
cada columna de la matriz sin girar pasa a ser el índice de la fila de la matriz girada.

Si me puedieses intentar ayudar de nuevo...
Gracias
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

RE:giro matriz

Publicado por Antonio (74 intervenciones) el 07/02/2010 22:48:44
Hola, Alba.
Como solo soy un aficionado a la programacion y no entiendo lo que pides, te inserto el codigo fuente del programa que presenta los valores de la matriz de 8 maneras diferentes:

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
program Volteo_matrices;
uses    crt;
var
       fila,col,i,j,valor : integer;
       tabla              : array[1..4,1..4] of integer;
 
begin
       clrscr;
 
       valor := 1;
       for fila := 1 to 4 do
       begin
        for col  := 1 to 4 do
        begin
         tabla[fila,col] := valor;
         valor := valor+1
         end
       end;
        J := 4;
        for fila := 1 to 4 do
         begin
         i := 2;
         for col  := 1 to 4 do
         begin
          gotoxy(i,j);
          write(tabla[fila,col]);
          i := i+3
         end;
         j := j+2
         end;
 
         j := 4;
 
         for fila := 1 to 4 do
         begin
          i := 16;
           for col := 4 downto 1 do
           begin
            gotoxy(i,j);
             write(tabla[col,fila]);
             i := i+3
           end;
            j := j+2;
         end;
 
            j := 4;
           for fila := 4 downto 1 do
            begin
             i := 36;
             for col := 1 to 4 do
              begin
               gotoxy(i,j);
               write(tabla[fila,col]);
               i := i+3
              end;
              j := j+2
            end;
 
         j := 4;
         for fila := 4 downto 1 do
         begin
         i := 54;
         for col := 1 to 4 do
         begin
         gotoxy(i,j);
         write(tabla[col,fila]);
         i := i+3
         end;
         j := j+2
         end;
 
         j := 16;
         for fila := 4 downto 1 do
         begin
         i := 2;
           for col := 4 downto 1 do
            begin
              gotoxy(i,j);
              write(tabla[fila,col]);
               i := i+3
            end;
            j := j+2
           end;
 
           j := 16;
           for fila := 4 downto 1 do
           begin
           i := 16;
             for col := 4 downto 1 do
              begin
               gotoxy(i,j);
               write(tabla[col,fila]);
               i := i+3
              end;
              j := j+2
           end;
 
           j := 16;
           for fila := 1 to 4 do
            begin
             i := 36;
              for col := 1 to 4 do
               begin
                gotoxy(i,j);
                write(tabla[col,fila]);
                i := i+3
               end;
               j := j+2
             end;
 
             j := 16;
             for fila := 1 to 4 do
             begin
             i := 54;
                 for col := 4 downto 1 do
                  begin
                   gotoxy(i,j);
                   write(tabla[fila,col]);
                   i := i + 3
                  end;
               j := j+2
            end;
 
      readln
 
end.


Si no te soluciona el problema tendrás que insertar en la peticion lo que tengas hecho de codigo fuente.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

RE:giro matriz

Publicado por criss (2 intervenciones) el 15/10/2012 00:08:47
porfa ayudenme , necesito hacer una matriz espiral y llenarla de afuera hacia adentro, sin usar funciones, solo con for,while,if y cosas asi. la parte de afuera de la matriz debe tener unos, mas adentro 2, mas adentro 3, hasta n asi:
1 1 1 1 1 1 1
1 2 2 2 2 2 1
1 2 3 3 3 2 1
1 2 2 2 2 2 1
1 1 1 1 1 1 1
la matriz no tiene k ser simetrica, debe servir para cualquier mamaño de m y n.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

RE:giro matriz

Publicado por ramon (2158 intervenciones) el 17/10/2012 14:04:26
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
{Espero te sirva}
 
program espiral;
 uses
    crt;
  var
    matriz : array[1..70,1..70] of integer;
    ast, cc, d, x, y : integer;
    p1, t1, xx,yy : integer;
    m, n : integer;
  begin
     clrscr;
     write('Entre Tama¤o Matriz [1 A 70] : ');
     readln(m);
     if m > 70 then
     m := 70;
     n := m;
     cc := 1;
     p1 := 1;
     xx := n;
     t1 := 1;
     yy := m;
    repeat
      for x := p1 to xx do
       matriz[x,t1] := cc;
         for y := t1 to yy do
          matriz[xx,y] := cc;
           for x := xx downto p1 do
           matriz[x,yy] := cc;
            for y := yy downto t1 do
              matriz[p1,y] := cc;
    p1 := p1 + 1;
    xx := xx - 1;
    t1 := t1 + 1;
    yy := yy - 1;
    cc := cc + 1;
    until cc > m;
    for x := 1 to n do
    begin
       for y := 1 to m do
       begin
          write(' ',matriz[x,y]);
       end;
       writeln;
     end;
    readln;
  end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

RE:giro matriz

Publicado por criss (2 intervenciones) el 18/10/2012 05:01:59
graciass fue de gran ayuda!!
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