250 likes | 416 Views
Arreglos y comunicación Usuario. Profesor: Rodrigo Cruzat. MsgBox. Abre una ventana Envía mensaje al usuario y pide respuesta O.K./Cancel Yes/No. Etc. MsgBox . respuesta = MsgBox("texto para el usuario“[, tiposBotones, "titulo“]). Dim respuesta As Integer
E N D
Arreglos y comunicación Usuario Profesor: Rodrigo Cruzat
MsgBox • Abre una ventana • Envía mensaje al usuario y pide • respuesta • O.K./Cancel • Yes/No. • Etc
MsgBox respuesta = MsgBox("texto para el usuario“[, tiposBotones, "titulo“]) Dim respuesta As Integer respuesta = MsgBox("Este es un MsgBox",3, "Hola inf2001-X")
MsgBox • Botón seleccionado por defecto: Sumar a tipoBotones • 0 para que sea el primero • 256 para el segundo • 512 para el tercero • Agregar ícono • 16 critical • 32 question • 48 exclamation • 64 information} respuesta = MsgBox(“aaa?", 4+256+32, “a")
InputBox • Pide al usuario que teclee una frase, e.g., su nombre, un título, etc. texto = InputBox("texto para el usuario","titulo", "default", left, top) • texto: lo ingresado por el usuario • “default” lo que aparece en caja de texto • Left, top: coordenadas. (opcional)
InputBox Dim respuesta As String respuesta = InputBox(“Como te llamas?", “Dime tu nombre“, “Aca va el nombre”)
Ámbito de variables • En un solo procedimiento • Dim • Static • Retiene su valor cuando el procedimiento termina • En un solo módulo • Dim antes del primer Sub o Function • Todos los procedimientos en todos los módulos • Public antes del primer Sub o Function en un módulo
Solucion 1 Dim v1, v2, v3, v4, v5, v6, v7, v8, v9, v10 As Integer For i = 2 To 101 Dim voto As Integer voto = Hoja1.Cells(i, 1) If voto = 1 Then v1 = v1 + 1 ElseIf voto = 2 Then v2 = v2 + 1 ... ElseIf voto = 9 Then v9 = v9 + 1 Else 'voto es 10 v10 = v10 + 1 End If Next i
Solucion 1 (Cont) Dim result As String result = "Candidato 1: " & v1 & ", candidato 2: " & v2 & ", candidato 3:" & v3 & ", candidato 4: " & v4 & ",candidato 5: " & v5 & ", candidato 6:" & v6 & ", candidato 7: " & v7 & ",candidato 8: " & v8 & ", candidato 9:" & v9 & ", candidato 10: " & v10 respuesta = MsgBox(result, 0,"Resultados")
Solucion con Arreglos Dim v(10) As Integer For i = 2 To 101 Dim voto As Integer voto = Hoja1.Cells(i, 1) v(voto - 1) = v(voto - 1) + 1 Next Dim result As String For i = 0 To 9 (i r+e s1u)l t& =" :r e"s u&l tv (&i )" C&a n"d i"dato " & Next respuesta = MsgBox(result, 0, “Resultados”
Arreglos • Un arreglo, o array, permite referirse a una serie de elementos del mismo tipo con un mismo nombre • Si el array es de tipo Variant cada elemento puede contener un dato de tipo diferente, e incluso puede contener otro array.
Arreglos Estáticos y Dinámicos • Hay dos tipos de arreglos en VB 1. Arrays estáticos, cuya dimensión es siempre la misma. 2. Arrays dinámicos, cuya dimensión se puede modificar durante la ejecución del programa.
Arreglo estático: creación Dim vector(20) As Double • Array de una dimensión con nombre vector • 20 elementos, vector(0), vector(1), ... , vector(19) • Cada elemento almacena un Double Dim matriz(3, 6) As Integer • Array de dos dimensiones con nombre matriz • 3x6 elementos, matriz(0,0), ... matriz(2,5), de tipo entero. • Dim cadena(1 To 12) As String • Array de una dimensión con nombre cadena • 12 elementos, caract(1), ... , caract(12), de tipo string
Ejemplos: acceso • Dim vector(20) As Double • Darle un valor a un elemento • vector(20) = 123 • Obtener el valor de un elemento • Hoja1.Cells(1,1) = vector(20)
Arreglos Dinámicos • Un array estático tiene tamaño fijo Ejemplo: Dim vector(20) As Double ¡¡siempre tiene tamaño 20!! • El espacio para un array dinámico se asigna durante la ejecución del programa. • Un array dinámico, puede ser redimensionado en cualquier momento de laejecución.
Arreglos Dinámicos • Creación: igual que estático, pero sin darle dimensión Dim vector() As Double • Asignar núm de elementos: se usa ReDim. • ReDim § puede aparecer solamente en un procedimiento § permite cambiar el número de elementos del array y sus límites inferior y superior, § No permite cambiar el número de dimensiones.
Ejemplos Dim Matriz( ) As Integer ... ReDim Matriz(100, 50) ... Notas • Al ejecutar ReDim, valores almacenados en el array se pierden • Para conservar los valores del array, ejecutar ReDim con la palabra clave Preserve. ReDim Preserve A(D1, UBound(A, 2) + 2) incrementa el tamaño del array en dos columnas más. Cuando se utiliza la palabra Preserve no puede cambiarse el índice inferior del array (sí el superior). UBound(Array,dim) : devuelve tamaño de la dimensión dim de la matriz.
Estructuras: Sentencia Type • Una estructura es un nuevo tipo de datos, que el usuario define y 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 hay que utilizar la sentencia Type ... End Type.
Ejemplos Public Type Alumno Nombre As String Direccion As String Telefono As Long ID 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 ID.
Ejemplos • Una vez definido un nuevo tipo de datos, se pueden declarar variables de ese tipo Public Type Alumno Nombre As String Direccion As String Telefono As Long ID As Long End Type Sub Botón1_AlHacerClic() Dim Alum1 As Alumno … End Sub • Para referirse a un miembro de una estructura se utiliza la notación variable.miembro Alum1.Nombre = “Juanito”
Estructuras de Estructuras • Un miembro de una estructura puede ser otra estructura, es decir un tipo definido por el usuario Type Fecha Dia As Integer Mes As Integer Anio As Integer End Type Type Alumno Nacimiento As Fecha Nombre As String Direccion As String Telefono AS Long ID As Long End Type
Estructuras, Arreglos yArgumentos • Dentro de una estructura puede haber arrays tanto estáticos como dinámicos. • Se pueden definir arrays de estructuras. Dim grupoB (1 To 100) As Alumno • Las estructuras pueden ser también argumentos en las llamadas a funciones y procedimientos Sub.Siempre son pasados por referencia; En el caso de las funciones, las estructuras pueden ser también valores de retorno.