[ Foro de Pascal ]

hexagono a traves de triangulos

04-Jan-2016 19:13
Invitado (juliananaya)
4 Respuestas

buenos dias , encontre este foro navegando y queria pedir colaboracion para un programa que me han dejado en un curso virtual que estoy realizando de programacion, el planteamiento es el siguiente

En un juego de triángulos se comienza con seis triángulos numerados en cada eje o lado. Puede cambiar y rotar los triángulos para formar un hexágono, pero el hexágono es válido solo cuando los ejes comunes entre dos triángulos tienen el mismo número. No se puede voltear ningún triángulo.La puntuación de un hexágono válido es la suma de los números de los seis ejes externos. encontrar la puntuación mas alta que se puede lograr con seis triangulos en particular. no se permite usar recursividad para el desarrollo del ejercicio.

me gustaría saber como puedo saber la ubicación de cada numero dentro de cada lado del triangulo y como rotar los triangulos, que estructura debo usar vectores matrices ? y una vez rotados como se puede lograr el hexagono, cualquier orientacion es importante y se los agradezco muchisimo .


09-Jan-2016 17:03
Nacho Cabanes (+84)

Ayudaría ver una imagen del ejercicio, pero creo que entiendo a lo que se refieren.

También sería interesante ver cómo son los datos de entrada, que imagino que serán ternas de números representando los tres datos numéricos que hay en los lados del triángulo. En ese caso, sí sería razonable representar cada triángulo mediante un vector. Al tratarse de 6 triángulos, podrías usar seis vectores, o bien un array de 6x3 componentes.

Para ver qué triángulo podría estar la lado de qué otro, deberán coincidir dos lados en ambos triángulos. Por ejemplo, los triángulos [1,2,5] y [3,4,6] no podrían estar uno al lado del otro, mientras que [1,2,5] y [3,2,6] podrían estar uno al lado del otro, tocándose en el lado de longitud 2. Para [1,2,5] y [2,1,6] se podrían apoyar en dos lados distintos.

Así, te interesaría usar una función que compare dos "triángulos" para ver si coinciden en algún lado y otra que "rote" un triángulo (que pase de [2,1,6] a [1,6,2], de modo que puedas hacer que coincidan los lados iguales de dos triángulos que deban estar juntos.


17-Jan-2016 17:26
Nacho Cabanes (+84)

La rotación de triángulos, si están representados como un vector de tres elementos, es sencilla: pasar de [2,1,6] a [1,6,2] es hacer que el elemento de la posición 2 pase a la 1, el de la 3 a la 2 y el de la 1 a la 3. Si sabes intercambiar dos variables "a" y "b" (usando una tercera variable auxiliar), deberías estar muy cerca de conseguirlo.


23-Jan-2016 05:28
Invitado (juliananaya)

buenos dias profesor nacho,
queria preguntarte como seria en codigo la parte que mencionas en tu amable respuesta:

que [1,2,5] y [3,2,6] podrían estar uno al lado del otro, tocándose en el lado de longitud 2 ?

como se yo que graficamente se estan tocando esos dos lados, como se visiona esto en arrays?

gracias


25-Jan-2016 23:34
Nacho Cabanes (+84)

Sí. Ten en cuenta que hablamos sólo de una suposición mía, no puedo garantizarte que eso sea lo que esperen que tú hagas, pero sí,  los triángulos [1,2,5] y [3,2,6] tendrían un lado común, el número 2 (tu pregunta inicial habla de que están numerados, no de que ese número sea su longitud).

Sabes que se tocan porque uno de los números de un array está también en el otro array (lo puedes comprobar con un doble "for": para cada elemento del array 1, recorrer todos los elementos del array 2 para ver si coinciden dato1[i] y dato2[j]).






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)