Foros del Web » Programación para mayores de 30 ;) » Java »

Cuadrados Latinos

Estas en el tema de Cuadrados Latinos en el foro de Java en Foros del Web. Que tal , ando buscando algun codigo donde venga para hacer cuadrados latinos de N (numero cualkiera) o alguien que me pueda asesorar para realizarlo, ...
  #1 (permalink)  
Antiguo 28/03/2007, 22:10
 
Fecha de Ingreso: marzo-2007
Ubicación: Nayarit,Mexico
Mensajes: 87
Antigüedad: 17 años, 2 meses
Puntos: 1
Cuadrados Latinos

Que tal , ando buscando algun codigo donde venga para hacer cuadrados latinos de N (numero cualkiera) o alguien que me pueda asesorar para realizarlo, que tenga alguna idea,

el cuadro latino es el siguiente
Ejemplo Si N = 3 ;

1 2 3
3 1 2
2 3 1

Ejemplo N= 4

1 2 3 4
4 3 2 1
3 4 2 1
2 3 4 1

Osea que cada file se va recorriendo la serie hacia la derecha...

Gracias por su ayuda o tips :D
  #2 (permalink)  
Antiguo 28/03/2007, 22:14
Avatar de kalvinman  
Fecha de Ingreso: octubre-2006
Ubicación: Bogota Colombia
Mensajes: 849
Antigüedad: 17 años, 7 meses
Puntos: 22
Pregunta Re: Cuadrados Latinos

No entiendo, esto es algo asi como el sudoku o que, podriassermas especifico. xD
  #3 (permalink)  
Antiguo 29/03/2007, 00:58
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 7 meses
Puntos: 51
Re: Cuadrados Latinos

Ummm.... si lo he entendido bien... entonces el ejemplo que has puesto esta mal. Puede ser

1 2 3 4
4 1 2 3
3 4 1 2
2 3 4 1

¿?

Por que si no, no me cuadra.
  #4 (permalink)  
Antiguo 29/03/2007, 10:04
Avatar de kalvinman  
Fecha de Ingreso: octubre-2006
Ubicación: Bogota Colombia
Mensajes: 849
Antigüedad: 17 años, 7 meses
Puntos: 22
Pregunta Re: Cuadrados Latinos

pues lo que entiendo de la explicacion de Tycroz seria algo asi como lo que publico GreenEyed, pero entonces no entiendo la funcionalidad, que son estos cuadros y para que sirven???

Última edición por kalvinman; 29/03/2007 a las 15:41
  #5 (permalink)  
Antiguo 29/03/2007, 14:14
 
Fecha de Ingreso: marzo-2007
Ubicación: Nayarit,Mexico
Mensajes: 87
Antigüedad: 17 años, 2 meses
Puntos: 1
Re: Cuadrados Latinos

si, perdon tieene razon greeneyed puse mal el ejemplo

se muestra la serie i las siguientes filas se va recorriendo kada vez un numero hacia la derecha...
  #6 (permalink)  
Antiguo 29/03/2007, 14:16
Avatar de kalvinman  
Fecha de Ingreso: octubre-2006
Ubicación: Bogota Colombia
Mensajes: 849
Antigüedad: 17 años, 7 meses
Puntos: 22
Re: Cuadrados Latinos

Y cual es la funcionalidad, de esto, para que se hace???? o para que lo necesitas.?
  #7 (permalink)  
Antiguo 29/03/2007, 14:26
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 7 meses
Puntos: 51
Re: Cuadrados Latinos

Y aparte de eso, ¿cual es el problema exactamente? Es decir, imprimes los numeros, quitas el ultimo lo añades al principio, imprimes... repetir tantas veces como numeros... ¿donde esta el problema en Java?
  #8 (permalink)  
Antiguo 29/03/2007, 14:30
Avatar de kalvinman  
Fecha de Ingreso: octubre-2006
Ubicación: Bogota Colombia
Mensajes: 849
Antigüedad: 17 años, 7 meses
Puntos: 22
Re: Cuadrados Latinos

Creo que lo que quieres hacer es un numero aleatoriopero eso se saca de otra forma y mucho massimple. xD
  #9 (permalink)  
