Programación General > Pascal

 Matriz

(1/1)

pegui:
Dada una matriz correr una posición todos los números.

    1  2  3  4            16 1  2  3
    5  6  7  8             4  5  6  7
    9  10 11 12        8  9  10 11
   13 14 15 16         12 13 14 15
la matriz tendria que quedar asi.
He hecho esto:

TYPE
   tMatriz:Array [1..4,1..4]OF Integer;
VAR
   Matriz:tMatriz;

PROCEDURE Mover (Matriz:tMatriz);
VAR
   I,J,Aux:Integer;
BEGIN
   FOR I:=4 DOWNTO 1 TO
     FOR J:=4 DOWNTO 1 TO
       IF (I=4) AND (J=4) THEN
      Aux:=Matriz[I,J];
       IF (J=4) THEN
      Matriz[I,J]:=Matriz[I+1,1];
       ELSE
      Matriz[I,J]:=Matriz[I,J+1];
   Matriz[1,1]:=Aux;
END;

pero no me funciona.Que hago mal??Como lo soluciono??

pablo04:
Hola, primero q nada, en el for tiene un error, vos pusiste a lo ultimo un "to" y tiene q ir un "do" y ahi t tiene q tirar un error de compilacion, segundo error, le pasas al procedimiento como valor a la matriz, y se la tenes q pasar por referencia para q le haga el cambio, xq por lo q veo ese procedimiento no llama a ningun otro ni tmp imprime en pantalla, por lo cual si le pasas la matriz por valor, hara los cambios, si el procedimiento andubiera, pero luego de salir del mismo no haria cambios. y tercero, vos pusiste Matriz[I,J]:=Matriz[I+1,1], y eso t tiene q dar un error d rango, porq la primer pasada i vale 4 y si le sumas uno, vale 5, pero la matriz es d 4 x 4, por lo cual haces q se vaya de rango. Aca te dejo como seria el procedimiento para mover el 16 a la primer posicion y mover todos los demas una casilla. Espero q te sirva.

Procedure Mover (Var Matriz: tMatriz);
Var i,j,AUX: Integer;

Begin
Aux:= Matriz[4,4];
For I:= 4 Downto 1 do
For J:= 4 Downto 2 do
Matriz [i,j]:= Matriz [I,J-1];
Matriz [1,1]:= Aux;
end;

Navegación

[0] Índice de Mensajes

Ir a la versión completa