Estructuras de datos

Anuncio
FUNDAMENTOS DE
INFORMÁTICA
Tema 3
Estructuras de datos
Departamento de Ingeniería de Sistemas y Automática
Universidad de Vigo
Fundamentos de Informática. Departamento de Ingeniería de Sistemas y Automática.
Actualización Septiembre 2005
1
Estructuras de datos
Estructuras de datos
¬ Dos estructuras de datos fundamentales son las conocidas
como: matriz (o array) y registro (o estructura).
¬ Son de uso frecuente, por lo que son elementos
imprescindibles en la programación de muchos problemas.
¬ Por ejemplo, las notas correspondientes a las distintas
evaluaciones realizadas a cada uno de los alumnos de un
determinado curso forman una matriz, y la ficha que contiene
los datos personales de cada uno de estos alumnos es un
ejemplo de registro (o estructura).
Fundamentos de Informática. Departamento de Ingeniería de Sistemas y Automática.
Actualización Septiembre 2005
2
Estructuras de datos
Matrices
¬ Una matriz (array en inglés) es un conjunto de elementos
contiguos, todos del mismo tipo, que comparten un nombre
común y a los que es posible acceder mediante la posición
(índice) que ocupa cada uno de ellos en la matriz, como un
vector o una matriz en Álgebra.
¬ Esta disposición permitirá escribir código más simple, ya que
será posible establecer bucles en los que se recorra los
elementos de una matriz mediante el número de índice.
¬ A las matrices de una dimensión se les suele llamar también
vectores o listas, y a las matrices de dos dimensiones, tablas.
elemento
Matriz
Matrizaa
...
a(i) a(i+1) a(i+2) a(i+3) ...
Fundamentos de Informática. Departamento de Ingeniería de Sistemas y Automática.
Actualización Septiembre 2005
3
Estructuras de datos
Matrices
¬ Es posible definir matrices de hasta 60 dimensiones en Visual
Basic y de cualquier tipo de datos (tipos fundamentales y
estructuras definidas por el usuario).
¬ La representación de las matrices se hace mediante variables
con subíndices. Los subíndices son números enteros
consecutivos y, por defecto, el primer índice valdrá 0. Una
matriz de dos dimensiones se representa con una variable con
dos subíndices (filas, columnas). Una de tres con tres, etcétera.
¬ Para formar el nombre de una matriz y definir su tipo, se siguen
las mismas reglas que para las variables:
Dim a(24) As Integer ´matriz de enteros, 1 dimensiones.
Dim c(12,5) As String ´matriz de cadenas, 2 dimensiones.
Fundamentos de Informática. Departamento de Ingeniería de Sistemas y Automática.
Actualización Septiembre 2005
4
Estructuras de datos
Declaración de matrices
¬ La declaración de una matriz especifica el nombre de la matriz, el
número de elementos de la misma y el tipo de éstos:
Dim variable[(dimension)][As tipo]
donde:
• variable es el nombre de la matriz.
• dimension es una lista de expresiones numéricas, separadas
por comas y que definen las dimensiones de la matriz. Esta
lista puede ser de la forma:
[inferior To] superior [, ...
• tipo define el tipo de la variable (Integer, Long, String, etc.)
Fundamentos de Informática. Departamento de Ingeniería de Sistemas y Automática.
Actualización Septiembre 2005
5
Estructuras de datos
Ejemplos de declaración de matrices
¬ Lista o vector de 60 enteros, indexados del 0 al 59:
Dim temp(59) As Integer
¬ Lista o vector de 60 enteros, indexados del 1 al 60:
Dim temp(1 To 60) As Integer
¬ Lista o vector de 60 cadenas de caracteres de longitud fija 40:
Dim temp(1 To 60) As String * 40
¬ Tabla de 10 * 10 elementos de tipo Double:
Dim a(9,9) As Double
Dim a(1 To 10, 1 To 10) As Double
Dim a(-5 To 4, 2001 To 2010) As Double
Fundamentos de Informática. Departamento de Ingeniería de Sistemas y Automática.
Actualización Septiembre 2005
6
Estructuras de datos
Ejemplo de manipulación de matrices
Const n = 12
Dim A(1 to n) As Double
Dim i As Integer
´matriz de n elementos
´Bucle For para Rellenar la matriz “a” con datos.
For i = 1 To n
A(i) = InputBox(“Introduce el elemento” & i & “ de A”)
Next i
´Bucle For para Visualizar la matriz con Print
For i = 1 To n
MsgBox A(i)
Next i
Fundamentos de Informática. Departamento de Ingeniería de Sistemas y Automática.
Actualización Septiembre 2005
7
Estructuras de datos
Matrices dinámicas
¬ Una matriz dinámica, a diferencia de las anteriores, puede ser
redimensionada en cualquier momento de la ejecución del programa.
¬ Para crear una matriz dinámica, primero hay que declararla como si
fuera una matriz estática (con Dim), pero sin darle dimensión.
¬ Para reasignar dinámicamente el número de elementos se utiliza la
sentencia ReDim. No es posible cambiar el número de dimensiones
de la misma, sólo los tamaños de cada dimensión.
¬ Cada vez que se ejecuta ReDim, todos los valores previamente
almacenados se pierden.
¬ Para cambiar el tamaño conservando los valores hay que utilizar la
palabra clave Preserve, en cuyo caso no es posible cambiar el/los
índice/s inferior/es, sólo el superior.
Fundamentos de Informática. Departamento de Ingeniería de Sistemas y Automática.
Actualización Septiembre 2005
8
Estructuras de datos
Ejemplo de manipulación de matrices dinámicas
Dim m() As Double
'declaracion de matriz dinamica
Dim filas As Integer, columnas As Integer
Dim i As Integer, j As Integer
'consulto al usuario el tamaño de la matriz
filas = InputBox("Nº filas de la matriz:")
columnas = InputBox("Nº columnas de la matriz:")
ReDim m(1 To filas, 1 To columnas) 'redimensiono la matriz
'Leo los datos
For i = 1 To filas
For j = 1 To columnas
m(i, j) = InputBox("m(" & i & ", " & j & ") = ")
Next j
Next i
Fundamentos de Informática. Departamento de Ingeniería de Sistemas y Automática.
Actualización Septiembre 2005
9
Estructuras de datos
Otras cuestiones sobre matrices
¬ Erase vuelve a inicializar los elementos de matrices de tamaño fijo y
libera el espacio de almacenamiento asignado a matrices dinámicas.
Tipo de matriz
Efecto de Erase sobre elementos de una matriz fija
Matriz numérica fija
Establece cada elemento a cero.
Matriz de cadena fija
(longitud variable)
Establece cada elemento a una cadena de longitud cero
("").
Matriz de cadena fija
(longitud fija)
Establece cada elemento a cero.
Matriz de tipos definidos
por el usuario
Establece cada elemento como si se tratara de una
variable separada.
¬ Para copiar una matriz en otra es necesario asignar uno a uno los
valores de la primera en las variables de la segunda.
¬ La función Ubound(variable, dimension) devuelve el valor más
alto de la dimensión de la variable de tipo matriz indicada.
Fundamentos de Informática. Departamento de Ingeniería de Sistemas y Automática.
Actualización Septiembre 2005
10
Estructuras de datos
Estructuras: “Type”
¬ Una estructura o registro es un nuevo tipo de datos, especificado
por el usuario, que puede definirse como una colección de datos de
diferentes tipos.
¬ Para declarar una estructura, hay que utilizar la instrucción de
Visual Basic Type ... End Type. Esta instrucción sólo puede
aparecer en la sección Declaraciones de los módulos.
Type Ficha
Nombre As String * 60
Direccion As String * 40
Telefono As String *12
Edad As Integer
End Type
¬ En este ejemplo se declara un tipo de datos Ficha que consta de
cuatro campos, denominados Nombre, Direccion, Telefono y Edad.
Fundamentos de Informática. Departamento de Ingeniería de Sistemas y Automática.
Actualización Septiembre 2005
11
Estructuras de datos
Estructuras: “Type”
¬ Una vez declarado el tipo de datos, ya es posible declarar variables
de este tipo. Por ejemplo, la siguiente sentencia declara la variable
Alumno de tipo Ficha:
Dim Alumno As Ficha
¬ Para referirse a un determinado campo de una estructura, se utiliza
la notación variable.miembro. Por ejemplo:
Alumno.Nombre = InputBox("Introduce tu nombre")
Alumno.Telefono = InputBox("Introduce tu teléfono")
MsgBox "El teléfono introducido ha sido " & Alumno.Telefono
Fundamentos de Informática. Departamento de Ingeniería de Sistemas y Automática.
Actualización Septiembre 2005
12
Estructuras de datos
Estructuras. Sentencia “Type”
¬ Un miembro de una estructura puede ser, a su vez, otra estructura:
Type Fecha
Dia As Integer
Mes As Integer
Ano As Integer
End Type
Type Ficha
Nombre As String * 60
Direccion As String * 40
Telefono As String *12
Edad As Integer
FechaMatricula As Fecha
End Type
¬ Para acceder al día de matrícula de la variable Alumno definida
anteriormente:
Alumno.FechaMatricula.Dia
Fundamentos de Informática. Departamento de Ingeniería de Sistemas y Automática.
Actualización Septiembre 2005
13
Estructuras de datos
Estructuras. Sentencia “Type”
¬ En el caso de estructuras, sí que es posible la asignación entre
variables del mismo tipo:
Dim Alumno1 As Ficha, Alumno2 As Ficha
Alumno2 = Alumno1
¬ Un tipo definido por el usuario también puede contener miembros
que sean matrices estáticas y dinámicas:
Type Ficha
...
Asignaturas() As String ´matriz dinámica
Optativas(3) As String ´matriz estática
...
End Type
Fundamentos de Informática. Departamento de Ingeniería de Sistemas y Automática.
Actualización Septiembre 2005
14
Estructuras de datos
Estructuras. Sentencia “Type”
¬ Se accede a un elemento de un miembro que es una matriz de la
siguiente forma:
Alumno.Optativas(0) = “Robótica Industrial”
¬ También es posible definir matrices de estructuras de la siguiente
forma:
Public GrupoA (1 To 100) As Ficha
¬ Se accede a los miembros de un elemento de la matriz del modo
siguiente:
GrupoA(1).Nombre = “Armando Bronca Constante”
GrupoA(100).Optativas(1) = “Informática Avanzada”
Fundamentos de Informática. Departamento de Ingeniería de Sistemas y Automática.
Actualización Septiembre 2005
15
Estructuras de datos
Sentencia “with ... end with”
¬ La sentencia With permite manipular, de forma más sencilla, el
acceso a los miembros de una estructura. Así, el conjunto de
sentencias que manipulan atributos de la variable Alumno de tipo
Ficha es:
Alumno.Nombre = “Armando Bronca Constante”
Alumno.Direccion = “C/La Calle s/n”
Alumno.Telefono = 555252525
¬ podrían escribirse, utilizando esta sentencia, de este otro modo:
With Alumno
.Nombre = “Armando Bronca Constante”
.Direccion = “C/La Calle s/n”
.Telefono = 555252525
End With
Fundamentos de Informática. Departamento de Ingeniería de Sistemas y Automática.
Actualización Septiembre 2005
16
FUNDAMENTOS DE
INFORMÁTICA
Tema 3
Estructuras de datos
Departamento de Ingeniería de Sistemas y Automática
Universidad de Vigo
Fundamentos de Informática. Departamento de Ingeniería de Sistemas y Automática.
Actualización Septiembre 2005
17
Descargar