Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INTRODUCCION
DESARROLLO
Ejercicio 1:
Realice un programa que permita encontrar el máximo de 100 números generados texto
El ejercicio una vez terminado debe conducir a una representación en Lenguaje G como
la que se muestra a continuación en la ventana de diagrama o código del LabView:
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO
Veamos como desarrollar paso a paso dicho ejercicio. Primero, una explicación de lo
que se nos pide.
Cada vez que se nos entregue un número, o sea, con cada iteración del bucle o lazo, se
debe comparar el número generado con el número máximo hasta ahora generado. Eso
nos indica que debemos realizar una comparación que busque el máximo y almacenarlo
para comparar en cada iteración con el nuevo número.
Se nos pide que representemos gráficamente dichos números por lo que debemos
agregar un gráfico a nuestro diseño encargado de plotear en cada iteración el número
aleatorio a procesar. Como descomponer entonces con LabView dichas operaciones?
2. Una vez que se ha puesto el ciclo for debemos definir el alcance del mismo. Se
recuerda que un ciclo for en LabView siempre va desde 0 hasta N-1, siendo N el
valor a definir. Aquí queremos realizar las operaciones 100 veces por lo que
debemos definir para N un valor de 100. Esto se realiza creando una constante y
conectándola con N. Es muy sencillo, la siguiente figura ilustra como hacerlo. El
menú que allí aparece se obtiene dando clic derecho encima de N:
3. Cuando la constante se crea, aparece con valor 0. Debemos cambiar dicho valor y
poner 100, como se muestra en la siguiente figura:
4. Necesitamos ahora generar un número aleatorio y compararlo con algún máximo. Por
supuesto, el primer número aleatorio no tiene referencia de comparación, pero como
debemos comparar dentro del ciclo for, basta con compararlo con el menor valor
posible que se pudiera generar, en este caso 0, con lo cual garantizamos que el primer
número aleatorio siempre será el primer máximo contra el cual comparar después los
sucesivos que se generarán. LabView presenta un componente que realiza la
comparación entre dos fuentes o números, y devuelve el mínimo valor de entre los
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO
El shift register desde el punto de vista de la programación es una estructura tipo arreglo
asociada con lazos de control o bucles de programa como el for y el while y que
almacena valores anteriores producidos en dichos lazos. Así, por ejemplo, si obtenemos
como resultado de una iteración i un valor v(i) al final de dicha iteración, al comienzo
de la próxima al i incrementarse en uno, dicho valor se almacena como v(i-1). Dos
iteraciones hacia delante será v(i-2) y así sucesivamente. La siguiente tabla ilustra dicho
concepto con ejemplos numéricos:
y así sucesivamente....
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO
Al seleccionar de dicho menú la última opción, Add Shift Register (Adicionar registro
de desplazamiento) se inserta en el diagrama como se muestra en la siguiente figura:
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO
7. Antes de realizar las conexiones entre los elementos debemos además seleccionar
algún componente que nos permita visualizar gráficamente los números
aleatorios que se van generando. Para ello nos vamos al panel frontal y con clic
derecho visualizamos el siguiente menú:
9. - Una vez realizadas estas conexiones el ejercicio está prácticamente concluido. Note
que la primera vez que se compara en el bloque de comparación se hace entre un primer
número aleatorio y el valor del shift register. Ya se explicó como funciona el shift
register y debemos notar que antes de concluir la primera iteración no tenemos un valor
con el cual comenzar para el shift register que adquiere uno al final de cada iteración.
Eso nos indica que tenemos que inicializarlo, darle un valor inicial con el cual empezar
y evaluar la iteración 0 . Note además que cuando se llega a la última iteración el valor
actual que contiene el shift register es el del último máximo calculado, y por tanto el
valor que debemos reportar como resultado. Es por ello que entonces debemos crear un
indicador para visualizar el último máximo y una constante para definir la condición
inicial del shift register. Las figuras que se muestran a continuación ilustran como
hacerlo. Los menús que allí aparecen se obtienen al dar clic derecho encima de los shift
registers.
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO
El resultado final se muestra en la siguiente figura. Note que el valor inicial del shift
register es 0.00 pues es el mínimo que puede tomar el número aleatorio y no afectará la
selección del primer máximo.
Por último, señalar que si queremos que el gráfico se represente más lentamente podemos
incluir una demora (Functions/Time & Dialog/ Wait Until Next ms Multiple) o
seleccionar el indicador de ejecución paso a paso. La siguiente figura muestra como
quedaría el ejercicio para una demora de 50 milisegundos:
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO
Ejercicio 2:
Desarrollo:
involucrados:
Antes de pasar a una explicación más o menos detallada de como construir la solución en
la pantalla de diagrama veamos algunos razonamientos de como proceder con los shift
registers:
1. Se quiere dividir una cadena que representa la fecha en sus tres elementos
constitutivos, o sea, el día, el mes y el año que la conforman.
2. La operación siempre es la misma: se extrae de la cadena una subcadena que
representa un componente de la fecha (o el día, o el mes o el año) y se elimina de
la subcadena que resulta de extraer dicho componente el separador /.
3. El proceso se repite 3 veces.
El punto 3 nos indica que podemos utilizar un lazo condicional, o sea, un while, pues
siempre dentro del while se hará lo mismo (punto 2). La subcadena que representa el
componente extraído debe almacenarse para brindar los resultados finales. Como
entonces utilizar los shift registers? Quizá una manera en que podemos verlo es
representando el proceso, para una fecha ejemplo, a través de las iteraciones. La
siguiente tabla lo ilustra:
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO
Como se puede apreciar por cada iteración se obtiene un componente resultante, primero el
día, después el mes y por último el año. Si denotamos por c(i) al componente resultante se
puede ver que después de la iteración 2 c(i)=2005, c(i-1)=02 y c(i-2)=8. Dicha secuencia es la
que precisamente nos pueden brindar los shift register si creamos los suficientes en el
diagrama como para almacenar los valores c(i-2), c(i-1) y c(i). Necesitamos además de una
iteración a otra almacenar la subcadena resultante después de extraer el separador que será la
nueva cadena inicial con la cual trabajar en la próxima iteración. Veamos pues como
hacerlo. 1. Primero debemos de crear el lazo condicional while en nuestra aplicación:
2. Debemos ahora definir la condición de parada. Queremos que el lazo funcione mientras la
iteración no sea mayor que dos, por tanto, la condición de ejecución del while debe ser i<=2.
La siguiente figura nos indica como quedaría (el componente de comparación aparece en
Functions/Comparison/Less or Equal?):
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO
3. En el panel Frontal debemos insertar un control de tipo String para poder teclear la fecha
que se quiere descomponer (Controls/String & Path/String Control):
Note que en la siguiente figura el control generado en el panel frontal tiene asociado una
variable que debemos ubicar fuera del lazo while pues es la cadena inicial que hay que
descomponer.
5. Una vez introducido dicho componente se crea el primer shift register, que tendrá la
función de almacenar la subcadena resultante después de cada iteración. En la
siguiente figura aparece representado. A la función de dividir (Split) cadenas se le
asigna en cada iteración la cadena inicial (ver tabla página 13) que está almacenada
en el shift register (por ejemplo, si en la iteración que acaba de concluir quedó
02/2005 ese valor se almacena en el shift register de la derecha y cuando se
incrementa i para iniciar una nueva iteración esa cadena (ahora, después de
incrementada i es el resultado de la iteración i-1) LabView la pasa o ubica en el shift
register de la izquierda para que sea usada en la iteración i).
Como ya mencionamos anteriormente, los shift register tienen que tener un valor inicial,
para que sea el valor con el cual comienza a trabajar la iteración 0. En este caso el valor
inicial es la cadena inicial introducida en el edit, o sea, la fecha completa que se quiere
dividir. En la figura anterior se mostró la conexión que inicializa al shift register.
6. Una vez introducido este registro de desplazamiento hay que completar las entradas
del modulo de división de cadena. Para ello se agregan dos constantes en la entrada,
y se le dan, respectivamente, valores de / (que es el separador) y 0. Dichos valores le
indican al Labview que la cadena que tiene en su entrada y que será dividida en dos
se comenzará a explorar desde el primer elemento (elemento 0) hasta detectar el
carácter /.
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO
Esta función tiene dos salidas, la primera es la subcadena encontrada antes del carácter que
divide la cadena de entrada en dos cadenas (en nuestro ejemplo /). La segunda salida es la
cadena que se encuentra desde el separador hasta el final. Note que incluye al separador.
Las dos salidas serán de utilidad, la que está delante del separador es el componente de la
fecha que estamos separando (día, mes o año) y la segunda la que hay que seguir separando.
Que hacer con la primera? Hay que almacenarla pues de lo contrario en la próxima iteración
tendré otra componente resultante de la comparación que cambiará la salida de la función
Search/Split String.
7. Para ello debemos utilizar un nuevo shift register, en este caso, uno que tendrá la
función de los componentes resultantes. La siguiente figura indica la forma de
insertarlo:
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO
También se pudo utilizar una segunda función split, pero la que se ha escogido es la más
representativa de lo que se quiere hacer puesto que recibe a su entrada una cadena y
devuelve la subcadena que se encuentra desde la posición k hasta la l, donde k y l son otras
entradas de la función. Nosotros queremos tomar la cadena que sale de la función
Search/Split... y quitarle el separador, o sea, quedarnos con el subconjunto o subcadena que
se encuentra desde la posición 1 (en la posición 0 está el separador hasta el final):
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO
9.- Ahora si podemos conectar la salida de esta función String Subset al shift register de su
derecha:
10. Hasta aquí lo que está programado funciona bien pero no nos permite visualizar todos
los resultados. El resultado se obtiene en el shift register que en la figura anterior no
está conectado. Que componente se obtiene ahí después de concluida la última (i=3)
iteración? La respuesta es que se obtiene el valor del shift register asociado (el de la
parte derecha a su mismo nivel) en la iteración i-1. Cual es ese valor? Del ejemplo de
la Tabla en la Página 13 podemos ver que es el año. Note que al final de la última
iteración el valor del shift register asociado de la derecha era “”. Conectemos
entonces un indicador tipo string al shift register no conectado hasta ahora (clic
derecho, en el menú que aparece seleccionar Create/Indicator). Cambiando el
nombre del indicador por el de año obtenemos:
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO
11. Eso nos permite visualizar el año. Pero y el mes? Si el año fue el valor resultante en la
iteración i-1, es de suponer que el mes es el valor resultante en la iteración i-2. Pero ese valor
no lo tenemos almacenado. Hay que almacenarlo. Crear elementos del shift register para las
iteraciones i-2, i-3, i-4,.... es fácil . Solo hay que agregar un elemento al shift register ya
creado. La siguiente figura muestra como hacerlo. El menú que aparece en ella se obtiene
con clic derecho sobre el shift register de la derecha (el conectado al indicador de año):
El resultado:
12. Debemos agregar otro nivel, (el de i-3) para el componente día de la fecha:
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO
13. Antes de concluir debemos realizar una operación más. Hay 3 elementos en el
registro de desplazamiento asociado con el año, el mes y el día que no han sido
inicializados. Que valor les corresponde? Aquí en realidad no tiene importancia el
valor que le demos pues solo están conectados (los elementos del shift register) y por
lo tanto el valor que al concluir el while mostrarán serán los componentes de la
cadena fecha. Sin embargo, es una práctica sana inicializarlos, y por eso se hará,
dándole un valor inicial de “” que indicará cadena vacía. La siguiente figura muestra
como hacerlo:
En la ventana o panel frontal nuestro diseño sería más o menos así. Para probar que nuestro
programa se ejecuta debemos antes de ejecutarlo darle un valor inicial a la fecha que se
descompondrá, editando en el control Fecha el valor:
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO
08/01/1990
1990
1
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO
Ejercicio 3:
Realice un programa en LabView que permita gráficar la función seno hasta que se oprima
el botón parar.
Desarrollo:
Este ejercicio nos permitirá conocer como trabajar con el Nodo Fórmula. Que se nos pide?
Graficar la función seno(x) hasta que se oprima un botón. Eso nos indica que debemos
ubicar un lazo o bucle de repetición condicional, o sea, un while. La condición de parada
del while la producirá el clic sobre un botón. Dentro del while debemos de estar evaluando,
para cada iteración a la función seno(x). Que valor le damos a x? Podemos usar el mismo
valor de la iteración i. El único problema es que el seno(x) espera el valor en radianes por lo
que hay que convertir el valor de i a dicha unidad, y después calcular el seno. Este es un
caso típico en que un nodo fórmula nos simplifica mucho el trabajo. Veamos la solución.
1. Primero comenzamos creando el ciclo while y un botón (ya se sabe como hacerlo de
clases anteriores):
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO
En la figura anterior aparece nuevo el elemento negado, que conecta al botón con la
condición de ejecución del while. En clases anteriores vimos que se podía también cambiar
la condición de ejecución del while con clic en ella: aparece un circulo rojo. En versiones
anteriores a la 6.0 no existía dicha posibilidad.
3.
Una vez creado el nodo fórmula tenemos que indicar cuales serán las variables de
entrada de dicho nodo y cuales las de salida. Comenzando por las de entrada se
adicionan de la siguiente manera (el menú aparece al dar clic derecho en el nodo
fórmula):
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO
5. Ahora debemos editar dentro del nodo fórmula el contenido de lo que se quiere
calcular. Para este caso son 3 lineas. Note la similitud entre C++ o Matlab y el
lenguaje que admite el nodo fórmula. Dicho nodo es compatible con ANSI C.
CONCLUSIONES
Y por ultimo en el tercer ejercicio un poco parecido al primero pero con una diferencia en el
momento de elaborarlo ya que este introducimos una formula la cual obtuvimos como
resultado final ondas senoidales.
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO
RECOMENDACIONES
WEBGRAFIA
https://classroom.google.com/u/0/c/MTIwMTUwNDY4MTg4/a/MTgxMTMyMzQ1MjU3/de
tails
https://www.ni.com/es-cr/support/downloads/software-
products/download.labview.html#346254
Bibliografía
Edison,joel,ivan2020