Cuadrado latino en pascal
Quien le pueda intersar:
Necesito generar una matriz de orden n por n (igual numero de filas y columnas) con un patrón por filas llamado cuadradro latino, para el que no lo conoce, es así:
1 2 3 4 n-3 n-2 n-1 n
4 1 2 3 n n-3 n-2 n-1
3 4 1 2 n-1 n n-3 n-2
2 3 4 1 n-2 n-1 n n-3
A la izquierda en ejemplo para una matriz 4 x 4, a la derecha el comportamiento por filas que tiene la matriz. Me interesa crear el procedimiento general, claro con limite, supóngase máximo para una matriz 15 x 15, pero necesito que el programa imprima la matriz a partir del orden ingresado por el usuario.
Me cuesta trabajar con estos proyectos bidimensionales de matrices en general, mi vago aporte es:
1ero. Pedir el orden al usuario.
2do. A partir de ese orden crear un doble ciclo dejando el ciclo filas afuera del que recorre las columnas para hacer el llenado horizontalmente primero (por filas).
3ro. Pensaba en la posibilidad de crear una variable que fuera aumentando su valor, como especie de contador dentro del ciclo interno, el de las columnas, que de alguna manera lo utilizara para restarcelo al n (orden definido por el usuario), e ir llenando las casillas con esa resta, pero noc nada más, algo así como:
for j:=1 to n do
begin {for filas}
for i:=1 to n do
u:=? (*posible constante que se inicializara al cambiar de fila*)
Matriz[j,i] :=n-u
Es todo lo que tengo en mente.
Necesito generar una matriz de orden n por n (igual numero de filas y columnas) con un patrón por filas llamado cuadradro latino, para el que no lo conoce, es así:
1 2 3 4 n-3 n-2 n-1 n
4 1 2 3 n n-3 n-2 n-1
3 4 1 2 n-1 n n-3 n-2
2 3 4 1 n-2 n-1 n n-3
A la izquierda en ejemplo para una matriz 4 x 4, a la derecha el comportamiento por filas que tiene la matriz. Me interesa crear el procedimiento general, claro con limite, supóngase máximo para una matriz 15 x 15, pero necesito que el programa imprima la matriz a partir del orden ingresado por el usuario.
Me cuesta trabajar con estos proyectos bidimensionales de matrices en general, mi vago aporte es:
1ero. Pedir el orden al usuario.
2do. A partir de ese orden crear un doble ciclo dejando el ciclo filas afuera del que recorre las columnas para hacer el llenado horizontalmente primero (por filas).
3ro. Pensaba en la posibilidad de crear una variable que fuera aumentando su valor, como especie de contador dentro del ciclo interno, el de las columnas, que de alguna manera lo utilizara para restarcelo al n (orden definido por el usuario), e ir llenando las casillas con esa resta, pero noc nada más, algo así como:
for j:=1 to n do
begin {for filas}
for i:=1 to n do
u:=? (*posible constante que se inicializara al cambiar de fila*)
Matriz[j,i] :=n-u
Es todo lo que tengo en mente.
1 Respuesta
Respuesta de elrata
1