Antiguo 29/03/2007, 14:42
 
Fecha de Ingreso: marzo-2007
Ubicación: Nayarit,Mexico
Mensajes: 87
Antigüedad: 17 años, 2 meses
Puntos: 1
Re: Cuadrados Latinos

el problema es como hacerlo, :S intento varias formas pero no :S, y no funciona para nada pero lo quiero para uso personal =D...
  #10 (permalink)  
Antiguo 29/03/2007, 20:21
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 6 meses
Puntos: 7
Re: Cuadrados Latinos

que tal,

Cita:
Iniciado por Tycroz Ver Mensaje
el problema es como hacerlo, :S intento varias formas pero no :S, y no funciona para nada pero lo quiero para uso personal =D...
greeneyed ya te responodio como hacerlo:

Cita:
Iniciado por GreenEyed Ver Mensaje
Y aparte de eso, ¿cual es el problema exactamente? Es decir, imprimes los numeros, quitas el ultimo lo añades al principio, imprimes... repetir tantas veces como numeros... ¿donde esta el problema en Java?
  #11 (permalink)  
Antiguo 30/03/2007, 17:46
 
Fecha de Ingreso: marzo-2007
Ubicación: Nayarit,Mexico
Mensajes: 87
Antigüedad: 17 años, 2 meses
Puntos: 1
Re: Cuadrados Latinos

me he roto la cabeza, y aun sigo sin poderlo hacer, :S ustedes que me recomiendan que maneje arreglos o asi simplemente :S =S
  #12 (permalink)  
Antiguo 30/03/2007, 18:34
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 6 meses
Puntos: 7
Re: Cuadrados Latinos

creo que no has analizado bien lo que escribio greeneyed....

mi sugerencia es que agarres una hoja de papel, y hagas el algoritmo que el puso para que veas como funciona...

Y para este caso, creo que lo mas sencillo seria usar una matriz bidimensional, aunque tambien lo puedes hacer con arreglos unidimensionales, listas, vectores,etc....
  #13 (permalink)  
Antiguo 30/03/2007, 23:22
 
Fecha de Ingreso: marzo-2007
Ubicación: Nayarit,Mexico
Mensajes: 87
Antigüedad: 17 años, 2 meses
Puntos: 1
Re: Cuadrados Latinos

si, tienes razon , creo que no estaba razonando bien el problema, hasta que lo haces es cuando te salen las ideas, ya lo estoy haciendo, me compila y todo pero a la hora de ejecutar me sale el siguiente problema:
Código:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
	at Cuadrado.guardarValores(Cuadrado.java:26)
	at CuadradoLatino.main(CuadradoLatino.java:19)
La linea 26 de la clase Cuadrado es:
Código:
array[i]=1+i;
La linea 19 de la clase publica es :
Código:
n.guardarValores(y);
A que se debe eso? que estoy haciendo mal

GRACIAS POR SU AYUDA
  #14 (permalink)  
Antiguo 31/03/2007, 16:33
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 6 meses
Puntos: 7
Re: Cuadrados Latinos

estas tratando de accesar a una posicion en tu arreglo que no existe.

Por ejemplo, que tu arreglo sea de tamaño 20 (de 0 a 19 ), y estes tratando de llegar a la posicion MAYOR a 19 (de 20 en adelante).

Checa bien tu ciclo, que ahi debe estar el problema.....

saludos,
  #15 (permalink)  
Antiguo 31/03/2007, 20:10
 
Fecha de Ingreso: marzo-2007
Ubicación: Nayarit,Mexico
Mensajes: 87
Antigüedad: 17 años, 2 meses
Puntos: 1
Re: Cuadrados Latinos

amm eske supuestamente i = 0 ... mira pongo el code de mi aplicacion...

Cuadrado.java
Código:
class Cuadrado{	

	private int valor,i;
	private int [] array ;
	
	//se agarra el valor 
	public Cuadrado(int v){
	
		valor=v;
		
	}
	
	public int regresarValor(){
	
		return valor;
		
	}
	
