Todoexpertos.com
http://www.todoexpertos.com
La respuesta está en Internet
Información de la pregunta
Título: CUADRADO LATINO EN PASCAL
Experto: elrata
Valoración: 5
Fecha: 30/06/2008


CUADRADO LATINO EN PASCAL
saludos a todos... quien le pueda intersar: Necesito generar una matriz de orden n x n (igual numero de filas y columnas) con un patron por filas llamado cuadradro latino, para el que no lo conoce, es asi: 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, supongase maximo para una matriz 15 x 15, pero necesito q 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. Apartir 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 posibilida 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 mas, algo asi 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, agradezco de antemano cualquier ayuda...

CUADRADO LATINO EN PASCAL
Bueno, te hice asi... rapidamente.... sin funciones ni procedimientos... pero eso se puede agregar facilmente........ pero espero te sirva la resolucion.... Var   mat:Array [1..15, 1..15] of byte;   n:Integer;   des:Integer;   i,j:Integer; Begin   Write('Ingrese el valor de N. :');   ReadLn(n);   { Generacion de Matriz }   des:=n-1;   for i:=1 to n do    Begin     for j:=1 to n do       Begin         mat[i,j]:=n - des;         if (j<>n)           then des:= des - 1;         if (des < 0) then des:=n-1;       End;    End;   { Imprime Matriz }   for i:=1 to n do    Begin     for j:=1 to n do       write(mat[i,j]:4, ' ');     writeLn;    End; End. Saludos Gabriel

CUADRADO LATINO EN PASCAL
Gracias por tu rapida respuesta... veras aun no lo he probado, esta no esmi maquina y tengo que sperar ir a mi casa a donde tengo el programa instaladao para probarlo. Viendolo trataba de entender el funcionamiento de la variable "des" : Begin   mat[i,j]:=n - des; (* 1era asignacion*)   if (j<>n)      then des:= des - 1;      if (des < 0) then des:=n-1; End; Luego de que raliza la 1era asignación, porqué luego evaluo si j es difernte de n y des < 0¿?... Me cuesta aveces entender nomesclaturas que no sean mias, por eso en la medida de las posibilidades podrias, si podrias explicarme literalmente el funcionamiento del proceso... Muchas gracias igual por el previo aporte...

CUADRADO LATINO EN PASCAL
jajaja, no, todo bien, yo tampoco fui muy claro con las nomenclaturas..... el des, es una variable de desplazamiento Lo que intennte hacer es.... por ejemplo... la 1er fila ir de n - (n-1) hasta n Pero... en la segunda linea... lo que hago es arracancar con el desplazamiento de la linea anterior..... y a partir de alli, sigo restando, verificando que no se ponga negativo. n-3   n-2   n-1   n Luego, en la primer columna pongo el desplazamiento obtenido en la ultima columna de la fila anterior n      n-3   n-2   n-1 lo mismo aqui n-1   n      n-3   n-2 y aqui n-2   n-1   n      n-3 Me explico?

CUADRADO LATINO EN PASCAL
perfecto, voy a ponerlo en practica, muchisimas gracias!!!

Pregunta finalizada. Valoración: 5
Excelente. Una fantástica solución.


Volver al mensaje
http://www.todoexpertos.com/categorias/tecnologia-e-internet/programacion/pascal/respuestas/1871252/cuadrado-latino-en-pascal