Sie sind auf Seite 1von 37

SOFTWARE AVANZADO PARA INGENIERIA

FASE 3

PRESENTADO POR

YEISON FERNANDO RIVERA CASTEBLANCO

CODIGO

1052401254

GRUPO NUMERO:

203037-50

PRESNETADO A

JUAN MONROY (DIRECTOR)

UNIVERSIDAD NACIONAL AVIERTA Y A DISTANCIA.

2019
INTRODUCCION

Con el desarrollo del siguiente trabajo doy a mostrar la solución al problema


propuesto por la materia software avanzado para ingeniería, en este demuestro
los pasos a seguir con cada uno explicado y sustentado con imágenes, a su vez
demuestro el código a nivel de usuario y programador como le exige la guía de
actividades.
Desarrollo
Panel Frontal (A Nivel de Usuario)
1. Para el ingreso del orden de la matriz utilizamos un control numérico que se
obtiene en /Controls Palette/Modern/Numeric/Numeric Control.
Editamos el Label y le asignamos el nombre Orden de la Matriz

2. El valor del orden de la matriz debe estar en el rango de 3 a 5 ambos incluidos


Para ello damos botón derecho al control y seleccionamos propiedades
Al desplegarse el menú properties, escogemos Data Entry

En ese submenú, se definen los puntos límites de entrada en el orden de la matriz,


de ese modo el control solo aceptara los valores 3,4 y 5
3. Para establecer el primer número de la secuencia, utilizamos un control
ubicado en /Controls Palette/Modern/Numeric/Numeric Control.
4. El modo en el que el usuario podrá mover la celda cero (celda que se tomará
como el valor vacío, será la celda que se moverá), será a través de un control
pero en forma de slide. Ubicado en /Controls
Palette/Modern/Numeric/Numeric Control/Vertical Progress Bar

Ese control se usará tanto para el movimiento horizontal como el vertical.


El control horizontal se encuentra en /Controls Palette/Modern/Numeric/Numeric
Control/ horizontal Progress Bar.

Para darle la forma a los controles modificamos las propiedades, damos doble
clic sobre el título del control y allí le ingresamos el nombre del control
Para que el control este siempre en el centro, definimos con el botón derecho
que el valor del centro sea el que tome por defecto

El botón finalizar se ubica en /Controls Palette/Modern/Boolean/Stop Button


Al dar doble clic sobre el nombre del botón cambiamos su nombre a finalizar

El número de intentos se mostrarán como un indicador numérico. Este indicador


se ubica en /Controls Palette/Modern/Numeric/Numeric Indicator.
Al dar doble clic sobre la etiqueta del nombre lo cambiamos a Intentos
5. Por ultimo ubicamos un menú de selección para que el usuario decida si el
ordenamiento será vertical u horizontal

Con doble clic sobre cada etiqueta podemos cambiar el nombre para que se
adapte a lo que queremos.
6. La matriz que representa al rompecabezas la definiremos como un arreglo
de números. El arreglo está ubicado en
control/modern/array,matrix&cluster/array
El arreglo será el siguiente
ego buscamos un control numérico y lo incluimos dentro de la sombra gris del
arreglo, de modo que el arreglo será numérico

El indicador de índices del arreglo lo desplegamos hacia abajo para darle dos
dimensiones

Desde la esquina inferior derecha desplegamos la matriz para ver todos los
elementos
Eliminando los indicadores de las filas y columnas de la matriz y los botones de
incremento interno la matriz quedara limpia
Damos botón derecho sobre la matriz y seleccionamos que ítems queremos ver,
luego deseleccionamos Index Display

Luego damos de nuevo botón derecho dentro de algún elemento de la matriz y


deseleccionamos Increment/decrement

La matriz se verá así


7. Por ultimo las indicaciones y el puntaje, para ello escribimos las instrucciones
con la paleta de texto

El mensaje es el siguiente

El puntaje se obtendrá restando del valor de 100 el número de intentos


Incluimos un numeric indicator

8. La pantalla frontal se reordeno y el aspecto final es este


Panel programador
1. En el panel del programador se genera la matriz con la variable orden de la
matriz y valor inicial.

Los controles numéricos siempre aparecen en representación real (doublé),


