Título: Creacion de matriz Publicado por: nonokario en 7 Marzo 2018, 23:56 pm Hola! Soy nueva en la programación y me llego un problema. No se cuál seria la mejor manera de solucionarlo. Hice un código muy largo y no me parece que este bien aunque funcione.
El problema es el siguiente: Tengo que crear una matriz de numeros ( 1 a 6) con un ancho X y un largo Y. El array Z0 debe tener un 5 y el Z-1 un 6. Entonces quedaría algo asi: XXX5XX XXXXXX XXXXXX 6XXXXX La siguiente condición es que en Zx debe existir un 2 y en Zx+1 un 3. X2X5XX X3XX2X XXXX32 6XXXX3 Y la ultima condición es que : Entre 2/3/6/5 solo puede haber 1. X215XX X3112X XXXX32 611113 Todo lo demas que no fue seteado pueden ser 1 o 4! El código no es en C pero me serviría igual ver un pseudocodigo! Si hace falta muestro lo que hice pero es muy feo :-X Si es muy largo el pseudocodigo con que me den algún tip se los agradezco! Título: Re: Creacion de matriz Publicado por: MAFUS en 8 Marzo 2018, 13:34 pm Oky, muestra lo que tienes hecho.
Título: Re: Creacion de matriz Publicado por: nonokario en 8 Marzo 2018, 15:14 pm Código
Perdón, es muy feo el código pero funciona. Por eso queria saber si hay una manera mas elegante o mejor de hacerlo. Con pseudocodigo me arreglo! Título: Re: Creacion de matriz Publicado por: MAFUS en 8 Marzo 2018, 20:39 pm Bueno, creo que te has complicado un poco.
Empieza instalando un valor que indique que la casilla está vacía, yo he usado el 0 (aprovechando que 0 significa también false y cualquier otro número true). El primer paso de meter el 5 y el 6 en la primera y última fila es muy sencillo ya que la matriz está vacía. Caigan donde caigan están bien. Para incluir el 2 y el 3 tampoco tiene mucha complicación. Se corre la matriz por filas desde el inicio hasta penúltima fila. Por fila: · Buscar una misma columna vacía para y e y+1 · En y incluir el 2. · En y+1 incluir el 3. Para incluir los entre números aprovecha las marcas de casilla vacía. Prepara una bandera para indicar si debes escribir los unos o no. Por cada fila: · desactiva la badnera · Por cada columna: · Si la bandera está desactivada y la casilla no está vacía: · activa la bandera (Después de activar esa bandera no debes hacer nada y esperar a la siguiente iteración) · Y si no: · Si la casilla está vacía: · escribe un 1 en ella · Y si no: · termina el bucle columna Para terminar de rellenar la matriz recórrela casilla por casilla. Si la casilla está vacía introduce 1 o 4 aleatoriamente. Esto en C11 quedaría así: Código
Gracias a un dato apuntado por NEBIRE en la siguiente respuesta me he dado cuenta de algo que se me había pasado por alto: el 2 y el 3 deben estar en la misma columna. Solucionado en la reedición. Título: Re: Creacion de matriz Publicado por: Serapis en 8 Marzo 2018, 21:23 pm Tengo que crear una matriz de numeros ( 1 a 6) con un ancho X y un largo Y en tu ejemplo 6x4, x=6 y=4, ok...El array Z0 debe tener un 5 y el Z-1 un 6. Entonces quedaría algo asi: XXX5XX XXXXXX XXXXXX 6XXXXX Elige al azar una columna en sendas filas y la rellenas con el susodcho valor. Código: n = Random(entre 0 y x-1) La siguiente condición es que en Zx debe existir un 2 y en Zx+1 un 3. Esta parte, no acabo de entenderlo.X2X5XX X3XX2X XXXX32 6XXXX3 No sé a que llamas Zx, mirando el array... ¿una fila, una columna, una columna de una fila, de varias? Vale, tras mirarlo más veces, creo entender que lo que tratas de hacer es crear un 2 en cada línea excepto la última y asignar un 3 en la misma columna pero en la siguiente fila. Si es así, este sería el pseudocódigo: Código: bucle para k desde 0 hasta y-2 Y la ultima condición es que : Entre 2/3/6/5 solo puede haber 1. X215XX X3112X XXXX32 611113 Entiendo que entre 2 y 2,3,5,6; entre 3 y 2,3,5,6; entre 5 y 2,3 y entre 6 y 2,3. Pero no entre 5 y 6, porque no están en la misma línea (ni pueden estarlo), Así como tampoco 2 cincos ni 2 seis. Código: bucle para k desde 0 a y-1 // por cada linea - recorriendo el bucle segundo desde el final hacia atrás... - mientras no se encuentre el valor final, escribir YA el 1, haciendo innecesario el bucle final. - en vez de salir de un bucle, anidar dentro de él el siguiente bucle (aunque en líea ganan en claridad). Todo lo demas que no fue seteado pueden ser 1 ó 4 Se supone que lo que no tiene 'valor' es 0... es decir que inicialmente el contenido del array era todos ceros. Código: bucle para k desde 0 a y-1 // por cada linea Título: Re: Creacion de matriz Publicado por: nonokario en 8 Marzo 2018, 23:42 pm Muchas gracias! Aprendí mucho :D
|