	//se guardan los valores en el arreglo
	public void guardarValores(int w){
	
		int [] array = new int [w];
		
		for (i=0;i<=valor;i++){
		
			array[i]=i;
			
		}
		
	}
	//recorrer los numeros		
	public void recorrerValores(){
	
		//aqui imprimo lso valores actualez	
		for(i=0;i<array.length;i++){
		
			System.out.print(array[i+1] + " " );
			System.out.println(); 
			
		}
			
		//aqui se recorre 
		int [] array2 = new int [valor] ;
		for (i=0 ; i < array.length ; i++){
			if (i==array.length-1){
			
			array2[1]=array[i];
			
			}else{
			
			array2[i] = array[i+1]; 
			
			}
		}
		
		for (i=0; i< array2.length;i++)
		
			array2[i] = array[i];
			
		
	}
	
}
CuadradoLatino.java

Código:
import java.util.*;
public class CuadradoLatino {

	public static void main(String[]args){
		
		Scanner teclado = new Scanner(System.in);
		
		System.out.println("Ingrese numero");
		
		Cuadrado n = new Cuadrado(teclado.nextInt());
		
		int x ;
		int y = n.regresarValor();
	
		for (x=0; x<y ; x++){
		
			if (x==0){			
			
				n.guardarValores(y);
			
			}else{
			
				n.recorrerValores();
			
			}
		
		}


	}
	
}
  #16 (permalink)  
Antiguo 01/04/2007, 03:22
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 6 meses
Puntos: 7
Re: Cuadrados Latinos

el error es el que te dije.
Código:
public void guardarValores(int w){
	
		int [] array = new int [w];
		
		for (i=0;i<=valor;i++){ <--- AQUI
		
			array[i]=i;
			
		}
		
	}
Supongamos que "valor" vale 20 (valga la redundancia jejeje). Tu arreglo "array" es de tamaño valor.
eso quiere decir que va desde la poscion 0 hasta 19 (si cuentas, de 0 a 19 hay 20 numeros).
al poner " i <= valor " estas llegando hasta la posicion "valor" en "array", lo cual quiere decir que estas tratando de accesar a la posicion 20, la cual NO existe, ya que llega hasta 19.
Lo que tienes que hacer es poner:
"i < valor" , para que asi solo llegue hasta 19.

Por otro lado, un consejo:
trata de que tus variables tengan nombres descriptivos. Que indiquen cual es su objetivo, porque estan, que contienen.

Es decir, en lugar de tener
int [] array = new int [w];
que tengas algo asi:
int[] cuadLatArr = new int[cuadLatTam];


por lo general te llevaran a nombres mas largos, pero cuando quieras leer el codigo sera mucho mas facil. Y cuando busques ayuda, sera mas sencillo que te puedan ayudar.
Sobre todo cuando tengas que hacer un programa mas largo. Tambien trata de mantener el mismo idioma siempre. Es decir, si vas a escribir codigo en ingles, mantenlo asi siempre, pero no mezcles con otros idiomas (aunque los comentarios si podrias ponerlos en español)

saludos,
  #17 (permalink)  
Antiguo 01/04/2007, 10:44
 
Fecha de Ingreso: marzo-2007
Ubicación: Nayarit,Mexico
Mensajes: 87
Antigüedad: 17 años, 2 meses
Puntos: 1
Re: Cuadrados Latinos

ok, muchas gracias por tus consejos, voy a probarlo, esque hay que tener en cuenta que apenas voy empezando en esto xD!


EDIT: Si si sirvio pero ahora tengo otro error en la linea 35 :S juaaz...
  #18 (permalink)  
Antiguo 02/04/2007, 03:55
 
Fecha de Ingreso: octubre-2005
Mensajes: 68
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: Cuadrados Latinos

