• Jueves 25 de Abril de 2024, 22:03

Autor Tema:  Matriz  (Leído 1360 veces)

pegui

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Matriz
« en: Miércoles 25 de Junio de 2008, 19:51 »
0
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

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Matriz
« Respuesta #1 en: Domingo 29 de Junio de 2008, 21:58 »
0
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;