Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

3 TerceraClaseVB

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 24

Visual Basic 2008

Matrices y Procedimientos
Entornos de Computacin Estadstica Mster en Estadstica Aplicada

Matrices o arrays en Visual Basic


Conjunto de elementos, todos del mismo tipo, que comparten un nombre comn, a los que se puede acceder por la posicin que ocupa cada uno de ellos dentro de la matriz. Cada elemento es una variable numrica o una cadena de caracteres. Se pueden definir matrices de una o ms dimensiones (hasta 60).

Matrices estticas y Matrices dinmicas


Matrices estticas cuya dimensin es siempre la misma. Matrices dinmicas cuya dimensin se puede modificar durante la ejecucin del programa.

Matrices estticas
Declaracin de un matriz esttica: se trata de especificar el nombre, las dimensiones y el tipo de datos que almacenar. Sentencia de declaracin: {Dim|Private|Public|} NombreArray (dimensiones) As tipo dimensiones: lista de expresiones numricas separadas por comas definiendo las dimensiones de la matriz (por defecto el lmite inferior de cada dimensin es 0. Ejemplos:
Dim MiVector(0 To 59) As String Dim MiVector(59) As String define un vector con 60 elementos de tipo carcter cada uno de los cuales se referencia como: MiVector(0), MiVector(1),...,, MiVector(59) Dim X(100,5) As Double define una matriz bidimensional con 101 filas y 6 columnas de valores reales referenciados por X(0,0), X(0,1),...,X(100,5)

Asignacin de valores a una matriz esttica


Para asignar valores a una matriz previamente declarada resultar conveniente utilizar una estructura tipo bucle como se muestra en el siguiente ejemplo:
Dim MatrizX(100, 5) As Double Dim i,j As Integer, Mensaje As String For i = 0 to 100 For j = 0 to 5 Mensaje =Teclee el elemento en posicin( & i & , MatrizX(i,j) = InputBox(Mensaje) Next j Next i

& j & )

Va recorriendo todos los elementos en posiciones : (0,0),(0,1),,(0,5),(1,0) ,,(1,5),,(5,5)

Matrices dinmicas
Cuando no se conocen las dimensiones de la matriz antes de ejecutar la aplicacin se utilizan matrices dinmicas. Una matriz dinmica puede ser redimensionada en cualquier momento durante la ejecucin de la aplicacin. Declaracin de un matriz dinmica: {Dim|Private|Public|} NombreArray () As tipo . Redim NombreArray(dimensiones) Ejemplos: Dim X(,) As Integer declara una matriz bidimensional dinmica Dim f As Integer, c As Integer tiene la matriz: ) f = ImputBox(Cuntas filas tiene la matriz: ) c = ImputBox(Cuntas columnas ReDim X(f-1,c-1) se definen f filas y c columnas

Sentencias Preserve, Erase y la funcin UBound


Cada vez que se ejecuta la sentencia ReDim, todos los valores almacenados en la matriz dinmica se pierden. Cuando interese cambiar el tamao de una matriz conservando sus valores, hay que ejecutar ReDim con la palabra clave Preserve. Ejemplo: Dim X(,) As Integer declara una matriz bidimensional dinmica ... ReDim X(f-1,c-1) ... ReDim Preserve X(f-1, UBound(X, 2) + 2) Incrementara en dos las columnas de X, pero conservando los valores que tuviera almacenados Erase X La funcin UBound devuelve el lmite superior de la dimensin indicada. La sentencia Erase permite borrar una matriz. Si es esttica asigna valor 0 a todos sus elementos y si es dinmica borra su contenido y elimina el espacio que est ocupando en memoria en ese momento.

Puesta en prctica: aplicacin VB3.1


Construir una aplicacin que pida al usuario las dimensiones de una matriz bidimensional, as como sus elementos (de tipo numrico) y ofrezca como resultado las medias de las columnas.

Puesta en prctica: aplicacin VB3.1


Diseo del interfaz
1. Crear proyecto: Aplicacin de Windows Forms 2. Ajustar el tamao del formulario por defecto 3. Dibujar los controles sobre el formulario

Puesta en prctica: aplicacin VB3.1


Cdigo de la aplicacin
Necesidades relativas a la programacin: Finalizar la ejecucin al hacer click sobre el botn SALIR. Pedir los datos de la matriz y calcular y mostrar los resultados de las medias por columnas al hacer click sobre el botn DATOS. Las variables: matriz de datos, dimensiones de la matriz y vector de medias resultantes las declaramos a nivel de formulario.

Seccin de declaraciones del formulario (variables de mbito mdulo) Dim X(,) As Double 'X es un array dinmico a nivel de formulario con dos columnas Dim medias() As Double 'vector dinmico para las medias Dim Fil, Col As Integer 'variables para almacenar las dimensiones del array X Procedimiento conducido por el suceso click del control BotonSalir Private Sub BotonSalir_Click(...) Handles BotonSalir.Click End End Sub

Puesta en prctica: aplicacin VB3.1


Cdigo de la aplicacin
Private Sub BotonDatos_Click(...) Handles BotonDatos.Click Dim i, j As Integer, Mensaje As String Explica.Text = "Tendr que especificar el nmero de filas y de columnas" Fil = InputBox("Introduzca el nmero de filas", _ "Dimensiones de la matriz") Col = InputBox("Introduzca el nmero de columnas", _ "Dimensiones de la matriz") 'las dimensiones de la matriz empiezan a contar desde 0 redimensionamos la matriz X hasta Fil-1 y Col-1 ReDim X(Fil-1, Col-1) Explica.Text = "Ahora se le piden los elementos de la matriz" 'Pide los elementos de la matriz X usando ImputBox For i = 0 To Fil-1 For j = 0 To Col-1 Mensaje = "Introduzca X(" & i & "," & j & ")" X(i, j) = InputBox(Mensaje, "Elementos de la matriz") Next j Next i contina...

Puesta en prctica: aplicacin VB3.1


Cdigo de la aplicacin
continuacin del procedimiento...

'Redimensionamos medias para guardar las medias ReDim medias(Col-1) For j = 0 To Col-1 For i = 0 To Fil-1 medias(j) = medias(j) + X(i, j) / Fil Next i Next j 'Se imprimen los resultados en el control Resultado Etiqueta2.Visible = True Resultado.Visible = True For j = 0 To Col-1 Resultado.Text = Resultado.Text & vbCrLf & medias(j) 'vbCrLf es un salto de lnea Next j se vuelve a mostrar el mensaje inicial de la etiqueta Explica.Text = "Este programa calcula las medias por columnas de una matriz de datos. Para introducir los datos pulse en el botn DATOS" End Sub

Procedimientos en Visual Basic


La programacin de una aplicacin se puede simplificar descomponindola en unidades ms pequeas, los procedimientos. Los procedimientos son tiles cuando en una aplicacin hay tareas repetitivas o compartidas. En Visual Basic hay varios tipos de procedimientos: Los procedimientos Sub. Permiten ejecutar una serie de sentencias, sin necesidad de devolver ningn valor. Puede sin embargo, dar resultados modificando los argumentos que le son pasados al procedimiento. Los procedimientos Function que devuelven un valor. Los procedimientos (Sub o Function) los dividimos en intrsecos (predefinidos en Visual Basic) y los definidos por el propio usuario. En este tema estudiamos la sintaxis y finalidad de algunos intrsecos (funciones Len, Rnd, Str, Val, etc.) y estudiamos cmo definir procedimientos propios del usuario. Los procedimientos se definen en un mbito (similar al de las variables).

Funcin Rnd y sentencia Randomize


La funcin Rnd devuelve un nmero azar entre 0 y 1. Su sintaxis es: variable = Rnd( [expresin] ) donde expresin es una expresin numrica de la que depende el nmero generado. Para variar esta secuencia, se utilizar la sentencia Randomize que permite activar el generador de nmeros aleatorios a partir de un nmero determinado. Su sintaxis es: Randomize( [n] )

donde n es una expresin entera (opcional) para activar una secuencia aleatoria determinada. Ejemplo: ReDim vector(m - 1) Randomize() For i = 0 To m - 1 vector(i) = Rnd() Next i

Funciones definidas por el usuario: Function


Sintaxis para definir una funcin: [Public|Private][Static] Function nombre([Lista_parmetros]) [As tipo] [sentencias] (se puede incluir Exit Function) nombre = expresin sentencia final End Function Private o Public define el mbito donde se reconocer el procedimiento, Static especifica que todas las variables dentro de la funcin permanecen constantes de una llamada de la funcin a otra. nombre es el nombre de la funcin y acta como una variable dentro del cuerpo de la funcin; tipo ser uno de los tipos de variable habituales (Integer, Long, Single, Double, String etc.) que define el valor de retorno de la funcin; Lista_parmetros son los argumentos que se pasan a la funcin. La ltima sentencia debe ser la de asignacin del valor devuelto por la funcin: nombre = expresin La llamada a la funcin se har escribiendo: variable = nombre (argumentos)

Creacin de una funcin a nivel de formulario


Como ejemplo vamos a crear una funcin que calcule la suma de los elementos de un vector (de tipo numrico Double). La funcin se define a nivel de un formulario usando la palabra Public y se le da el nombre Sumar y se especifica un slo parmetroargumento que llamamos Vector() y que ser el vector de datos numricos del que calcularemos la suma. Para ello escribiremos el cuerpo de la funcin:

Llamada a la funcin desde el cdigo


La llamada a la funcin podra ser, por ejemplo: (Seccin de declaraciones del formulario) Dim MiVector() As Double vector dinmico Private Sub Boton_Click(...) Handles Boton.Click Procedimiento conducido por el suceso Click de Boton Dim n As Integer, i As Integer Dim Resultado As Double n = InputBox(Introduce la dimensin del vector:) Redim MiVector(n-1) dimensionamos el vector dinmico El vector contiene los dgitos 1,2,,n For i = 0 To n-1 MiVector(i) = i + 1 asignamos valores al vector Next i Resultado = Sumar(MiVector) llamada a la funcin Caja_resultado.Text = Resultado impresin de resultados End Sub

Procedimientos tipo Sub


Sintaxis para definir un procedimiento: [Private|Public] [Static] Sub nombre [ (lista_argumentos) ] [sentencias] [Exit Sub] [sentencias] End Sub Si se desea especificar como argumento una matriz completa en un procedimientos se escribir en la lista el nombre de la matriz seguida de parntesis, esto es, nombre_de_matriz(). La llamada a un procedimiento puede hacerse de alguna de las dos formas siguientes: Call nombre [ (lista_argumentos) ] nombre [lista_argumentos]

Creacin de un procedimiento a nivel de formulario


Como ejemplo vamos a crear un procedimiento que calcula los mnimos de las columnas de una matriz.

Se define con cuatro parmetros-argumentos: Matriz(,) que es una matriz bidimensional de datos numricos, Nfilas y Ncolumnas especifica las dimensiones de la matriz; Min() es un vector unidimensional en el que se dar como resultado los mnimos calculados dentro del procedimiento

Llamada al procedimiento desde el cdigo


La llamada al procedimiento anterior podra ser, por ejemplo: (Seccin de declaraciones del formulario) Dim X(,), MinX() As Double Dim Filas, Columnas As Integer Private Sub Form1_Load(...) Handles MyBase.Load 'Procedimiento conducido por el suceso Load del formulario Filas = InputBox("Cuntas filas tiene la matriz?:") Columnas = InputBox("Cuntas columnas tiene la matriz?:") ReDim X(Filas - 1, Columnas - 1) ReDim MinX(Columnas - 1) 'La matriz X se crea con nmeros aleatorios Randomize() For i = 0 To Filas - 1 For j = 0 To Columnas - 1 X(i, j) = Rnd() Next j Next i Call Minimo(X, Filas, Columnas, MinX) se puede omitir Call ... End Sub

Puesta en prctica: aplicacin VB4.1


Realizar una aplicacin en Visual Basic que incluya una funcin (procedimiento Function) para realizar la suma de las n primeras posiciones de un vector. Para ello se le ofrecern al usuario dos posibilidades: definir el vector introduciendo, durante la ejecucin de la aplicacin, sus elementos; o bien que la propia aplicacin genere un vector de nmeros aleatorios (para ello se crear un procedimiento de tipo Sub).

Puesta en prctica: aplicacin VB4.1


Cdigo de la aplicacin
Necesidades relativas a la programacin: Crear los procedimientos para sumar (Function) y para generar un vector de nmeros aleatorios (Sub) Asociar al suceso click de los botones Definir y Generar la ejecucin de las acciones correspondientes

Funcin Suma Public Function Suma(ByVal X() As Double, ByVal n As Integer) As Double Tiene dos argumentos: el vector de datos, X, y el nmero de elementos a sumar en dicho vector, n Dim i As Integer, s As Double For i = 0 To n - 1 s = s + X(i) Next i Suma = s End Function

Puesta en prctica: aplicacin VB4.1


Cdigo de la aplicacin

Procedimiento Aleatorio para generar el vector de nmeros aleatorios Public Sub Aleatorio(ByVal m As Integer, ByRef vector() As Double) Dos argumentos: la dimensin del vector, m, y el propio vector, vector(), que hay que pasarlo ByRef (por referencia) para que pueda ser modificado Dim i As Integer ReDim vector(m - 1) Randomize() For i = 0 To m - 1 vector(i) = Rnd() Next i End Sub

Puesta en prctica: aplicacin VB4.1


Cdigo de la aplicacin
Seccin de declaraciones del formulario (variables de mbito mdulo) Public X() As Double 'El vector que se suma Public Dimension As Integer 'nmero de elementos del vector Public n As Integer 'Nmero de elementos a sumar Procedimiento conducido por el suceso click del botn Definir Private Sub Definir_Click(...) Handles Definir.Click Dim i As Integer, Resultado As Double Dimension = InputBox("Introduce la dimensin del vector:") ReDim X(Dimension - 1) For i = 0 To Dimension - 1 X(i) =InputBox("Introduce el elemento en posicin " & i) Next i n = InputBox("Cuntos elementos quieres sumar: ") 'Podras incluir una sentencia que controle n<=Dimension Resultado = Suma(X, n) Result.Visible = True Result.Text = "El resultado es: " & Format(Resultado, "#.##") 'El resultado se imprime en la etiqueta Result, usando 'slo dos cifras decimales End Sub

Puesta en prctica: aplicacin VB4.1


Cdigo de la aplicacin

Procedimiento conducido por el suceso click del botn Generar Private Sub Generar_Click(...) Handles Generar.Click Dim Resultado As Double Dimension = InputBox("Introduce la dimensin del vector:") ReDim X(Dimension - 1) Aleatorio(Dimension, X) n = InputBox("Cuntos elementos quieres sumar: ") 'Podras incluir una sentencia que controle n<=Dimension Resultado = Suma(X, n) Result.Visible = True Result.Text = "El resultado es: " & Format(Resultado, "#.##") 'El resultado se imprime en la etiqueta Result, usando 'slo dos cifras decimales End Sub

También podría gustarte