Hola: Alguien seria tan amable de decirme que es lo que esta mal en el codigo ?
Código:
 public void CargarMatriz(int val){  
      int f,c,n;
      n=0;
      for (f=0;f<valor;f++){           
          for (c=0;c<valor;c++){
            if(c==0){
            matriz[f][c]=n++;
        System.out.println("Fila "+f+" Columna "+c+" Valor del casillero "+n);
    }
                else{
                    if(n==val)
                        n=0;                       
                        matriz[f][c]=n++;
                        System.out.println("Fila "+f+" Columna "+c+" Valor del casillero "+n);
                        if(c==(valor-1)){
                        n=matriz[f][c];
                    System.out.println("Ha pasado por aca? el valor que tengo que retener es el "+n+" de la fila "+f+" columna "+c);
                }
                    }
    
          }
        }
}
Yo he puesto leyendas en el codigo para tratar de ver porque me sale asi, pero no pude encontrar el porque
Código:
Ingrese numero
4
Fila 0 Columna 0 Valor del casillero 1
Fila 0 Columna 1 Valor del casillero 2
Fila 0 Columna 2 Valor del casillero 3
Fila 0 Columna 3 Valor del casillero 4
Ha pasado por aca? el valor que tengo que retener es el 3 de la fila 0 columna 3
Fila 1 Columna 0 Valor del casillero 4
Fila 1 Columna 1 Valor del casillero 1
Fila 1 Columna 2 Valor del casillero 2
Fila 1 Columna 3 Valor del casillero 3
Ha pasado por aca? el valor que tengo que retener es el 2 de la fila 1 columna 3
Fila 2 Columna 0 Valor del casillero 3
Fila 2 Columna 1 Valor del casillero 4
Fila 2 Columna 2 Valor del casillero 1
Fila 2 Columna 3 Valor del casillero 2
Ha pasado por aca? el valor que tengo que retener es el 1 de la fila 2 columna 3
Fila 3 Columna 0 Valor del casillero 2
Fila 3 Columna 1 Valor del casillero 3
Fila 3 Columna 2 Valor del casillero 4
Fila 3 Columna 3 Valor del casillero 1
Ha pasado por aca? el valor que tengo que retener es el 0 de la fila 3 columna 3

	 Cuadrado Latino
0 1 2 3 
3 0 1 2 
2 3 0 1 
1 2 3 0

Última edición por Nanyna85; 02/04/2007 a las 14:17
  #19 (permalink)  
Antiguo 02/04/2007, 05:19
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 7 meses
Puntos: 51
Re: Cuadrados Latinos

Hola,

El programa está haciendo lo que tu le dices y efectivamente ha de mostrar lo que muestra . Una pista: Cuando dices "fila x columna y Valor del casillero es..." en realidad no muestras el valor del casillero. .
  #20 (permalink)  
Antiguo 02/04/2007, 06:43
 
Fecha de Ingreso: octubre-2005
Mensajes: 68
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: Cuadrados Latinos

Gracias GreenEyed por el detalle

Última edición por Nanyna85; 02/04/2007 a las 14:21
  #21 (permalink)  
Antiguo 02/04/2007, 07:04
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 7 meses
Puntos: 51
Re: Cuadrados Latinos

Más sencillo: La posición (f,c) es igual a (((c*(valor-1) + f) % valor)+1)


Pero vamos la idea no es darselo hecho por que la sintaxis de un lenguaje de programación se aprende fácil. Aprender a programar no es saber la sintaxis de uno o muchos lenguajes, es aprender a expresarse de forma que un ordenador te entienda. Y eso no se aprende copiando programas ya hechos.

S!

Edit: Aclarar que no es que me parezca mal que pongas la solución, pero así el aprende menos.
  #22 (permalink)  
Antiguo 02/04/2007, 07:43
 
Fecha de Ingreso: octubre-2005
Mensajes: 68
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: Cuadrados Latinos

Cita:
Iniciado por GreenEyed
la sintaxis de un lenguaje de programación se aprende fácil. Aprender a programar, es aprender a expresarse de forma que un ordenador te entienda.
Si, de acuerdo contigo
Aparte, el codigo se puede mejorar y he aprendido un poco mas de lo minimo que se

Última edición por Nanyna85; 02/04/2007 a las 09:23
  #23 (permalink)  
Antiguo 02/04/2007, 16:54
 
Fecha de Ingreso: marzo-2007
Ubicación: Nayarit,Mexico
Mensajes: 87
Antigüedad: 17 años, 2 meses
Puntos: 1
Re: Cuadrados Latinos

gracias a to0do0sss
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:04.