para ello damos botón derecho sobre el control, seleccionamos
Representation/I8 de ese modo será un numero entero de 8bits

Ese valor entero lo elevamos al cuadrado para obtener la cantidad de elementos


Seleccionamos un lazo loop para generar un vector de elementos consecutivos
que servirá de base para construir la matriz

Luego cableamos la salida del valor cuadrado para que sea el límite del ciclo for
Dentro del ciclo for construimos el vector, iniciando con el valor inicial sumado al
índice de ciclo,

Decrementamos ese valor para generar el espacio al primer valor del arreglo
que será siempre el número cero, ese valor será el que represente la casilla
vacía para el rompecabezas
Formamos el vector con Build array

La salida del build array la colocamos fuera del ciclo for


Sobre el índice la N del ciclo for damos clic para buscar un indicador, esta
variable nos servirá mas adelante para comparar al vector solución

El ciclo de generación de elementos será el siguiente

Cantidad de elementos es una variable que solo se usa en el panel de


programador, y no en el de usuario, para que no aparezca en el panel de usuario,
damos clic derecho y seleccionamos hide indicator
Ahora con la función Reshape convertimos el vector en una matriz, la función
toma como entrada el orden de la matriz, y el vector.
Con la función index array insertamos el valor que servirá de celda vacía, el cero

La inserción del cero será en la columna cero, fila cero

La matriz a la salida del index array es una matriz ordenada.


Esa matriz se debe desordenar para dar el efecto de rompecabezas, para ello
usamos la función Shuffle 2D Array
Sin embargo, el arreglo ordenado lo debemos conservar para comparar la
solución
Mediante las decisiones del botón ratio ordenamos la matriz de modo horizontal
o vertical, para el modo vertical usamos la traspuesta de la matriz
La decisión la validamos con un case structure
La estructura case decide entre horizontal y vertical, para vertical la traspueste
la encontramos en
Nótese la aparición de una variable local denominada cantidad de elementos, de
ese modo podemos usar la variable sin requerir conexión con cable

el modo de obtener la variable local es dar botón derecho al indicador cantidad


de elementos y seleccionar crear variable local
Esa variable la podemos mover a cualquier parte del programa
Movimiento del rompecabezas
La lógica de movimiento de la matriz se realizará con un ciclo while que se repite
hasta que el usuario lo detenga o hasta que el rompecabezas se solucione.

En el ciclo while existen varias variables que actualizaran sus valores entre ella
la matriz, por tanto al momento de ingresar la matriz al ciclo while debemos
ingresarla como registro de corrimiento para que su valor se actualice con cada
interacción. Para obtener el registro de corrimiento damos botón derecho sobre
el ciclo while

Luego de ellos aparecen un par de flechas a los lados del ciclo, sobre ellas
cableamos la matriz
Se han añadido otros registros de corrimiento para el movimiento vertical y
horizontal de la matriz
Los controles para movimiento horizontal y vertical se han limitado al valor del
orden de la matriz
Para ello invocamos a un nodo de propiedades dando botón derecho sobre las
variables horizontal y vertical
Cableamos el valor del orden para el máximo y el valor del mínimo pero de signo
contrario, de ese modo las barras tendrán un límite según el orden de la matriz
Dado que primero se debe mover el valor de casilla vacío y luego comparar si la
matriz está resuelta hemos usado una estructura flat sequence que primero
mueve la matriz y luego verifica si el movimiento da la solución

El control del movimiento se realiza comparando los valores antes y después.


Primero analizamos el movimiento arriba-abajo
Se verifica si el valor del movimiento es mayor al anterior, si es mayor el
movimiento se hizo hacia arriba

Si el movimiento se hizo hacia arriba el llamamos a una estructura case


En esa estructura cableamos la salida del comparador mayor

El caso verdadero será cuando la celda vacía debe subir


En ese caso debemos intercambiar el valor de la celda cero con el valor de la
matriz
Pero primero debemos saber dónde está la casilla cero, usamos search 2D
array, ingresando el valor a buscar y la matriz
Esta función devuelve un vector con la posición del cero
A ese vector lo descomponemos para saber la fila y la columna que contiene al
cero, usando index array

