Manual VBingqui 2010
Manual VBingqui 2010
2
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
3
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
4
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
mismo capítulo se verán unos cuantos ejemplos de aplicación de estas reglas para
construir nombres.
5
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
MyFirstProgram. Después de haber cambiado el nombre del proyecto, haga clic en Aceptar
para continuar. Aparecerá la siguiente IDE de Windows, es casi similar a Visual Basic 6.
Consiste en una forma vacía, la caja de herramientas de los controles comunes, el
explorador de soluciones y de las propiedades.
6
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
7
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
1.4 ALGORITMOS
¿Qué es un Algoritmo?
Existen muchas y muy variadas definiciones de lo
que es un algoritmo, dependiendo del autor
podemos distinguir las siguientes:
• Conjunto de reglas que permiten obtener
un resultado determinado a partir de
ciertas reglas definidas.
• Conjunto de pasos que nos permite
obtener un dato.
• Algoritmo es una secuencia finita de
instrucciones, cada una de las cuales tiene
un significado preciso y puede ejecutarse
con una cantidad finita de esfuerzo en un
tiempo finito. Ha de tener las siguientes
características: legible, correcto, modular,
eficiente, estructurado, no ambiguo y a
ser posible se ha de desarrollar en el
menor tiempo posible.
• Un algoritmo es el conjunto de
operaciones y procedimientos que deben seguirse para resolver un problema.
A lo anterior debemos agregar que un algoritmo debe cumplir además con las siguientes
características:
• Finitud: el algoritmo debe acabar tras un número finito de pasos. Es más, es casi
fundamental que sea en un número razonable de pasos.
• Definibilidad: el algoritmo debe definirse de forma precisa para cada paso, es
decir, hay que evitar toda ambigüedad al definir cada paso. Puesto que el lenguaje
humano es impreciso, los algoritmos se expresan mediante un lenguaje formal, ya
sea matemático o de programación para un computador.
• Entrada: el algoritmo tendrá cero o más entradas, es decir, cantidades dadas
antes de empezar el algoritmo. Estas cantidades pertenecen además a conjuntos
especificados de objetos. Por ejemplo, pueden ser cadenas de caracteres, enteros,
naturales, fraccionarios, etc. Se trata siempre de cantidades representativas del
mundo real expresadas de tal forma que sean aptas para su interpretación por el
computador.
• Salida: el algoritmo tiene una o más salidas, en relación con las entradas.
• Efectividad: se entiende por esto que una persona sea capaz de realizar el
algoritmo de modo exacto y sin ayuda de una máquina en un lapso de tiempo finito.
Uno de los algoritmos más antiguos conocidos es el algoritmo de Euclides. El término
algoritmo proviene del matemático Muhammad ibn Musa al-Khwarizmi, que vivió
aproximadamente entre los años 780 y 850 d.C. en la actual nación Iraní. El describió la
realización de operaciones elementales en el sistema de numeración decimal. De al-
Khwarizmi se obtuvo la derivación algoritmo.
El Lenguaje Informático
Ya vimos varias definiciones de un algoritmo, pero ahora debemos comprender un nuevo
término y que es el de "Lenguaje Informático".
El lenguaje informático es aquel por medio del cual un algoritmo se codifica a un sistema
comprensible por el ordenador o computadora. Este tipo de lenguaje es más cercano a la
máquina que al ser humano y podemos distinguir distintos tipos dependiendo de la
proximidad a la maquina. Se denomina lenguaje de alto nivel aquel que es más cercano a
la comprensión humana y lenguaje de bajo nivel a aquellos que son más comprensibles
por la máquina.
8
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
En concreto, nosotros vamos a estudiar un lenguaje que es el Visual Basic 2010 que es
tan potente y rápido, pues las funciones principales representan las funciones más básicas
del ordenador
A menudo los algoritmos requieren una organización bastante compleja de los datos, y es
por tanto necesario un estudio previo de las estructuras de datos fundamentales. Dichas
estructuras pueden implementarse de diferentes maneras, y es más, existen algoritmos
para implementar dichas estructuras. El uso de estructuras de datos adecuadas puede
hacer trivial el diseño de un algoritmo, o un algoritmo muy complejo puede usar
estructuras de datos muy simples.
Realización de un Algoritmo
Para la realización de un algoritmo es necesario realizar una secuencia de pasos para llegar
a cumplir con la resolución de un problema dado. Para ello, definiremos los siguientes
pasos:
1. Análisis previo del Problema: Se debe realizar un análisis del funcionamiento del
problema antes que se realice cualquier algoritmo. Esto es para poder obtener los
requerimientos que deberá satisfacer el algoritmo luego de ser ejecutado.
2. Definición de Requerimientos: Los problemas a solucionar, esto es, por ejemplo, el
sumar dos números, multiplicar dos matrices, ordenar una lista de números,
generar un reporte, etc.
3. Identificación de los Módulos: La identificación de los módulos es tan importante
como la identificación correcta de los requerimientos, esto porque la correcta
identificación de los módulos simplifica considerablemente la realización de los
algoritmos que darán solución a los requerimientos identificados en el paso
anterior.
Por ejemplo, si para lograr cumplir el requerimiento del cálculo de una cuota es
necesario multiplicar dos cantidades y luego sumarlas, sería conveniente crear un
módulo que permita multiplicar y otro que permita sumar y luego en otro módulo
utilizar a estos dos y realizar el cálculo de la cuota. Con esto podemos darnos
cuenta que es mucho más simple el realizar los módulos por separado que realizar
todas las operaciones amontonadas. Además, el realizar módulos permite que más
tarde podamos reutilizarlos en otras operaciones.
Por otro lado, es importante mencionar que no se deben realizar módulos que sean
tan simples que puedan ser reemplazados por una operación sencilla.
4. Realización de los Algoritmos: A continuación, corresponde realizar los algoritmos
correspondientes para cada módulo identificado. Dicho algoritmo deberá cumplir
con las características que se indicaron para posteriormente implementarse en un
lenguaje de programación comprensible por una computadora.
5. Implementación de los Algoritmos: La implementación de los algoritmos se debe
realizar en un lenguaje de programación para que una computadora pueda
comprender las instrucciones que el algoritmo modela para así poder ejecutarlas y
lograr el resultado esperado.
En el último paso ya podemos hablar de una aplicación o programa de computadora, que
estará compuesto por una serie de instrucciones que ordenadas una tras otra logran
representar los algoritmos diseñados y dar así solución a los requerimientos identificados.
Representación de un Algoritmo
La principal forma de representación de un algoritmo es la utilización de los denominados
"Diagramas de Flujo".
Los diagramas de flujo, como su nombre lo indica, son gráficas que representan la
dirección que sigue la información que contiene un algoritmo; los datos se encierran en
diferentes figuras, estas se llaman figuras lógicas. Existen siete figuras lógicas utilizadas
en el diagrama de flujo: Inicio, Lectura/Escritura, Flujo, Proceso, Decisión, Ciclo y Fin.
9
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
Ejemplo:
Aquí podemos apreciar cómo se relacionan los elementos anteriores entre sí:
Esta es una de las tantas formas de representación de un algoritmo. También podemos
representarlo en forma de líneas de texto estructurado u otra.
Concluyendo
El algoritmo es de carácter general y puede aplicarse a
cualquier operación matemática o a cualquier problema.
La formulación de algoritmos fue uno de los más grandes
adelantos dentro de la ciencia matemática ya que a partir de
ellos se pudieron resolver infinidad de problemas.
Los algoritmos, para llegar a ser tales deben reunir ciertas
características. Una de ellas es que los pasos que deben
seguirse deben estar estrictamente descritos, cada acción
debe ser precisa, y debe ser general, es decir, que pueda ser
aplicable a todos los elementos de una misma clase.
La representación gráfica de un algoritmo permite un mayor
entendimiento de éste y da una mayor claridad al momento
de realizar un seguimiento de éste.
La implementación es el fin último del algoritmo y mediante
esta implementación puede ser puesto en práctica en una computadora.
Algoritmos y Programas
El computador debe estar al servicio de resolver problemas. Éste es una máquina que no
funciona sin un grupo de instrucciones que le indiquen qué hacer.
Para comunicarnos o darle instrucciones a un computador debemos aprender un lenguaje
común para ambos (Lenguaje de Programación). Este lenguaje de programación debe
contener un grupo de símbolos que la máquina comprende y que ayuda a la ejecución de
las instrucciones que queremos.
A medida que pasa el tiempo, los lenguajes de programación han ido evolucionando para
parecerse más a nuestro idioma.
En la actualidad existen en el mercado una serie de lenguajes de programación, unos más
evolucionados que otros, entre los cuales podemos mencionar: Pascal, C, Java, Visual
Basic, Power Builder, etc. Para este curso utilizaremos el lenguaje Visual Basic 2010 como
lenguaje de trabajo.
10
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
Ejercicio
Veamos ahora un ejemplo de diseño e
implementación de un algoritmo.
Consideremos el problema de resolver
una serie como la de a continuación:
11
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
Otros Algoritmos
ESTRUCTURA SECUENCIAL
1. Se Ingresan 2 números. Calcular y visualizar la suma de los números ingresados.
2. Se ingresa el radio de un círculo. Visualizar el área del círculo
3. Ingresar un número y calcular el 5 % del número ingresado. Visualizar el número y el
porcentaje calculado.
In ic i o In ic i o
In ic io In ic i o
Sum a = 0 Pn = 0
R Sm = 0
A ,B N
N o m , sb h , n h t
A = 3 .1 4 1 6 * R 2
Su m a = A + B
Pn = N * 0 .0 5 Sm = sb h * n h t
A
A ,B No m
Su m a N ,Pn Sm
4. Ingresar el nombre (Nom) de un empleado, su salario básico por hora (sbh) y el número
de horas trabajadas en el mes (nht). Calcular y visualizar el nombre y su salario mensual
(Sm).
ESTRUCTURA CONDICIONAL
5. Se ingresa un número. Visualizar el número sólo si es positivo.
12
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
In ic i o
In ic i o In ic i o
N
X ,Y a, b
N > 0
X < Y a > b
“Po sitiv o ”
Y, X X ,Y b a
Fin
Fin Fin
K 10
A
A IGU K, M
ALE
B > A K = K + 1
M = M + 5
Fin
FIN
9. Visualizar 10 múltiplos del 5 a partir del 30 en forma ascendente.
10. Visualizar 15 múltiplos del 7 a partir del 49 de forma descendente.
11. Visualizar la hora y el minuto de un reloj digital por el lapso de un día.
13
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
In ic i o
H = 0
H < 24 No
K = K + 1
M 59 No
H,M
M = M + 1
H = H+ 1
Fin
In ic i o In ic io
A ,B,C A ,B,C
Si No Si
No A> B Y B> C A> B
A< B Y B< C
No Si No Si
No B> A Y A> C Si B B > C A> C
B< A Y A< C
C B C A
C A
Fin
Fin
= b 2 − 4ac
14
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
15
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
16
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
Visual Basic 2010 es una excelente herramienta de programación que permite crear
aplicaciones propias (programas) para Windows. Con ella se puede crear desde una
simple calculadora hasta una hoja de cálculo de la talla de Excel (en sus primeras
versiones...), pasando por un procesador de textos o cualquier otra aplicación que se le
ocurra al programador. Sus aplicaciones en Ingeniería son casi ilimitadas: representación
de movimientos mecánicos o de funciones matemáticas, gráficas termodinámicas,
simulación de circuitos, etc.
Este programa permite crear ventanas, botones, menús y cualquier otro elemento de
Windows de una forma fácil e intuitiva. El lenguaje de programación que se utilizará será
el Basic, que se describirá en el siguiente capítulo.
A continuación, se presentarán algunos aspectos del entorno de trabajo de Visual Basic
2010: menús, opciones, herramientas, propiedades, etc.
2.2 EL ENTORNO DE VISUAL BASIC 2010
2.2.1 La barra de menús y las barras de herramientas
La barra de menús de Visual Basic 2010 resulta similar a la de cualquier otra aplicación
de Windows, tal y como aparece en la Figura 2.2. Bajo dicha barra aparecen las barras
de herramientas, con una serie de botones que permiten acceder fácilmente a las
opciones más importantes de los menús. En Visual Basic 2010 existen cuatro barras de
herramientas: Depuración, Edición, Editor de Formulas y
Estandard. Por defecto sólo aparece la barra Estandard,
aunque en la Figura 2.2 se muestran las cuatro. Clicando con
el botón derecho sobre cualquiera de las barras de
herramientas aparece un menú contextual con el que se
puede hacer aparecer y ocultar cualquiera de las barras. Al
igual que en otras aplicaciones de Windows, también pueden
modificarse las barras añadiendo o eliminando botones
Figura 2.1. Información visual
(opción Personalizar).
sobre el tamaño de un control.
En la barra de herramientas Estandard también se pueden
ver a la derecha dos recuadros con números, que
representan cuatro propiedades del formulario referentes a su posición y tamaño que se
verán más adelante: Top y Left, que indican la posición de la esquina superior izquierda
de el formulario, y también Height y Width, que describen el tamaño del mismo en unas
unidades llamadas twips, que se corresponden con la vigésima parte de un punto (una
pulgada tiene 72 puntos y 1440 twips). Las dimensiones de un control aparecen también
cuando con el ratón se arrastra sobre el formulario, según se puede ver en la Figura 2.1.
Los botones de la barra de herramientas Estandard responden a las
funciones más importantes: abrir y/o guardar nuevos proyectos,
añadir formularios, hacer visibles las distintas ventanas del entorno de
desarrollo, etc. Todos los botones tienen su correspondiente comando en alguno de los
menús. Son importantes los botones que permiten arrancar y/o parar la ejecución de un
proyecto, pasando de modo diseño a modo de ejecución y viceversa.
17
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
Project o Nuevo Project se abre o se crea un nuevo proyecto, pero cerrando el o los
proyectos que estuvieran abiertos previamente.
Tampoco el menú Edición aporta cambios importantes sobre lo que es habitual. Por el
contrario, el menú Ver, generalmente de poca utilidad, es bastante propio de Visual
Basic 2010. Este menú permite hacer aparecer en pantalla las distintas ventanas del
entorno de desarrollo, así como acceder a un formulario o al código relacionado con un
control (que también aparece si se clica dos veces en dicho control), y manejar funciones
y procedimientos.
El menú Proyecto permite añadir distintos tipos de elementos a
un proyecto (formularios, módulos, etc.). Con Propiedades de
Proyectos se puede elegir el tipo de proyecto y determinar el
formulario con el que se arrancará la aplicación (Startup Object).
Con el comando Components se pueden añadir nuevos controles
a la Toolbox que aparece a la izquierda de la pantalla.
El menú Format contiene opciones para controlar el aspecto de la
aplicación (alinear controles, espaciarlos uniformemente, etc.).
Los menús Depuración y Ejecutar permiten controlar la
ejecución de las aplicaciones. Con Depuración se puede ver en
detalle cómo funcionan, ejecutando paso a paso, yendo hasta una
línea de código determinada, etc. Esto es especialmente útil
cuando haya que encontrar algunos errores ejecutando paso a
paso, o viendo resultados intermedios.
En el menú Herramientas se encuentran los comandos para
arrancar el Menu Editor (para crear menús, como se verá en el
Apartado 5, a partir de la página 64, dedicado a los Menús) y para
establecer las opciones del programa. En
Herramientas/Opciones se encuentran las opciones relativas al
proyecto en el que se trabaja. La lengüeta Entorno determina las
propiedades del entorno del proyecto, como las opciones para
actualizar o no los ficheros antes de cada ejecución; en General
se establece lo referente a la retícula o grid que aparece en el
formulario; Editor permite establecer la necesidad de declarar
todas las variables junto con otras opciones de edición, como si se
quieren ver o no todos los procedimientos juntos en la misma
ventana, y si se quiere ver una línea separadora entre
procedimientos.
Por último, la ayuda (siempre imprescindible y en el caso de
Visual Basic 2010 particularmente bien hecha) que se encuentra
en el menú Ayuda, se basa fundamentalmente en una
clasificación temática ordenada de la información disponible
(Contents), en una clasificación alfabética de la información
(Index) y en la búsqueda de información sobre algún tema por el
nombre (Search). Como ya se ha mencionado, la tecla <F1>
permite una ayuda directa sensible al contexto, esto es
dependiente de donde se haya clicado con el ratón (o de lo que
esté seleccionado).
2.2.2 Las herramientas (toolbox)
La Figura 2.3 muestra la caja de herramientas, que incluye los Figura 2.3. Caja de
controles componentes
(Toolbox).
con los que se puede diseñar la pantalla de la aplicación. Estos
controles
son por ejemplo botones, etiquetas, cajas de texto, zonas gráficas, etc. Para introducir un
control en el formulario simplemente hay que clicar en el icono adecuado de la toolbox y
18
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
19
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
20
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
basados en el uso de identificadores, tanto para los datos como para las componentes
elementales del programa, que en algunos lenguajes se llaman rutinas, procedimientos, o
funciones. Además, cada lenguaje dispone de una sintaxis o conjunto de reglas con las
que se indica de modo inequívoco las operaciones que se quiere realizar.
Los lenguajes de alto nivel son más o menos comprensibles para el usuario, pero no para
el procesador. Para que éste pueda ejecutarlos es necesario traducirlos a su propio
lenguaje de máquina. Al paso del lenguaje de alto nivel al lenguaje de máquina se le
denomina compilación. En Visual Basic esta etapa no se aprecia tanto como en otros
lenguajes donde el programador tiene que indicar al ordenador explícitamente que realice
dicha compilación. Los programas de Visual Basic se dice que son interpretados y no
compilados ya que el código no se convierte a código máquina sino que hay otro programa
que durante la ejecución “interpreta” las líneas de código que ha escrito el programador.
En general durante la ejecución de cualquier programa, el código es cargado por el sistema
operativo en la memoria RAM.
3.2 COMENTARIOS Y OTRAS UTILIDADES EN LA PROGRAMACIÓN CON
VISUAL BASIC
Visual Basic 2010 interpreta que todo lo que está a la derecha del carácter (') en una
línea cualquiera del programa es un comentario y no lo tiene en cuenta para nada. El
comentario puede empezar al comienzo de la línea o a continuación de una instrucción
que debe ser ejecutada, por ejemplo:
’ Esto es un comentario
A = B*x+3.4 ' también esto es un comentario
Los comentarios son tremendamente útiles para poder entender el código utilizado,
facilitando de ese modo futuras revisiones y correcciones. En programas que no contengan
muchas líneas de código puede no parecer demasiado importante, pero cuando se trata
de proyectos realmente complejos, o desarrollados por varias personas su importancia es
tremenda. En el caso de que el código no esté comentado este trabajo de actualización y
revisión puede resultar complicadísimo.
Otro aspecto práctico en la programación es la posibilidad de escribir una sentencia en
más de una línea. En el caso de sentencias bastante largas es conveniente cortar la línea
para que entre en la pantalla. En otro caso la lectura del código se hace mucho más
pesada. Para ello es necesario dejar un espacio en blanco al final de la línea y escribir
el carácter (_) tal y como se muestra en el siguiente ejemplo:
str1 = "Londres" : str2 = "París" 'Se inicializan las variables
Frase = "Me gustaría mucho viajar a " & _
str1 & " y a " & str2
'El contenido de Frase sería: "Me gustaría mucho viajar a Londres y a París
Una limitación a los comentarios en el código es que no se pueden introducir en una línea
en
la que se ha introducido el carácter de continuación (_).
La sintaxis de Visual Basic 2010 permite también incluir varias sentencias en una
mismalínea. Para ello las sentencias deben ir separadas por el carácter dos puntos (:).
Por ejemplo:
m = a : n = b : resto = m Mod n ' Tres sentencias en una línea
3.3 PROYECTOS Y MÓDULOS
Un proyecto realizado en Visual Basic 2010 es el conjunto de todos los ficheros o
módulos necesarios para que un programa funcione. La información referente a esos
ficheros se almacena en un fichero del tipo ProjectName.vbp. La extensión *.vbp del
fichero hace referencia a Visual Basic Project.
Si se edita este fichero con cualquier editor de texto se comprueba que la información que
almacena es la localización en los discos de los módulos que conforman ese proyecto, los
21
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
controles utilizados (ficheros con extensión .ocx), etc. En el caso más simple un proyecto
está formado por un único formulario y constará de dos ficheros: el que define el proyecto
(*.vbp) y el que define el formulario (*.frm).
Los módulos que forman parte de un proyecto pueden ser de varios tipos: aquellos que
están asociados a un formulario (*.frm), los que contienen únicamente líneas de código
Basic (*.bas) llamados módulos estándar y los que definen agrupaciones de código y
datos denominadas clases (*.cls), llamados módulos de clase.
Un módulo *.frm está constituido por un formulario y toda la información referente a los
controles (y a sus propiedades) en él contenidos, además de todo el código programado
en los eventos de esos controles y, en el caso de que existan, las funciones y
procedimientos propios de ese formulario. En general se llama función a una porción
de código independiente que realiza una determinada actividad. En Visual Basic existen
dos tipos de funciones: las llamadas function, que se caracterizan por tener valor de
retorno, y los procedimientos o procedures, que no lo tienen. En otros lenguajes, como
C/C++/Java, las function realizan los dos papeles.
Un módulo de código estándar *.bas contendrá una o varias funciones y/o
procedimientos, además de las variables que se desee, a los que se podrá acceder desde
cualquiera de los módulos que forman el proyecto.
3.3.1 Ámbito de las variables y los procedimientos
Se entiende por ámbito de una variable la parte de la aplicación donde la variable es
visible (accesible) y por lo tanto puede ser utilizada en cualquier expresión.
3.3.1.1 Variables y funciones de ámbito local
Un módulo puede contener variables y procedimientos o funciones públicos y privados.
Los públicos son aquellos a los que se puede acceder libremente desde cualquier punto
del proyecto.
Para definir una variable, un procedimiento o una función como público es necesario
preceder a la definición de la palabra Public, como, por ejemplo:
Public Variable1 As Integer Public Sub Procedimiento1 (Parametro1 As Integer, …) Public
Function Funcion1 (Parametro1 As Integer, …) As Integer Para utilizar una variable Public
o llamar a una función Public definidas en un formulario desde otro módulo se debe
preceder el nombre de la variable o procedimiento con el nombre del formulario al que
pertenece, como, por ejemplo:
Modulo1.Variable1
Call Modulo1.Procedimiento1(Parametro1, …)
Retorno = Modulo1.Funcion1(Parametro1, …)
Sin embargo si el módulo al que pertenecen la variable o el procedimiento Public es un
módulo estándar (*.bas) no es necesario poner el nombre del módulo más que si hay
coincidencia de nombres con los de otro módulo también estándar. Una variable Private,
por el contrario, no es accesible desde ningún otro módulo distinto de aquél en el que se
haya declarado.
Se llama variable local a una variable definida dentro de un procedimiento o función. Las
variables locales no son accesibles más que en el procedimiento o función en que están
definidas.
Una variable local es reinicializada (a cero, por defecto) cada vez que se entra en el
procedimiento. Es decir, una variable local no conserva su valor entre una llamada al
procedimiento y la siguiente. Para hacer que el valor de la variable se conserve hay que
declarar la variable como static (como, por ejemplo: Static n As Integer). Visual Basic
inicializa una variable estática solamente la primera vez que se llama al procedimiento.
Para declarar una variable estática, se utiliza la palabra Static en lugar de Dim. Un poco
más adelante se verá que Dim es una palabra utilizada para crear variables. Si un
procedimiento se declara Static todss sus variables locales tienen carácter Static.
22
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
23
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
24
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
También es habitual entre los programadores, aunque no obligado, el utilizar nombres con
todas mayúsculas para los nombres de las constantes simbólicas, como por ejemplo PI.
3.4.4 Tipos de datos
Al igual que C y otros lenguajes de programación, Visual Basic dispone de distintos tipos
de datos, aplicables tanto para constantes como para variables. La Tabla 3.2 muestra los
tipos de datos disponibles en Visual Basic.
En el lenguaje Visual Basic 2010 existen dos formas de agrupar varios valores bajo un
mismo nombre. La primera de ellas son los arrays (vectores y matrices), que agrupan
datos de tipo homogéneo. La segunda son las estructuras, que agrupan información
heterogénea o de distinto tipo. En Visual Basic 2010 las estructuras son verdaderos tipos
de datos definibles por el usuario.
25
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
declararlas), y hay otra forma de declarar las variables anteriores, utilizando los caracteres
especiales vistos anteriormente. Así por ejemplo, el tipo de las variables del ejemplo
anterior se puede declarar al utilizarlas en las distintas expresiones, poniéndoles a
continuación el carácter que ya se indicó en la Tabla 3.2, en la forma:
Radio# doble precisión
Nombre$ cadena de caracteres
Francos@ unidades monetarias
Longitud& entero largo
Esta forma de indicar el tipo de dato no es la más conveniente. Se mantiene en las
sucesivas versiones de Visual Basic por la compatibilidad con códigos anteriores. Es
preferible utilizar la notación donde se escribe directamente el tipo de dato.
3.4.5 Elección del tipo de una variable
Si en el código del programa se utiliza una variable que no ha sido declarada, se considera
que esta variable es de tipo Variant. Las variables de este tipo se adaptan al tipo de
información o dato que se les asigna en cada momento. Por ejemplo, una variable tipo
Variant puede contener al principio del programa un string de caracteres, después una
variable de doble precisión, y finalmente un número entero. Son pues variables muy
flexibles, pero su uso debe restringirse porque ocupan más memoria (almacenan el tipo
de dato que contienen, además del propio valor de dicho dato) y requieren más tiempo
de CPU que los restantes tipos de variables.
En general es el tipo de dato (los valores que puede tener en la realidad) lo que determina
qué tipo de variable se debe utilizar. A continuación, se muestran algunos ejemplos:
· Integer para numerar las filas y columnas de una matriz no muy grande
· Long para numerar los habitantes de una ciudad o los números de teléfonos
· Boolean para una variable con sólo dos posibles valores (sí o no)
· Single para variables físicas con decimales que no exijan precisión
· Double para variables físicas con decimales que exijan precisión
· Currency para cantidades grandes de dinero
Es muy importante tener en cuenta que se debe utilizar el tipo de dato más sencillo
que represente correctamente el dato real ya que en otro caso se ocupará más
memoria y la ejecución de los programas o funciones será más lenta.
3.4.6 Declaración explícita de variables
Una variable que se utiliza sin haber sido declarada toma por defecto el tipo Variant.
Puede ocurrir que, durante la programación, se cometa un error y se escriba mal el nombre
de una variable. Por ejemplo, se puede tener una variable " declarada como entera, y al
programar referirse a ella por error como "; Visual Basic supondría que ésta es una nueva
variable de tipo Variant.
Para evitar este tipo de errores, se puede indicar a Visual Basic que genere un mensaje
de error siempre que encuentre una variable no declarada previamente. Para ello lo más
práctico es establecer una opción por defecto, utilizando el comando Environment del
menú Tools/Options; en el cuadro que se abre se debe poner Yes en la opción Require
Variable Declaration. También se puede hacer esto escribiendo la sentencia siguiente
en la sección de declaraciones de cada formulario y de cada módulo:
Option Explicit
3.5 OPERADORES
La Tabla 3.3 presenta el conjunto de operadores que soporta Visual Basic 2010.
Cuando en una expresión aritmética intervienen operandos de diferentes tipos, el
resultado se expresa, generalmente, en la misma precisión que la del operando que la
tiene más alta. El orden, de menor a mayor, según la precisión es Integer, Long, Single,
Double y Currency.
26
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
27
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
Do ... Loop
While … Wend
For Each … Next
3.6.1 Sentencia IF ... THEN ... ELSE ...
Esta estructura permite ejecutar condicionalmente una o más sentencias y puede
escribirse de dos formas. La primera ocupa sólo una línea y tiene la forma siguiente:
If condicion Then sentencia1 [Else sentencia2]
La segunda es más general y se muestra a continuación:
If condicion Then
sentencia(s)
[Else
sentencia(s)]
End If
Si condicion es True (verdadera), se ejecutan las sentencias que están a continuación
de Then, y si condicion es False (falsa), se ejecutan las sentencias que están a
continuación de Else, si esta cláusula ha sido especificada (pues es opcional). Para indicar
que se quiere ejecutar uno de varios bloques de sentencias dependientes cada uno de
ellos de una condición, la estructura adecuada es la siguiente:
If condicion1 Then
sentencias1
ElseIf condicion2 Then
sentencias2
Else
sentencia-n
End If
Si se cumple la condicion1 se ejecutan las sentencias1, y si no se cumple, se examinan
secuencialmente las condiciones siguientes hasta Else, ejecutándose las sentencias
correspondientes al primer ElseIf cuya condición se cumpla. Si todas las condiciones son
falsas, se ejecutan las sentencias-n correspondientes a Else, que es la opción por defecto.
La Figura 3.2 presenta esquemáticamente ambas formas de representar estas sentencias:
Por ejemplo,
Numero = 53 ’ Se inicializa la variable.
If Numero < 10 Then
Digitos = 1
ElseIf Numero < 100 Then
28
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
29
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
30
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
Loop
’ Formato 2:
Do
[sentencias]
[Exit Do]
[sentencias]
Loop [{While/Until}condicion]
La sentencia opcional Exit Do permite salir de una bucle Do ... Loop antes de que finalice
éste. Por ejemplo,
Check = True ’ Se inicializan las variables.
Counts = 0
Do ' Empieza sin comprobar ninguna condición.
Do While Counts < 20 ' Bucle que acaba si Counts>=20 o con Exit Do.
Counts = Counts + 1 ' Se incrementa Counts.
If Counts = 10 Then ' Si Counts es 10.
Check = False ' Se asigna a Check el valor False.
Exit Do ' Se acaba el segundo Do.
End If
Loop
Loop Until Check = False ' Salir del "loop" si Check es False.
En el ejemplo mostrado, se sale de los bucles siempre con Counts = 10. Es necesario
fijarse que si se inicializa Counts con un número mayor o igual a 10 se entraría en un
bucle infinito (el primer bucle acabaría con Counts = 20 pero el segundo no finalizaría
nunca, bloqueándose el programa y a veces el ordenador).
3.6.5 Sentencia WHILE … WEND
Esta sentencia es otra forma de generar bucles que se recorren mientras se cumpla la
condición inicial. Su estructura es la siguiente:
While condicion
[sentencias]
Wend
Por ejemplo,
Counts = 0 ’ Se inicializa la variable.
While Counts < 20 ’ Se comprueba el valor de Counts.
Counts = Counts + 1 ’ Se incrementa el valor de Counts.
Wend ’ Se acaba el bucle cuando Counts > 19.
En cualquier caso, se recuerda que la mejor forma de mirar y aprender el funcionamiento
de todas estas sentencias es mediante el uso del Help de Visual Basic. Ofrece una
explicación de cada comando con ejemplos de utilización.
3.6.6 Sentencia FOR EACH ... NEXT
Esta construcción es similar al bucle For, con la diferencia de que la variable que controla
la repetición del bucle no toma valores entre un mínimo y un máximo, sino a partir de los
elementos de un array (o de una colección de objetos). La forma general es la siguiente:
For Each variable In grupo
[sentencias]
Next variable
31
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
Con arrays variable tiene que ser de tipo Variant. Con colecciones variables puede ser
Variant o una variable de tipo Object. Esta construcción es muy útil cuando no se sabe
el número de elementos que tiene el array o la colección de objetos.
3.7 FUNCIONES Y PROCEDIMIENTOS
3.7.1 Conceptos generales sobre funciones
Las aplicaciones informáticas que habitualmente se utilizan, incluso a nivel de informática
personal, suelen contener decenas y aún cientos de miles de líneas de código fuente. A
medida que los programas se van desarrollando y aumentan de tamaño, se convertirían
rápidamente en sistemas poco manejables si no fuera por la modularización, que es el
proceso consistente en dividir un programa muy grande en una serie de módulos mucho
más pequeños y manejables. A estos módulos se les suele denominar de distintas formas
(subprogramas, subrutinas, procedimientos, funciones, etc.) según los distintos lenguajes.
Sea cual sea la nomenclatura, la idea es sin embargo siempre la misma: dividir un
programa grande en un conjunto de subprogramas o funciones más pequeñas que son
llamadas por el programa principal; éstas a su vez llaman a otras funciones más
específicas y así sucesivamente.
La división de un programa en unidades más pequeñas o funciones presenta –entre otras–
las ventajas siguientes:
1. Modularización. Cada función tiene una misión muy concreta, de modo que nunca
tiene un número de líneas excesivo y siempre se mantiene dentro de un tamaño
manejable. Además, una misma función (por ejemplo, un producto de matrices, una
resolución de un sistema de ecuaciones lineales, ...) puede ser llamada muchas veces en
un mismo programa, e incluso puede ser reutilizada por otros programas. Cada función
puede ser desarrollada y comprobada por separado.
2. Ahorro de memoria y tiempo de desarrollo. En la medida en que una misma función
es utilizada muchas veces, el número total de líneas de código del programa disminuye, y
también lo hace la probabilidad de introducir errores en el programa.
3. Independencia de datos y ocultamiento de información. Una de las fuentes más
comunes de errores en los programas de computador son los efectos colaterales o
perturbaciones que se pueden producir entre distintas partes del programa. Es muy
frecuente que al hacer una modificación para añadir una funcionalidad o corregir un error,
se introduzcan nuevos errores en partes del programa que antes funcionaban
correctamente. Una función es capaz de mantener una gran independencia con el resto
del programa, manteniendo sus propios datos y definiendo muy claramente la interfaz o
comunicación con la función que la ha llamado y con las funciones a las que llama, y no
teniendo ninguna posibilidad de acceso a la información que no le compete.
3.7.2 Funciones y procedimientos Sub en Visual Basic 2010
En Visual Basic 2010 se distingue entre funciones y procedimientos Sub. En
ocasiones se utiliza la palabra genérica procedimiento para ambos. La fundamental
diferencia entre un procedimiento Sub y una función es que ésta última puede ser
utilizada en una expresión porque tiene un valor de retorno. El valor de retorno ocupa
el lugar de la llamada a la función donde esta aparece. Por ejemplo, si en una expresión
aparece sin(x) se calcula el seno de la variable x y el resultado es el valor de retorno que
sustituye a sin(x) en la expresión en la que aparecía. Por tanto, las funciones devuelven
valores, a diferencia de los procedimientos que no devuelven ningún valor, y por tanto no
pueden ser utilizadas en expresiones. Un procedimiento Sub es un segmento de código
independiente del resto, que una vez llamado por el programa, ejecuta un número
determinado de instrucciones, sin necesidad de devolver ningún valor al mismo (puede
dar resultados modificando los argumentos), mientras que una función siempre tendrá un
valor de retorno.
Los nombres de los procedimientos tienen reglas de visibilidad parecidas a las de las
variables. Para llamar desde un formulario a un procedimiento Public definido en otro
formulario es necesario preceder su nombre por el del formulario en que está definido. Sin
32
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
33
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
Cuadrada = Raiz(Num)
A diferencia de C y C++ en Visual Basic 2010 no es necesario devolver explícitamente
el valor de retorno, pues el nombre de la función ya contiene el valor que se desea
devolver. Tampoco es necesario declarar las funciones antes de llamarlas.
3.7.4 Procedimientos Sub
La sintaxis que define un procedimiento Sub es la siguiente:
[Static] [Private] Sub nombre [(parámetros)]
[sentencias]
[Exit Sub]
[sentencias]
End Sub
La explicación es análoga a la dada para funciones.
La llamada a un procedimiento Sub puede ser de alguna de las dos formas siguientes:
Call nombre[(argumentos)]
o bien, sin pasar los argumentos entre paréntesis, sino poniéndolos a continuación del
nombre simplemente separados por comas:
nombre [argumentos]
A diferencia de una función, un procedimiento Sub no puede ser utilizado en una
expresión pues no devuelve ningún valor. Por supuesto una función puede ser llamada al
modo de un procedimiento Sub, pero en esta caso no se hace nada con el valor devuelto
por la función.
El siguiente ejemplo corresponde a un procedimiento Sub que devuelve una variable F
que es la raíz cuadrada de un número N.
Sub Raiz (N As Double, F As Double)
If N < 0 Then
Exit Sub 'Se mandaría un mensaje de error
Else
F = Sqr(N)
End If
End Sub
La llamada a este procedimiento Sub puede ser de cualquiera de las dos formas
siguientes:
Raiz N, F
Call Raiz(N, F)
En el ejemplo anterior, el resultado obtenido al extraer la raíz cuadrada al número N se
devuelve en la variable F pasada como argumento, debido a que como se ha mencionado
anteriormente, un procedimiento Sub no puede ser utilizado en una expresión.
3.7.5 Argumentos por referencia y por valor
En las funciones (Function) y en los procedimientos Sub de Visual Basic, por defecto
los argumentos se pasan por referencia2; de este modo, cualquier cambio de valor que
sufra un parámetro dentro de la función o del procedimiento Sub también se produce
en el argumento correspondiente de la llamada a la función o al procedimiento Sub.
Cuando se llama a una función o a un procedimiento Sub, se podrá especificar que el
valor de un argumento no sea cambiado por la función o por el procedimiento, poniendo
dicho argumento entre paréntesis en la llamada. Un argumento entre paréntesis en la
llamada es un argumento pasado por valor. Por ejemplo,
Raiz ((Num)) ' En el caso de la función
Raiz (Num), F ' En el caso del procedimiento
34
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
El argumento Num es pasado por valor. Significa que lo que se pasa es una copia de
Num. Si el procedimiento cambia ese valor, el cambio afecta sólo a la copia y no a la
propia variable Num.
Otra forma de especificar que un argumento será siempre pasado por valor es
anteponiendo la palabra ByVal a la declaración del parámetro en la cabecera del
procedimiento (Sub o Function).
Por ejemplo,
Function Raiz (ByVal N As Double)
Sub Raiz (ByVal N As Double, F As Double)
Pasar argumentos por valor evita modificaciones accidentales, pero tiene un coste en
tiempo y memoria que puede ser significativo cuando se pasan grandes volúmenes de
información, como sucede con vectores, matrices y estructuras.
3.7.6 Procedimientos recursivos
Se dice que una función (Function) es recursiva o que un procedimiento Sub es
recursivo si se llaman a sí mismos.
A continuación, se presenta un ejemplo de una función que calcula la factorial de un
número programada de forma recursiva.
Function Factorial (N As Integer) As Long
If N = 0 Then
Factorial = 1 'Condición de final
Else
Factorial = N * Factorial (N - 1)
End If
End Function
En este ejemplo, si la variable N que se le pasa a la función vale 0, significará que se ha
llegado al final del proceso, y por tanto se le asigna el valor 1 al valor del factorial
(recordar que 0! = 1). Si es distinto de 0, la función se llama a ella misma, pero variando
el argumento a (N-1), hasta llegar al punto en el que N-1=0, finalizándose el proceso.
3.8 ESTRUCTURAS: SENTENCIA TYPE
Una estructura (según la nomenclatura típica del lenguaje C) es un nuevo tipo de datos,
un tipo definido por el usuario, que puede ser manipulado de la misma forma que los tipos
predefinidos (Int, Double, String, ...). Una estructura puede definirse como una
colección o agrupación de datos de diferentes tipos evidentemente relacionados entre sí.
Para crear una estructura con Visual Basic 2010 hay que utilizar la sentencia Type ...
End Type.
Esta sentencia solamente puede aparecer en la sección General o de declaraciones de un
módulo.
Pueden crearse como Public o como Private en un módulo estándar o de clase y sólo
como Private en un formulario. Dim equivale a Public. Véase el siguiente ejemplo,
Public Type Alumno
Nombre As String
Direccion As String *40
Telefono As Long
DNI As Long
End Type
Este ejemplo declara un tipo de datos denominado Alumno que consta de cuatro
miembros o campos, denominados Nombre, Direccion, Telefono y DNI.
35
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
Una vez definido un nuevo tipo de datos, en un módulo estándar o de clase se pueden
declarar variables Public o Private de ese tipo (en un formulario sólo Private), como por
ejemplo:
Public Mikel as Alumno
Para referirse a un determinado miembro de una estructura se utiliza la notación
variable.miembro. Por ejemplo,
Mikel.DNI = 34103315
A su vez, un miembro de una estructura puede ser otra estructura, es decir un tipo definido
por el usuario. Por ejemplo,
Type Fecha
Dia As Integer
Mes As Integer
Anio As Integer
End Type
Type Alumno
Alta As Fecha
Nombre As String
Direccion As String * 40
Telefono AS Long
DNI As Long
End Type
Dentro de una estructura puede haber arrays tanto estáticos como dinámicos.
En Visual Basic 2010 se pueden definir arrays de estructuras. La declaración de un
array de estructuras se hará con la palabra Public, Private o Static, dependiendo de su
ámbito. La forma de hacerlo es la siguiente:
Public grupoA (1 To 100) As Alumno
Private grupoB (1 To 100) As Alumno
Static grupoC (1 To 100) As Alumno
En Visual Basic 2010, a la hora de declarar arrays de estructuras, sucede lo mismo que
al declarar arrays de cualquier tipo de variables. Con GrupoA(1 To 100), se crea un
vector de estructuras de 100 elementos de tipo Alumno (grupoA(1), grupoA(2), ...,
grupoA(100)). Con grupoB(100), se crearía un vector de estructuras de 101 elementos
(grupoB(0), grupoB(1), ... grupoB(100)).
Es posible asignar una estructura a otra del mismo tipo. En este caso se realiza una copia
miembro a miembro. Véase el siguiente ejemplo:
GrupoA(1) = delegado
Las estructuras pueden ser también argumentos en las llamadas a funciones y
procedimientos Sub. Siempre son pasados por referencia, lo cual implica que pueden
ser modificados dentro del procedimiento y esas modificaciones permenecen en el entorno
de llamada al procedimiento. En el caso de las funciones, las estructuras pueden ser
también valores de retorno.
3.9 FUNCIONES PARA MANEJO DE CADENAS DE CARACTERES
Existen varias funciones útiles para el manejo de cadenas de caracteres (Strings). Estas
funciones se utilizan para la evaluación, manipulación o conversión de cadenas de
caracteres. Algunas de ellas se muestran en la Tabla 3.4.
Es necesario tener presente que cuando se quieren comparar dos cadenas de caracteres,
dicha comparación se realiza por defecto en función del código ASCII asociado a cada letra
(ver Anexo 8.1). Esto significa que por ejemplo caña es posterior a casa debido a que la
letra ñ tiene un código
36
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
ASCII asociado superior a la letra s (ñ es el 164; s es el 115). Esto mismo ocurre con las
vocales acentuadas. Si se desea conseguir una comparación alfabética lógica es necesario
incluir al comienzo del fichero de código la sentencia Option Compare Text (frente a
Option Compare Binary establecida por defecto). La función strComp() admite un
tercer argumento que permite especificar el tipo de comparación (constantes
vbBinaryCompare o vbTextCompare).
37
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
Existe además el operador de concatenación & que puede ser utilizado con cadenas de
caracteres. Se utiliza para poner una cadena a continuación de otra. Por ejemplo:
str1 = "My first string" ’Se inicializan los strings
str2 = "My second string"
TextoFinal = str1 & str2 ’TextoFinal vale "My first stringMy second string"
El operador "+" opera de forma análoga, pero su uso se desaconseja pues en ciertas
ocasiones convierte las cadenas en números y realiza la suma.
Para obtener más información sobre cada una de las funciones buscar Strings en el Help
de Visual Basic 2010.
3.10 FUNCIONES MATEMÁTICAS
Al igual que las funciones vistas para el manejo de cadenas de caracteres, existe una serie
de funciones matemáticas las cuales permiten realizar cálculos dentro de un programa de
Visual Basic.
Dichas funciones se muestran en la Tabla 3.5:
Ejemplos:
MyNumber = Abs(50.3) ’ Devuelve 50.3.
MyNumber = Abs(-50.3) ’ Devuelve 50.3.
MyAngle = 1.3 ' El ángulo debe estar en radianes.
38
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
Tabla 3.6. Funciones auxiliares matemáticas (no las tiene Visual Basic 2010).
4. EVENTOS, PROPIEDADES Y CONTROLES
En este capítulo se pretende
recoger de una manera más
sistemática y general los
eventos y controles más
habituales de Visual Basic
2010. Hay que señalar que en
ningún momento se pretende
abandonar el carácter
introductorio de este manual, y
que Visual Basic 2010 tiene
muchas más posibilidades de las
que aquí se muestran. Por
ejemplo, muchos de los Figura 4.1. Código que gestionará el evento Click sobre
controles y eventos de Visual el control de nombre cmbSalir
Basic 2010 están relacionados
con el acceso a bases de datos. Estos aspectos no se citarán en estos apuntes. Para una
información más detallada se puede acudir a un buen libro de referencia o al Help del
programa.
La programación en Visual Basic 2010 (al menos para ejemplos sencillos) suele proceder
del siguiente modo:
1. Se definen interactivamente sobre el formulario los controles que van a constituir la
aplicación..
39
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
2. Se define para cada control el código con el que se va a responder a cada uno de los
eventos. Para ello basta clicar dos veces sobre el control y se abre una ventana de código
como la mostrada en la Figura 4.1. En ella Visual Basic 2010 ha preparado ya el inicio y
el final de la función con la que se va a responder al evento. El nombre del evento forma
parte del nombre de la función, junto al nombre del control. En el ejemplo del la Figura
4.1 está preparada la función para escribir el código que se ejecutará al producirse el
evento Click sobre el control cmbSalir.
En el resto de este capítulo se verán con un cierto detalle los eventos, controles y
propiedades más habituales en Visual Basic 2010.
4.1 EVENTOS
A continuación, se presentan brevemente los eventos más normales que reconoce Visual
Basic 2010. Es importante tener una visión general de los eventos que existen en
Windows porque cada control de los que se verán más adelante tiene su propio conjunto
de eventos que reconoce, y otros que no reconoce. Cualquier usuario de las aplicaciones
escritas para Windows hace uso continuo e intuitivo de los eventos, pero es posible que
nunca se haya detenido a pensar en ello.
Para saber qué eventos puede recibir un control determinado basta seleccionarlo y pulsar
<F1>. De esta forma se abre una ventana del Help que explica el control y permite
acceder a los eventos que soporta.
4.1.1 Eventos generales
4.1.1.1 Carga y descarga de formularios
Cuando se arranca una aplicación, o más en concreto cuando se visualiza por primera vez
un formulario se producen varios eventos consecutivos: Initialize, Load, Activate y
Paint. Cada uno de Figura 4.1. Código que gestionará el evento Click sobre el control de
nombre cmbSalir. Estos eventos se pueden aprovechar para realizar ciertas operaciones
por medio de la función correspondiente.
Al ocultar, cerrar o eliminar un formulario se producen otra serie de eventos: Deactivate,
QueryUnload, Unload y Terminate que se verán en un próximo ejemplo.
Para inicializar las variables definidas a nivel de módulo se suele utilizar el evento
Initialize, que tiene lugar antes que el Load. El evento Load se activa al cargar un
formulario. Con el formulario principal esto sucede al arrancar la ejecución de un
programa; con el resto de los formularios al mandarlos cargar desde cualquier
procedimiento o al hacer referencia a alguna propiedad o control de un formulario que no
esté cargado. Al descargar un formulario se produce el evento Unload. Si se detiene el
programa desde el botón Stop de Visual Basic 2010 (o del menú correspondiente) o con
un End, no se pasa por el evento Unload. Para pasar por el evento Unload es necesario
cerrar la ventana con el botón de cerrar o llamarlo explícitamente. El evento QueryUnload
se produce antes del evento Unload y permite por ejemplo enviar un mensaje de
confirmación.
El evento Load de un formulario se suele utilizar para ejecutar una función que dé valor
a sus propiedades y a las de los controles que dependen de dicho formulario. No se puede
utilizar para dibujar o imprimir sobre el formulario, pues en el momento en que se produce
este evento el formulario todavía no está disponible para dichas operaciones. Por ejemplo,
si en el formulario debe aparecer la salida del método Print o de los métodos gráficos
Pset, Line y Circle (que se estudian en el Capítulo 6 de este manual) puede utilizarse el
evento Paint u otro posterior (por ejemplo, el evento GotFocus del primer control) pero
no puede utilizarse el evento Load.
Se puede ocultar un formulario sin descargarlo con el método Hide o haciendo la
propiedad Visible = False. Esto hace que el formulario desaparezca de la ventana,
aunque sus variables y propiedades sigan estando accesibles y conservando sus valores.
Para hacer visible un formulario oculto, pero ya cargado se utiliza el método Show, que
equivale a hacer la propiedad Visible = True, y que genera los eventos Activate y Paint.
40
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
Si el formulario no había sido cargado previamente, el método Show genera los cuatro
eventos mencionados.
Cuando un formulario pasa a ser la ventana activa se produce el evento Activate y al
dejar de serlo el evento Desactivate. En el caso de que el formulario que va a ser activo
no estuviera cargado ya, primero sucederían los eventos Initialize, Load y luego los
eventos Activate y Paint.
Todo esto se puede ver y entender con un simple ejemplo, mostrado en la Figura 4.2. Se
han de crear dos formularios (frmPrincipal y frmSecundario). El primero de ellos
contendrá dos botones
(cmdVerSec y cmdSalir)
y el segundo tres
(cmdHide, cmdUnload y
cmdTerminate). El
formulario principal será el
primero que aparece, y
sólo se verá el segundo si
se clica en el botón Cargar
Formulario. Cuando así
se haga, a medida que los
eventos antes
mencionados se vayan Figura 4.2. Resultado del ejemplo de carga de formularios
sucediendo, irán
apareciendo en pantalla unas cajas de mensajes que tendrán como texto el nombre del
evento que se acaba de producir. Según con cual de los tres botones se haga desaparecer
el segundo formulario, al volverlo a ver se producirán unos eventos u otros, según se
puede ver por los mensajes que van apareciendo con cada evento. .
41
ING. ROLANDO BASURCO CARPIO
Es muy interesante realizar este ejemplo y seguir la secuencia de eventos que se producen
al hacer aparecer y desaparecer los formularios.
4.1.1.2 Paint
El evento Paint sucede cuando hay que redibujar un formulario o PictureBox. Esto
sucede cuando esos objetos se hacen visibles por primera vez y también cuando vuelven
a ser visibles después de haber estado tapados por otros, tras haber sido movidos o tras
haber sido modificados de tamaño.
4.1.1.3 El foco (focus)
En todas las aplicaciones de Windows, en cualquiera de sus versiones, siempre hay un
único control, formulario o ventana que puede recibir entradas desde teclado. En cada
momento ese control, ventana o formulario es el que dispone del “foco” (focus). El objeto
que posee el foco está caracterizado por estar resaltado con letra negrita, con un
contorno más vivo o teniendo parpadeando el cursor en él. Este foco puede ser trasladado
de un objeto a otro por código o por interacciones del usuario, como por ejemplo clicando
con el ratón en distintos puntos de la pantalla o pulsando la tecla Tab. Cada vez que un
objeto pierde el foco se produce su evento LostFocus y, posteriormente, el evento
GotFocus del objeto que ha recibido el foco.
El método SetFocus permite dar el focus al objeto al que se aplica. Dos propiedades de
muchos controles relacionadas con el foco son TabIndex y TabStop.
TabStop determina si el foco se va o no a posar en el objeto al pulsar la tecla Tab (si
TabStop está a False no se puede obtener el foco mediante el tabulador) y TabIndex
determina el orden en el que esto va a suceder. Así al cargar un formulario, el foco estará
en aquel objeto cuyo TabIndex sea 0.
Al pulsar la tecla Tab el foco irá al objeto que tenga TabIndex = 1 y así sucesivamente.
Para retroceder en esta lista se pulsa Mayúsculas+Tab. La propiedad TabIndex se
puede determinar en tiempo de diseño por medio de la caja de propiedades de un control,
del modo habitual.
Cuando a un control se le asigna un determinado valor de TabIndex, Visual Basic ajusta
automáticamente los valores de los demás controles (si tiene que desplazarlos hacia arriba
o hacia abajo, lo hace de modo que siempre tengan números consecutivos). Para que un
formulario reciba el foco es necesario que no haya en él ningún control que sea capaz de
recibirlo.
Un grupo de botones de opción tiene un único TabIndex, es decir, se comporta como
si fuera un único control. Para elegir una u otra de las opciones se utilizan las flechas del
teclado (- y ¯).
4.1.1.4 KeyPress, KeyUp y KeyDown
El evento KeyPress sucede cuando el usuario pulsa y suelta determinada tecla. En el
procedimiento asociado con este evento el único argumento KeyAscii es necesario para
conocer cuál es el código ASCII de la tecla pulsada. El evento KeyDown se produce
cuando el usuario pulsa determinada tecla y el evento KeyUp al soltar una tecla.
Los eventos KeyUp y KeyDown tienen un segundo argumento llamado Shift que
permiten determinar si esa tecla se ha pulsado estando pulsadas a la vez cualquier
combinación de las teclas Shift, Alt y Ctrl. En un apartado próximo se explica cómo se
identifican las teclas pulsadas a partir del argumento Shift.
4.1.2 Eventos relacionados con el ratón
4.1.2.1 Click y DblClick
El evento Click se activa cuando el usuario pulsa y suelta rápidamente uno de los botones
del ratón.
También puede activarse desde código (sin tocar el ratón) variando la propiedad Value
de alguno de los controles. En el caso de un formulario este evento se activa cuando el
usuario clica sobre una zona del formulario en la que no haya ningún control o sobre un
42
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
control que en ese momento esté inhabilitado (propiedad Enabled = False). En el caso de
un control, el evento se activa cuando el usuario realiza una de las siguientes operaciones:
· Clicar sobre un control con el botón derecho o izquierdo del ratón. En el caso de un botón
de comando, de un botón de selección o de un botón de opción, el evento sucede
solamente al clicar con el botón izquierdo.
· Seleccionar un registro de alguno de los varios tipos listas desplegables que dispone
Visual Basic.
· Pulsar la barra espaciadora cuando el foco está en un botón de comando, en un botón
de selección o en un botón de opción.
· Pulsar la tecla Return cuando en un formulario hay un botón que tiene su propiedad
Default = True.
· Pulsar la tecla Esc cuando en un formulario hay un botón que tiene su propiedad Cancel
= True.
· Pulsar una combinación de teclas aceleradoras (Alt + otra tecla, como por ejemplo
cuando de despliega el menú File de Word con Alt+F) definidas para activar un
determinado control de un formulario.
También se puede activar el evento Click desde código realizando una de las siguientes
operaciones:
· Hacer que la propiedad Value de un botón de comando valga True.
· Hacer que la propiedad Value de un botón de opción valga True
· Modificar la propiedad Value de un botón de selección.
El evento DblClick sucede al clicar dos veces seguidas sobre un control o formulario con
el botón izquierdo del ratón.
4.1.2.2 MouseDown, MouseUp y MouseMove
El evento MouseDown sucede cuando el usuario pulsa cualquiera de los botones del
ratón, mientras que el evento MouseUp sucede al soltar un botón que había sido pulsado.
El evento MouseMove sucede al mover el ratón sobre un control o formulario.
Los eventos MouseUp y MouseDown tienen algunos argumentos que merecen ser
comentados. El argumento Button indica cuál de los botones del ratón ha sido pulsado o
soltado, y el argumento Shift indica si además alguna de las teclas alt, shift o ctrl está
también pulsada. La lista con todos los posibles valores de estos argumentos se muestra
en la Tabla 4.1:
43
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
44
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
Form 1
Label 1
Text 1
Label 2
Text 2
Label 3
lblCadena
c1 = Text1.Text ´c1 recibe el
Tabla Nº 2 de propiedades del
dato desde Text1 que se ingresa
formulario Form1
por teclado
OBJETO PROPIEDA VALOR
D c2 = Text2.Text
Form 1 (Nombre) Form1 lblCadena.Text = c1 & “ “ & c2 ´
BackColor Light gray
Text Encadena lblCadena.Caption visualiza la
palabras respuesta
TextBo (Nombre) Text1
x1 Alignment 2 – Center End Sub ´& es un
Text (vacío) operador de concatenación de
TextBo (Nombre) Text2
x2 Alignment 2 – Center textos
Text (vacío) Ejercicio 3. Elaborar un formulario que
Label 1 (Nombre) Label 1
Text Ingresa permita ingresar números en dos
palabras: controles Text y mostrar la sumar en un
Label 2 (Nombre) Label2
Caption Ingresa control Label, tal como se muestra en la
otras siguiente figura:
palabras:
Label 3 (Nombre) Label 3 Label 1
Text Expresión
encadenada Text 1
:
Label 4 (Nombre) lblCadena
Text (vacío) Text 2
Alignment 2 – Center
BorderStyle 1 – Label 2
ToolTipText FixedSingle
Haz clic aquí lblSuma
Código del Programa.-Hacer doble clic
en lblCadena y digitar el siguiente Tabla Nº 3 de propiedades del
módulo de programa: formulario Form1
Private Sub lblCadena_Click() OBJETO PROPIEDAD VALOR
45
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
46
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
47
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
Case "Ica" : p = 30
48
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
49
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
Tabla 7.1. Botón clicado por el usuario. Tabla 7.2. Botones mostrados en MsgBox.
Se puede modificar el valor de tiposBotones de modo que el botón que se activa por
defecto cuando se pulsa la tecla Intro (el botón que tiene el focus) sea cualquiera de los
botones de la caja.
Para ello basta sumar a tiposBotones otra constante que puede tomar uno de los tres
valores siguientes: 0 (vbDefaulButton1, que representa el primer botón), 256
(vbDefaulButton2, que representa el segundo botón) y 512 (vbDefaulButton3, que
representa el tercer botón).
Finalmente, se puede incluir en el mensaje un icono ad-hoc por el mismo procedimiento
de sumarle al argumento tiposBotones una nueva constante numérica con los siguientes
valores y significados definidos por la constante simbólica apropiada: 16 (vbCritical), 32
(vbQuestion), 48
(vbExclamation) y 64 (vbInformation). Es obvio que, por los propios valores considerados,
al sumar estas constantes o las anteriores al argumento tiposBotones, la información
original descrita en la Tabla 7.2 no se pierde. La Figura 7.1 muestra un ejemplo de caja
MsgBox resultado de ejecutar el comando siguiente:
lblBox.Caption = MsgBox("Pulse un botón: ", 2 + 256 + 48, _ "Caja de mensajes")
donde el “2” indica que deben aparecer los botones Abort, Retry y Cancel, el “256” indica
que el botón por defecto es el segundo (Retry) y el “48” indica que debe aparecer el icono
de exclamación. Por otra parte, la forma general de la función InputBox es la siguiente:
texto = InputBox("texto para el usuario", "titulo", "default", left, top)
50
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
51
ING. ROLANDO BASURCO CARPIO
VISUAL BASIC 2010
EJEMPLO
1. Programa que dibuja la ecuación y = x2 - 3x + 12 en el dominio -10 <= x <=
10
2. Function FdeX(ByVal x As
Single) As Single
3. FdeX = (x ^ 2) - (x * 3) +
12
4. End Function
5.
6. Sub Form_Paint()
7. Dim x As Single
8. 'Configura la pantalla
9. Cls
10. Scale (-150, 150)-(150, -
150) 'Sistema de
coordenadas cartesianas estándar
11. 'Dibujar los ejes
12. Line (-150, 0)-(150, 0)
13. Line (0, -150)-(0, 150)
14. CurrentX = -10
15. CurrentY = FdeX(-10)
16. For x = -10 To 10
17. Line -(x, FdeX(x)) 'Dibujar la línea desde la última posición conocida
18. Next x
19. End Sub
La Grafica será similar a la siguiente:
52
ING. ROLANDO BASURCO CARPIO
MATLAB
1. Introducción
Este es el aspecto que presenta la versión R2015-A de MatLab, que será la que
utilizaremos este curso:
Ventana de
comandos
Espacio de
Carpeta de Variables
trabajo
Historial de
comandos
Para borrar la ventana de comandos se utiliza la orden clc. Esta acción no borra de la
memoria nada que haya sido creado con anterioridad.
Las órdenes que han sido escritas previamente en un fichero ASCII se van a ejecutar
secuencialmente. Los ficheros que reconoce MatLab reciben el nombre de ficheros m,
debido a que su nombre tiene extensión .m.
Para crear un fichero .m se pincha con el ratón File -> New -> M-File, o bien se pincha el
primer icono de la barra de herramientas . Los dos caminos nos llevan a un editor de
texto en el que se escriben las instrucciones que se quieren ejecutar posteriormente en el
área de trabajo.
53
ING. ROLANDO BASURCO CARPIO
MATLAB 2015
El signo% permite añadir comentarios, MATLAB obviará todo lo que esté escrito a la
derecha de dicho símbolo. Además, si las primeras líneas van precedidas de este símbolo,
MATLAB considerará éstas como la ayuda del fichero, y cuando en el área de trabajo
tecleemos help nombre_fichero nos devolverá este comentario.
Una vez escrito el fichero, nos situamos en la opción File del menú del editor, se elige la
opción Save As y aparece una ventana donde escribiremos el nombre del fichero
nombre_fichero.m. Las reglas para dar nombre a un fichero son las siguientes: el primer
carácter del nombre debe ser una letra, nunca un número, se pueden utilizar letras,
números y el guión de subrayado, nunca signos de puntuación, ni los símbolos que indican
operaciones y nunca pueden contener letras acentuadas ni espacios en blanco.
Para ejecutar un fichero .m se escribe el nombre de dicho fichero sin extensión en el área
de trabajo, y se pulsa enter,
2. Variables
Introducir variables nos ofrece nuevas posibilidades enMATLAB. Las reglas que se utilizan
para nombrar las variables son las siguientes:
➢ MATLAB distingue entre letras mayúsculas y minúsculas. Las variables area, Area,
AREA, arEa son variables distintas.
➢ El nombre de una variable puede contener un máximo de 31 caracteres ignorándose
los posteriores.
➢ El nombre de una variable debe empezar necesariamente por una letra, aunque puede
contener letras números y el guión de subrayado, nunca puede contener operadores
(+,*,...), espacios en blanco ni signos de puntuación.
➢ No deben nombrarse variables con funciones con significado específico enMATLAB, por
ejemplo, cos=3 construye una variable cos cuyo valor es 3, y a partir de este momento
no podríamos calcular el coseno de un ángulo hasta que no borrásemos la variable
cos.
Ejemplo 2 Si queremos calcular el espacio recorrido por un móvil en movimiento rectilíneo
y uniforme de velocidad v0 = 5 m/s, para distintos tiempos, es necesario actualizar la
variable espacio para cada valor del tiempo:
>> v0=5, t=1, s=v0*t
>> t=3 %Cambiamos el valor de t
>> s %s no se ha actualizado
>> s=v0*t %actualización de s
Obsérvese, por un lado, que en la primera línea se han definido tres variables, sin más
que separarlas por comas y, por otro, que hasta que no se actualice la definición de la
variable s su valor no cambia.
2.1. Información sobre las variables
Para obtener información sobre las variables definidas en una sesión de trabajo se utilizan
las órdenes who y whos.
La primera muestra las variables que tienen valores asignados, la segunda nos da además
información sobre el tamaño y el tipo de dato.
>> who
>> whos
Puede observarse que MATLAB utiliza los escalares como matrices 1×1.
2.2. Cómo borrar variables
La orden clear all borra de la memoria todas las variables definidas hasta el momento; si
a la orden clear se le añade una lista de variables (separadas por espacios en blanco) sólo
se borrarán las variables de la lista.
>> clear t
54
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
>> s=v0*t
>> who
Como la variable t ha desaparecido MATLAB da un mensaje de error al recalcular s.
2.3. Algunas variables predefinidas en MATLAB
Algunas variables ya están definidas en MATLAB:
NaN (Not a Number) representa una expresión indeterminada, como puede verse en el
siguiente ejemplo:
>> (2-2)/(3-3)
3. Trabajando con matrices
Como ya se ha comentado, el tipo básico de dato con el que MATLAB trabaja es la matriz,
incluso los escalares son considerados como matrices 1×1, por lo que es esencial
familiarizarse con esta sección.
3.1. Vectores
Los vectores se introducen escribiendo cada una de sus coordenadas entre corchetes,
separadas por un espacio en blanco:
>> v=[1 3 pi 1/3]
o bien separadas por comas:
>> v=[1,3,pi,1/3]
No obstante, existen otras formas de introducir vectores, cuando sus coordenadas guardan
alguna relación entre sí:
>> v=[1:0.3:2]
>> v=(1:-0.4:-0.8)
Si se omite el incremento h MATLAB toma por defecto h=1
>> v=1:4
En la orden linspace el tercer argumento es opcional, y si no se introduce toma el valor
100:
>> v=linspace(0,10)
Ejemplo 3 Supongamos ahora que en el ejemplo 2 queremos calcular los espacios
recorridos por el móvil a velocidad v0 = 5 m/s, para 5 instantes correspondientes a los 2
primeros segundos del movimiento:
>> t=linspace(0,2,5)
>> v0=5
>> s=v0*t
Obsérvese que, como cabía esperar, el resultado del producto de un escalar por un vector
es el vector de las posiciones
en los instantes correspondientes.
55
ING. ROLANDO BASURCO CARPIO
MATLAB 2015
Si nos interesa conocer las posiciones en instantes de tiempo separados por 0.3 segundos
>> t=[0:0.3:2]
>> s=v0*t
3.2. Matrices
Los elementos de una matriz se introducen entre corchetes. Las filas separadas mediante
un punto y coma (;) y los elementos separados por espacios en blanco o comas.
>> A=[1 2 3; 3,1,2;1 1 0]
Una vez definida una matriz o un vector, se puede acceder a sus elementos o submatrices
con las órdenes:
Or den Salida
v(i) Coordenada i del vector v
v(end) Ultima coordenada del vector v
A(I,j) Elemento de la inatriz A que ocupa la posicion i j
A(:j) Colurnna j de la inatriz A
A(i.:) Fila 1 de la inatriz A
A(v,w) Subrnatriz de A que contiene las filas indicadas en las coordenadas de x y
las columnas Iindicadas en w
A(i,:)=[ ] Elimina la fila i de la matriz A
A(:,j)=[ ] Elnnina la colurnna j de la matriz A
A(:.end) Ultima colurnna de la matriz A
Haciendo uso de estas órdenes pueden introducirse matrices y vectores elemento a
elemento. Al asignarle un valor a una posición, se construye la matriz o vector de menor
tamaño que contiene los elementos introducidos y hace ceros los no asignados.
>> B(5)=3
>> B(2,4)=5
O bien se puede utilizar para modificar posiciones de una matriz predefinida:
>> A=[1 2 3; 4 5 6]
>> A(1,2)=5
También puede eliminarse filas y columnas de matrices dadas.
>> A=[1 2 3 4 1; 3,1,2 0 2;1 1 0 1 3]
>> A(3,4)=100, A(2,5)=200
>> B=A
>> B(:,2)=[]
La matriz B coincide con la matriz obtenida de eliminar la columna 2 de A.
Pueden definirse ciertas matrices con las siguientes órdenes:
Orden Salida
ones(n) Matriz cuadrada n x n de unos.
ones(m,n) Matriz m x n de unos.
zeros(n) Matriz cuadrada n x n de ceros.
zeros{m,n} Matriz m x n de ceros.
eye(n) Matriz identidadnxn
eye (m, n) Matriz m x n con unos en la diagonal principal y el resto
ceros.
3.3. Definición de matrices por bloques
56
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
Dadas dos matrices A y B con el mismo número de filas, se puede definir una matrizC
formada por todas las columnas de A y de B:
>> A=zeros(3)
>> B=eye(3,2)
>> C=[A B]
Análogamente, se puede definir una matriz a partir de otras dos con el mismo número de
columnas:
>> A=eye(2,3)
>> B=ones(3)
>> C=[A;B]
Estas dos posibilidades pueden combinarse para formar matrices definidas por bloques:
>> A=[eye(3) ones(3,3);1:6;zeros(2) ones(2,1) eye(2,3)]
3.4. Operaciones con vectores y matrices
Si A y B son matrices con las dimensiones adecuadas y l es un escalar, las operaciones
habituales se efectúan con las siguientes órdenes:
Operacion Resultado
A+B Suina Ay B
A-B Resta B de A
A*B Multiplica A por B
A/B Calcula AB_1
A\B Calcula A_1B
A*A Multiplica todos los elenientos de A por A
A^n Eleva la matriz. A al entero n
A. ' Calcula la Traspuesta de A
A' Calcula la traspuesfa de la conjugada de A
Además de las operaciones mencionadas, en MATLAB se definen otras operaciones a las
que llamaremos operaciones elemento a elemento:
Operation Resoltado
+A Suma a cada elemento de A el escalar
A.*B Calcula una malriz que en la posicion (i,j) contiene el producto ajjbjj
de los elenientos que en A y B ocupan die ha posicion
A./B Calcula una malriz que en la posicion {i.j) contiene el cociente aij/bij
de los elementos que en A y B ocupan dicha posicion
A.^n Eleva cada elemento de la niatriz A al entero n
A.^B Calcula una niatriz que en la posicion (i.j) contiene aij bij
En MATLAB hay una colección de funciones que pueden utilizarse para obtener información
y realizar cálculos. Por ejemplo, si se escribe
» A=eye(3,2)
se obtiene una matriz de tres filas y dos columnas con unos en la diagonal principal y
ceros en el resto. El nombre de la función es eye, los argumentos de entrada son 3 y 2,
la matriz resultante, que tiene por nombre A, es la salida.
Las siguientes funciones permiten obtener información sobre las matrices o vectores que
tienen como argumentos de entrada
57
ING. ROLANDO BASURCO CARPIO
MATLAB 2015
58
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
1 2 5
2 1 -1
3 0 -3
>> p=poly(A,lambda)
p =
lambda^3 + lambda^2 - 24*lambda + 12
Obviamente, las funciones matemáticas habituales también están predefinidas en
MATLAB, con la única particularidad de que actúan sobre vectores o matrices elemento a
elemento.
En MATLAB, por defecto, las letras i ó j representan la unidad imaginaria. Obsérvese cómo
se introduce el complejo 1+i
» z=1+i
» z=1+j
Las operaciones con complejos se realizan igual que con números reales:
Solución
» (3+5i)*(4-i)
» (3-i)/(4+5i)
Cuando la parte imaginaria del complejo se involucra alguna función u operación, debe
escribirse * entre la parte imaginaria y la unidad imaginaria:
>> (1+sqrt(3)i)^3 %Devuelve un mensaje de error
>> (1+sqrt(3)*i)^3
>> 1+(1-1/3)i %Devuelve un mensaje de error
>> 1+(1-1/3)*i
Otras funciones útiles para operar con complejos son las siguientes:
59
ING. ROLANDO BASURCO CARPIO
MATLAB 2015
Si las funciones anteriores trabajan sobre una matriz, devuelven otra matriz del mismo
tipo que es el resultado de evaluar la función al actuar sobre el elemento.
Todas estas funciones, excepto angle, pueden actuar tanto sobre variables simbólicas
como numéricas.
5. Programando bucles y condicionales
5.1. Operadores relacionales
A menudo, según sean los datos que se utilizan, es necesario tomar una decisión sobre
las órdenes a ejecutar, por lo que resultan de gran utilidad los operadores y bucles que se
mencionan a continuación.
MATLAB utiliza los operadores relacionales que se describen en la tabla adjunta:
60
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
z=3-i;
if (imag(z)==0)&(real(z)==0)
imagen=0;
elseif real(z)*imag(z)<0
imagen=imag(z)+real(z)*i;
elseif (real(z)==0)&(imag(z)<0)
imagen=1;
elseif real(z)*imag(z)>0
imagen=imag(z)-real(z)*i;
elseif (real(z)==0)&(imag(z)>0)
imagen=imag(z);
end
imagen
5.3. La estructura for-end
Hasta ahora las órdenes se ejecutaban de forma secuencial, pero pueden existir procesos
en los que un conjunto de órdenes se deba ejecutar varias veces, para ello existen los
bucles for-end. La sintaxis es la siguiente:
for k=x
61
ING. ROLANDO BASURCO CARPIO
MATLAB 2015
conjunto de órdenes
end
donde k es una variable y x es un vector.
Al llegar el programa a la orden for la variable k toma como valor la primera coordenada
del vector x y se ejecuta el conjunto de órdenes. A continuación, k toma como valor la
segunda coordenada de x y se vuelve a ejecutar conjunto de órdenes. El bucle se repite
tantas veces como coordenadas tenga x. Cuando k ha recorrido todas las posiciones de x
el programa seguirá con las órdenes posteriores a end. En el caso de que x sea una matriz,
la variable k tomará como valor las distintas columnas de x.
Por ejemplo, si queremos calcular el valor de k 2, cuando k = 4,5,6, escibiríamos:
>> for k=[4,5,6]
k^2
end
la salida sería
ans =
16
ans =
25
ans =
36
5.4. Bucles while-end
Su sintaxis es la siguiente:
while expresión lógica
conjunto de órdenes
end
Hacen que un conjunto de órdenes se ejecute mientras una expresión lógica sea
verdadera.
Por ejemplo, si escribimos en un fichero:
x=1
while x<=11
x=2*x
end
Al ejecutarlo la salida obtenida es
x =
1
x =
2
x =
4
x =
8
x =
16
Cuando x = 16 ya no se verifica la condición y el bucle termina.
6. Ficheros function
Dentro de la organización de un programa es muy común la realización de tareas que
pueden servir para diferentes programas o simplemente la separación en etapas del
62
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
63
ING. ROLANDO BASURCO CARPIO
MATLAB 2015
Si se utiliza la instrucción syms para declarar variables, estas se introducen con un espacio
en blanco entre ellas.
Por ejemplo, syms s t declara simbólicas las variables s y t . Si al finalizar la lista se escribe
real, MatLab considerará que estas variables no tienen parte imaginaria, en caso contrario
se presuponen complejas.
Pueden crearse objetos simbólicos y aplicar las funciones habituales:
» syms x y real %crea las variables simbólicas reales x e y.
» f=(x+i*y)^3 %crea la variable simbólica f.
» u=imag(f)
» v=real(f)
En la instrucción anterior las variables x e y tienen el sentido de variables independientes
habitual en matemáticas.
La variable f sería la variable dependiente, y, como puede observarse, no es necesario
declararla.
Con el comando sym se pueden obtener constantes simbólicas:
» x=sym(pi)
y también puede aplicarse a matrices, en cuyo caso trabaja elemento a elemento:
» A=sym([1 2/3;pi sqrt(2)])
7.2. Cómo borrar variables simbólicas
La orden clear, utilizada sobre variables simbólicas, presenta algunas limitaciones. Por
ejemplo, si la variable está declarada como simbólica real, al borrarla con clear, queda en
memoria su carácter real. Veamos un ejemplo:
>> syms x real
>> imag(x)%Será 0 por ser real
ans =
0
>> clear x
>> x % Aparentemente borrada
??? Undefined function or variable ’x’
>> syms x
>> imag(x) % vemos que es 0, luego sigue siendo real
ans =
0
Para borrar el carácter real de una lista de variables escribiremos syms lista clear. Por
ejemplo
>> syms x y real
64
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
65
ING. ROLANDO BASURCO CARPIO
MATLAB 2015
Conviene señalar que diff puede actuar sobre una matriz. También hay un operador diff
que actúa sobre variables numéricas (obviamente no calcula la derivada).
7.5. Manipulación de expresiones simbólicas
En una expresión simbólica f se pueden realizar, entre otras, las siguientes
transformaciones:
8. Solución de ecuaciones
En esta sección vamos a resolver ecuaciones simbólicas mediante la función solve.
Mediante esta instrucción MATLAB obtiene soluciones de ecuaciones. MATLAB busca
soluciones en el campo de los números complejos y cuando no puede obtener soluciones
simbólicas intenta obtener soluciones numéricas.
66
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
La instrucción
» syms z
» p=z^3+z^2-4*z+6
» sol=solve(p)
nos da las soluciones de la ecuación. La solución es un vector de tres componentes que
hemos guardado con el nombre sol.
La orden solve no siempre da todas las soluciones como puede comprobarse si se escribe
» sol=solve(’sin(x)’)
Sólo devuelve sol = 0 .
Ejemplo 12 Hallar la solución general de la ecuación az4 +bz2+c = 0.
» sol=solve(’a*z^4+b*z^2+c’,’z’)
En el comando solve podemos especificar cual es la variable que deseamos despejar, en
el caso de que haya varias. Así, en la ecuación del ejemplo anterior podemos despejar la
b escribiendo
» sol=solve(’a*z^4+b*z^2+c’,’b’)
También podemos resolver un sistema de ecuaciones.
Ejemplo 13 Hallar las soluciones del sistema −90z+12w+45z2+6z2w
−12zw+z2w2−2zw2+2w2 = −90, w2−2w= −5.
MATLAB almacena la solución del sistema en una estructura de datos:
» sol=solve(’90-90*z+12*w+45*z^2+6*z^2*w-12*z*w+z^2*w^2
-2*z*w^2+2*w^2’,’w^2-2*w+5’)
Para obtener los valores de la soluclón escribimos:
» sol.w,sol.z
En el caso de que en el sistema aparezcan más variables que ecuaciones también podemos
elegir qué variables deseamos despejar.
Ejemplo 14 En el sistema ax+by= 0, bx−ay+1= 0, despejar las variables a y x en función
de las variables y y b.
>> syms a x b y real
>> ec1=a*x+b*y
ec1 =
a*x+b*y
>> ec2=b*x-a*y+1
ec2 =
b*x-a*y+1
>> S=solve(ec1,ec2,’a’,’x’)
S =
a: [2x1 sym]
x: [2x1 sym]
>> solucion=[S.a S.x]
solucion =
[ (1/2+1/2*(1-4*b^2*y^2)^(1/2))/y, 1/2/b*(-1+(1-4*b^2*y^2)^(1/2))]
[ (1/2-1/2*(1-4*b^2*y^2)^(1/2))/y, -1/2*(1+(1-4*b^2*y^2)^(1/2))/b]
9. Resolución de ecuaciones y sistemas de ecuaciones diferenciales
9.1. Resolución de ecuaciones diferenciales
Una ecuación diferencial la escribiremos siempre entre comillas simples. En MATLAB, y′ se
representa por Dy, y′′ se representa por D2y, y′′′ por D3y, etc.
67
ING. ROLANDO BASURCO CARPIO
MATLAB 2015
68
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
v =
-sin(2*x)*exp(x)
También en este caso, si se omite la variable, el programa interpreta que se trabaja con
variable independiente t.
10. Funciones de tipo numérico
10.1. Funciones anónimas
Además de definirlas por medio de un archivo, como ya se ha visto, las funciones de tipo
numérico pueden construirse directamente en la ventana de comandos utilizando las
funciones anónimas.
r =
69
ING. ROLANDO BASURCO CARPIO
MATLAB 2015
4.0000
3.0000
2.0000
p =
2.0000
-1.0000
1.0000
k =
1
lo que significa que
La mayor parte de los comandos que se utilizan para construir gráficos llevan implícita la
orden de abrir una ventana gráfica, no obstante, existen instrucciones que permiten abrir
(o cerrar) las ventanas gráficas antes de construir los gráficos.
Además, se pueden mantener abiertas varias ventanas gráficas a la vez, una de ellas es
la que llamaremos ventana activa, que será la última ventana gráfica abierta, aunque esto
puede modificarse a partir de ciertas órdenes o simplemente, pinchando con el ratón en
la que queremos que sea la activa. Todas las instrucciones gráficas serán enviadas a la
que en ese momento es la ventana activa. Las instrucciones básicas son las siguientes:
70
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
71
ING. ROLANDO BASURCO CARPIO
MATLAB 2015
defecto), con trazo continuo (uniendo los puntos por una poligonal) y sin marcas. La
gráfica obtenida es:
La gráfica aparece en un rectángulo blanco que en el lenguaje de MATLAB se llama ‘eje’.
Una figura puede tener varios ejes, al último eje utilizado es al que llamaremos eje activo.
Se pueden modificar los ejes a partir de las siguientes funciones:
72
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
Ejemplo 22 Dibujar en la misma ventana gráfica el triángulo T cuyos vértices son los del
ejemplo 21 en azul, en rojo el triángulo girado en torno al 0 un ángulo de /2, en verde el
homotético de T de centro 0 y razón 1.5, y en negro su trasladado por el vector (0,−1).
» z=[z 0];
» plot(z)
» hold on
» plot(i*z,’r’)
» plot(1.5*z,’g’)
» plot(z-i,’k’)
Otras utilidades gráficas pueden ser las que nos permiten dividir la pantalla en varias
subventanas, esto se realiza con la siguiente instrucción:
La forma de activar uno de los ejes generados en la ventana es con la orden subplot. n es
el número de filas en que se divide la pantalla, m es el número de columnas, y k se refiere
al eje sobre el que se va a enviar la gráfica, numera por orden los ejes de izquierda a
derecha y de arriba abajo. Obsérvese la numeración en la gráfica siguiente:
Las gráficas de los distintos ejes pueden
ser de distinto tipo:
Ejemplo 23 Dibujar en dos subventanas
de la misma ventana gráfica el complejo z
= 1+i con la instrucción compass y con la
instrucción quiver.
Creamos un fichero m con las
instrucciones siguientes:
z=1+i
subplot(1,2,1)
compass(z)
subplot(1,2,2)
quiver(0,0,1,1,0)
axis equal
73
ING. ROLANDO BASURCO CARPIO
MATLAB 2015
74
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
Los puntos donde MATLAB dibuja la función de forma exacta son los f (Ui j ,Vi j) para cada
i = 1, . . . ,m y para cada j = 1, . . . ,n, y a dichos puntos les llamaremos nudos de la
malla.
La forma habitual de proceder es la siguiente:
➢ Se definen los vectores u=linspace(a,b,n) y v=linspace(c,d,m).
➢ Se generan las matrices [U,V]=meshgrid(u,v)
➢ Se definen las matrices X=x(U,V), Y=y(U,V), Z=z(U,V), siempre teniendo en cuenta
que las operaciones que se realicen con U y V deben realizarse elemento a elemento.
Una vez generadas las matrices de coordenadas de los puntos de la malla existen distintos
tipos de gráficos que se pueden realizar, con distintos aspectos.
Gráficos de malla La superficie se representa mediante una malla, con un aspecto similar
al de una red de pesca, cuyos nudos están situados sobre la superficie correspondiente.
La orden básica para este tipo de gráficos es mesh y sus distintas opciones:
Para observar la diferencia entre los distintos gráficos, ejecuta en el área de trabajo el
fichero ej_mesh.
Gráficos continuos En este tipo de gráficos, la superficie se representa como una lámina
continua, y se genera con las siguientes órdenes:
75
ING. ROLANDO BASURCO CARPIO
MATLAB 2015
• Proporciona al
usuario la habilidad
de usar un
programa sin tener
que preocuparse
sobre los comandos
para ejecutar un
programa.
• Los componentes
habituales de una
GUI son
➢ Pushbuttons
➢ Sliders
➢ List boxes
➢ Menus, ...etc
12.2. Características esenciales de una GUI
➢ Componentes
o Gráficos
▪ pushbuttons, edit boxes, sliders, labels, menus, etc…
o Estáticos
▪ Frames, text strings, …
o Ambos se crean usando la funcion uicontrol
➢ Figuras – los componentes están contenidos en figuras
➢ Callbacks – son funciones que realizan las acciones requeridas cuando un
componente se activa
12.3. Creación de GUIs con GUIDE
MATLAB dispone
de una utilidad
para el desarrollo
interactivo de
interfaces de
usuario (GUI)
llamado GUIDE
Para ello se
escribe el
comando guide o
se pulsa sobre su
icono en el
entorno de
desarrollo Matlab.
12.4. Entorno de desarrollo
GUIDE
Aparece una ventana para seleccionar
plantillas o abrir GUIs existentes
Ventana de desarrollo GUI
76
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
77
ING. ROLANDO BASURCO CARPIO
MATLAB 2015
Se puede redimensionar
el tamaño del canvas de
la interfaz en modo
diseño, aunque después
se puede modificar
haciendo uso de Tools.
Se inserta un Push
Button y por duplicación
dos más, dentro de un
Panel
Alineamiento de objetos
y Modificación de
propiedades con Property Inspector
➢ Modificación de propiedades con Property Inspector:
– Figure, Name: GUI Simple
– Panel , Title: Tipos de gráficos
– Push Button, String: Surf, Tag: surf_pb
– Push Button, String: Mesh, Tag: mesh_pb
– Push Button, String: Contour, Tag: contour_pb
– Static Text, String: Seleccionar datos
– Pop-up Menu, String: (editor) peaks, membrane, sinc Tag: plot_popup
➢ Grabar GUI. File - Save As: ejm_gui (sufijo .fig)
78
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
79
ING. ROLANDO BASURCO CARPIO
MATLAB 2015
80
ING. ROLANDO BASURCO CARPIO
COMPUTACIÓN APLICADA A LA INGENIERÍA QUÍMICA
• Se activa la GUI
81
ING. ROLANDO BASURCO CARPIO