SoloCodigo
Programación General => Pascal => Mensaje iniciado por: pegui en Miércoles 25 de Junio de 2008, 19:51
-
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??
-
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;