En esa posición donde está el cero debemos colocar ahora el número que
estaba arriba, pero aún no sabemos cuál es ese valor
Luego decrementamos el valor de la fila donde está el cero, el decremento
sucede porque hacia arriba la matriz disminuye su valor, ese valor será el que
ahora ocupa el sitio del cero, lo que estamos haciendo es intercambiando el valor
con la posición del cero

El index array encerrado en rojo obtiene el valor de la celda de arriba y lo inserta


donde está el cero con el repace array encerrado en color azul, ambos ubicados
en el submenú de arrays
Por ultimo debemos ubicar el cero en la posición donde estaba el valor con otro
replace array
De este modo ya la matriz ha intercambiado la celda cero con la celda superior,
esto sucede por la comparación del desplazador arriba-abajo dio mayo, en caso
de que no sea mayor se activa la parte false del case

Ahora se pregunta si el valor siguiente es menor, eso quiere decir que debe bajar
la celda cero
Usamos un case de nuevo por si la opción es verdadera
En caso de ser verdadera entonces debemos ubicar nuevamente el cero e
intercambiarlo ahora con el número que está debajo del cero
Por último, si el valor no es mayor ni menor, quiere decir que no hubo movimiento
por lo tanto la matriz debe permanecer igual

La matriz no se procesa y continua si camino, hacia el siguiente case que


realizara el análisis cuando el desplazamiento es de lado

La matriz ahora ingresa a los case de comparación para los movimientos de


derecha-izquierda
En el primer caso es cuando el desplazamiento es a la derecha
Para este caso el movimiento es a la izquierda

Y en este caso no se ha movido el control de desplazamiento horizontal


Conteo de intentos
Para el conteo de intentos usamos nuevamente los registros de desplazamiento,
si el valor después de mover la barra es diferente al anterior entonces hubo
movimiento

Esa diferencia entra a un comparador OR para que detecte cualquier movimiento


sin importar si es vertical u horizontal, luego a un case para ver si ocurrió un
cambio
Analizaremos ahora ese case
El case usa un incremento para contar los intentos
Luego usamos un nodo de feedback para seguir actualizando ese valor
El nodo lo encontramos en las estructuras

La salida la cableamos a la entrada

Luego inicializamos en cero a ese nodo ingresando un control con valor de cero
en el punto del asterisco debajo de la flecha
Cada vez que se ingrese a ese case se sumara un intento mas
Solución del rompecabezas
Para verificar si la matriz ha sido ordenada añadimos otra flat a la secuencia que
incluimos al principio, dando clic derecho sobre el flat

Al añadir otra secuencia garantizamos que la matriz ha sido ya movida, y debe


compararse para luego buscar el siguiente movimiento del usuario
Para hacer la comparación volvemos nuevamente vector a la matriz con la
función reshape array, nótese el uso de la variable local cantidad de elementos

Ingresamos a un ciclo for con el arreglo ordenado

Realizamos una sumatoria de los valores diferentes, si no hay ningún valor


diferente el rompecabezas está solucionado
Esa comparación detendrá el ciclo del armado de la matriz

El puntaje se obtendrá de restar 100 al número de intentos


CONCLUSION
Con el desarrollo de este trabajo concluyo que es importante entender cada una
de las funciones graficas que nos otorga el programa lab vew ya que si no las
comprendemos muy bien tanto el funcionamiento como para que las podemos
utilizar se nos dificultara la utilización de las mismas concluyo que fue de mucha
utilidad el desarrollo de este código ya que profundice temáticas que no tenía
muy clara.
BIBLIOGRAFIA
 Lajara, V. J. R. (2007). LabVIEW: entorno gráfico de programación.
Barcelona, ES: Marcombo. Capítulo 4. pág. 91-114. Recuperado de:
de:http://bibliotecavirtual.unad.edu.co:2077/lib/unadsp/reader.action?docID=
10204103
 Lajara, V. J. R. (2007). LabVIEW: entorno gráfico de programación.
Barcelona, ES: Marcombo. Capítulo 13-14. pág. 313-356. Recuperado de:
de:http://bibliotecavirtual.unad.edu.co:2077/lib/unadsp/reader.action?docID=
10204103
Monroy, J. (2017). Optimización de instrumentos virtuales. [Archivo de video]
Recuperado de: http://hdl.handle.net/10596/12747

Das könnte Ihnen auch gefallen