0% encontró este documento útil (0 votos)
58 vistas8 páginas

Matrices

Este documento describe las matrices en Visual Basic, incluyendo su definición, declaración, tipos (estáticas y dinámicas), y cómo trabajar con ellas almacenando y accediendo a datos. También cubre el uso de cajas de texto multilínea y la interceptación de teclas pulsadas.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
58 vistas8 páginas

Matrices

Este documento describe las matrices en Visual Basic, incluyendo su definición, declaración, tipos (estáticas y dinámicas), y cómo trabajar con ellas almacenando y accediendo a datos. También cubre el uso de cajas de texto multilínea y la interceptación de teclas pulsadas.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Matrices

Contenidos  

- Definición de matriz
- Declaración de una matriz
- Sentencia Dim
- Caja de texto multilínea
- Trabajar con el texto de la caja de texto Multilínea
  - Interceptando la tecla pulsada
- Matrices estáticas
- Matrices dinámicas
- Sentencia Erase
- Sentencia Option Base
- Copiar una matriz en otra

Definición de matriz

Una matriz es un conjunto de elementos contiguos, todos del mismo tipo, que comparten un nombre
común, a los que se puede acceder por la posición (índice) que ocupa cada uno de ellos dentro de la matriz..
Esta disposición permitirá escribir código más pequeño y simple, ya que se pueden establecer bucles
mediante el número del índice. Cada elemento es una variable que puede contener un dato numérico o una
cadena de caracteres, dependiendo esto del tipo de matriz. La representación de las matrices se hace
mediante variables suscritas o de subíndices y pueden tener una o varias dimensiones. A las matrices de
una dimensión se les llama también listas y a las de dos dimensiones tablas. En genera, se utiliza la
denominación de matriz (array en inglés).

Desde el punto de vista matemático, en más de una ocasión necesitaremos representar variables como: A1
A2 A3 ... An

En general, se puede elegir como rango de valores para cada una de las dimensiones el que se desee.

Una matriz de dos dimensiones se representa con una variable con dos subíndices (filas, columnas); una
matriz de tres dimensiones se representa con una variable con tres subíndices, etc. El máximo número de
dimensiones para una matriz en Visual Basic es 60, aunque las más utilizadas son las de una, dos y tres
dimensiones. Los índices de las matrices deben estar en el rango de -2 a la 31 a 2 a la 31 en versiones de 32
bits.

Para formar el nombre de una matriz y definir si ésta es numérica o de caracteres, se siguen las mismas
reglas que para las variables. Por ejemplo:
    Dim a(24) as integer 'matriz entera unidimensional de 24 elementos
    Dim c(12, 5) as string 'matriz de caracteres de 2 dimensiones

En Visual Basic hay dos tipos de matrices: matrices estáticas que tiene siempre el mismo tamaño y matrices
dinámicas cuyo tamaño cambia en tiempo de ejecución. Ambas serán estudiadas con con detalle en este
mismo capítulo.

Declaración de una matriz


La declaración de una matriz especifica el nombre de la matriz, el número de elementos de la lista y el tipo
de éstos. En función del número de dimensiones, distinguimos entre matrices unidimensionales y
multidimensionales.

Sentencia Dim

La sentencia Dim, además de para declarar variables, se puede utilizar también para declarar matrices. Su
sintaxis es:

Dim variable[(dims)][As tipo][variable[(dims)][as tipo]]...

variable es un identificador que nombra la matriz.

dims es una de expresiones numéricas, separadas por comas y que definen las dimensiones de una matriz.
Esta lista puedeser de la forma siguiente:

[inferior to]superior[,[inferior to]superior]...

As tipo define el tipo de variable. Puede ser un tipo simple(integer, log, single, double, string, etc.) o un tipo
definido por el usuario.

Por ejemplo, la siguiente línea de código define una matriz unidimensional llamada temp con subíndices
definidos en el rango de 0 a 59. Esto es, los elementos de la matriz son: temp(0), temp(1), ..., temp(59). El
limite inferior predeterminado es 0.

Dim temp(1 to 60) as string * 40

La sentencia siguiente declara una matriz bidimensional de 10 por 10 elementos de tipo Double:

Dim ma(9,9) as double

Se puede declarar una o ambas dimensiones con límites inferiores explícitos:

Dim mc(3, -4 to 5, 1 to 12)

La declaración anterior crea una matriz que tiene tres dimensiones. El tipo de cada elemento es Variant. El
número total de elementos es el producto de los tamaños de las tres dimensiones(4*10*12); es decir, 480.

El espacio de almacenamiento total que necesita una matriz depende de su número de elementos y del tipo
de cada elemento. Por lo tanto, hay que utilizar las matrices multidimensionales con sumo cuidado.
También hay que tener especial cuidado on las matrices de tipo Variant, ya que este tipo de datos requiere
más espacio de almacenamiento que los otros tipos de datos.

Cuando se ejecuta la sentencia dim, se asigna a todos los elementos de las matrices numéricas el valor 0, y a
los elementos de las matrices de caracteres uma cadena de longitud ("") si se trata de cadenas de longitud
variable, o bien se rellenan los nulos(ANSI 0) si se trata de cadenas de longitud fija.

La propiedad ToolTipText de un control almacena una descripción corta acerca de la función que
desempeña dicho control.

Caja de texto multilínea

El aspecto y el comportammiento de una caja de texto está muy influenciado por dos propiedades,
Multiline y ScrollBars, las cuales sólo pueden establecerse durante el diseño. La propiedad ScrollBars de una
caja de texto no tiene que confundirse con el control scroll bar (barra de desplazamiento) que veremos más
adelante.

Cuando la propiedad MultiLine de una caja de texto tiene un valor True, ésta permite escribir varias líneas
de texto. Por omisión, esta propiedad tiene el valor False, lo que indica que la caja de texto sólo puede
contener una línea.

Así mismo, la propiedad scrollBars permite dotar a la caja de texto con barras de texto horizontales o
verticales. Por omisión esta propiedad tiene la propiedad un valor 0, lo cual indica que no tiene barras de
desplazamiento. Un valor 1 añade a la caja de texto solamente la barra de texto horizontal, un valor 2
añade a la caja de texto solamente la barra de desplazamiento vertical y un valor 3 añade ambas barras de
desplazamiento.

Guarde la aplicación con el nombre matriz1c y ejecútela. Pruebe a escribir texto, actúe bobre las barras de
desplazamiento, modifique el texto, inserte texto y seleccione, borre y mueva bloques de texto. Como
podrá comprobar, todas estas operaciones están implícitas sin escribir nada de código.

Si en una caja de texto multilínea no hay una barra de desplazamiento horizontal y una línea de texto
alcanza el extremo derecho de la caja, ésta continúa automáticamente en la siguiente línea.

Cuando por software asigne texto a una caja de texto y necesite introducir un salto de línea, proceda como
se indica a continuación. Por ejemplo, el procedimiento Form_Load que se escriba a continuación hace que
se visualicen en la caja dos líneas de texto, "línea 01" y "línea 02".

   Private Sub Form_Load()


      [Link]="línea 01" & vbCrLf & "línea 02"
   End Sub

Trabajar con el texto de la caja de texto Multilínea

Como hemos dicho, Visual Basic dota automáticamente con capacidad de selección a las cajas de texto.
Puede seleccionar texto utilizando el ratón o el teclado. Con el ratón apunte a al comienzo del texto a
seleccionar y arrastre con el boton izquierdo del ratón pulsando hasta haber seleccionado todo el texto; con
el teclado, sitúe el punto de inserción donde desea iniciar la selección y mantenimiento pulsada la tecla
Mayús(Mayúscula) desplace el punto de inserción utilizando las teclas de desplazamiento.

Además de la capacidad de selección, las cajas de texto tienen una serie de propiedades que permiten
trabajar con el texto seleccionado. Estas propiedades son SelStart, SelLength y SelText.

La propiedad SelStart es un entero (Long) que especifica la posición de comienzo del bloque de texto
seleccionado. Si no hay texto seleccionado, entonces esta propiedad hace referencia al punto de inserción
(cursor intermitente que marca la posición de escritura). Un valor cero especifica la posición justo antes del
primer carácter de la caja de texto, y un valor igual a la longitud de texto especifica la posición justo
después del último carácter de la caja de texto. Por ejemplo:
    [Link]=10

fija el punto de inserción en la posición 10 de la caja Text1 y

    pos = [Link]

devuelve la posición del punto de inserción.

La propiedad SelLength es un entero (Long) que especifica el número de caracteers seleccionados. Por
ejemplo:
   [Link]=5

selecciona 5 caracteres a partir del punto de inserción en la caja Text1 y

   n = [Link]

devuelve el número de caracteres seleccionados.

La propiedad SelStart devuelve o establece una cadena de caracteres con el texto actualmete
seleccionados. Si no hay texto seleccionado, su valor es una cadena de longitud cero. El ejemplo siguiente,
muestra una forma rápida de añadir texto a una caja de texto multilínea sin necesidad de escribir el
contenido de caja:

   [Link]=Len(Text1) ' situarse al final


   [Link] = NuevoTexto ' añadir texto

Interceptando la tecla pulsada

Anteriormente vimos que cuando asignamos los contenidos de las cajas de texto Índice y ValorElemento a
variables numéricas, Visual Basic convierte automáticamente dichos contenidos en valores numéricos,
suponiendo lógicamente que los contenidos se correspondan con nú[Link] ¿qué ocurre si el usuario
introduce los caracteres que no pertenece a un valor numérico? Entonces se obtendría un error. Para
evitarlo no queda otra solución que interceptar la tecla pulsada y desecharla en el caso de que el carácter
correspondiente no sea adecuado.

Cada vez que el usuario pulsa una tecla, ocurren tres eventos sobre el objeto actualmente seleccionado
(objeto sobre el que está el punto de inserción): KeyDown, KeyPress y KeyUp. El evento KeyPress se genera
solamente cuando se introduce un carácter ASCII. Esta definición excluye teclas especiales, como teclas de
función (F1 a F12), teclas de desplazamiento del cursor o las teclas de edición y retroceso.

El juego de caracteres ASCII incluye un subconjunto del conjunto de caracteres ANSI con el que
trabajaVisual Basic. Los caracteres ANSII incluyen todos los caracteres imprimibles, las combinaciones Ctrl+
(A-Z) y otros caracteres estándar, como Entrar (ASCII 13) y BackSpace (ASCII 8- retroceso). Para interceptar
cualquier otra tecla o combinación de teclas que no produzcan un código ASCII, se utilizarán los eventos
KeyDown y KeyUp.

Un procedimiento conducido por el evento KeyPress utiliza el argumento KeyAscii, que contiene el valor
ASCII del carácter [Link] valor puede ser convertido a un carácter utilizando la función Chr y
puede ser comparado utilizando los operadores de relación (=,<,><=,>= y <>).

Otras funciones relacionadas con caracteres son: Asc(car), que devuelve ell valor ASCII del carácter car,y
UCase(car), que convierte el carácter car a mayúsculas. Por ejemplo, el siguiente procedimiento convierte a
mayúsculas el carácter tecleado sobre el objeto Text1.
   Private Sub Text1_KeyPress(KeyAscii as integer)
    Dim car as string *1 ' cadena de un solo caracter
    car = Chr(KeyAscii) ' convierte a caracter
    car = UCase(car) ' convierte a mayusculas
    KeyAscii = Asc(car)
   End Sub

El siguiente ejemplo demuestra como cancelar un carácter si no esta dentro del rango permitido. Este
ejemplo impide a la caja de texto Text1 recibir cualquier carácter que no sea un dígito:
Private Sub Text1_KeyPress(KeyAscii as integer)
  Dim car as string *1 ' cadena de un solo caracter
  car = Chr(KeyAscii) ' convierte a caracter
  if car <"0"or car >"9" then ' si se encuentra entre 0 y 9
    KeyAscii = 0 ' cancela caracter
    Beep              'suena un beep
  End If
End Sub
End Sub
Cambiar KeyAscii a 0 acncela la pulsación de la tecla, de forma que el objeto, en este caso Text1, no recibe
ningún carácter.

En ocasiones, pueden ser útil responder a estos eventos desde un procedimiento del formulario. Para ello
es necesario que que dicho formulario reciba los eventos antes de que lo reciban los controles del mismo.
Esto se consigue poniendo su propiedad KeyPreview a True.

Matrices estáticas

Para declarar una matriz estática (matriz con un número fijo de elementos), Visual Basic hace tres
consideraciones importantes:

- Para declarar una matriz global, hágalo en la sección de declaraciones de un módulo utilizando la
sentencia públic.
        Public temp(59) as integer
- Para declarar una matriz a nivel de módulo, hágalo en la sección declaraciones del módulo utilizando la
sentencia Private o Dim.
        Private temp(59) as integer
- Para declarar una matriz local a un procedimiento, utilice la sentencia Dim o Static dentro del propio
procedimiento.
       Dim temp(59) as integer

A diferencia de otras versiones de Basic, Visual Basic no permite declarar implicitamente una [Link]
matriz tiene que ser declarada explicitamente, y los índices de la mismos deben estar en el rango -2 a la 31
a 2 a la 31. A continuación observaremos algunos ejemplos:

       Dim Matriz_A(19) as string

Este ejemplo declara una matriz de una dimensión, Matriz_A, con veinte elementos, Matriz_A(0),
Matriz_A(1),...,Matriz_A(19), cada uno de los cuales permite almacenar una cadena de caracteres de
longitud variable.

      Dim Matriz_B(3, 1 to 6) as integer

Este ejemplo declara una matriz de dos dimensiones, Matriz_B, con 4*6 elementos, Matriz_B(0,1) ,...,
Matriz_B(3,6) de tipo entero.

      Static Matriz_C(1 to 5 to 1 to 5) as integer

Este ejemplo declara una matriz estática (Static) de dos dimensiones, Matriz_C, con 5*5 elementos,
Matriz_C (1,1),..., Matriz_C(5,5), de tipo entero.

    Public Matriz_D(1 to 12) as string * 60

Este ejemplo declara una dimensión, Matriz_D,, con doce elmentos, Matriz_D(1) ,..., Matriz_D(12)cada uno
de los cuale s permite almacenar una cadena de caracteres de longitud fija (60 caracteres).

Matrices dinámicas

Cuando las dimensiones de una matriz no son siempre las mismas, la mejor forma de especificarlas es
mediante variables. Una matriz declarada de esta forma es una matriz dinámica. El espacio necesario para
una matriz estática se asigna al iniciarse la aplicación y permanecerá fijo. En cambio, el espacio para una
matriz dinámica será asignado durante la ejecución de la aplicación. Una matriz dinámica puede ser
redimensionada en cualquier momento durante la ejecución. Para crear una matriz dinámica:

- Declare la matriz en la sección de declaraciones de módulo con una sentencia Public si se quiere global o
con Private o Dim. Si la quiere al nivel del módulo, o en procedimiento con Static o Dim si la quiere local.
Para especificar que la matriz va a ser dinámicadeje la lista de dimensiones vacía. Por ejemplo:

         Dim Matriz_A()

- Asigne un número actual de elementos con la sentencia ReDim. Se supone que N está definida
previamente.

         ReDim Matriz_A(N + 1)

La sentencia Redim puede aparecer solamente en un procedimeinto y permite cambiar el número de


elementos de la matriz, no el número de dimensiones. Sin embargo, no puede declarar un a matriz de un
tipo de datos y luego usar ReDim para cambiar la matriz a otro tipo de datos.
Por ejemplo, si declaramos la matriz Matriz_A a nivel de un módulo,
        Private Matriz_A() as integer
más tarde, un procedimiento cálculo puede asignar espacio para la matriz, como se indica a continuación:
        Sub Cálculo()
             Dim F as integer, C as integer
               ...
             ReDim Matriz_A(F,C)
               ...
        End Sub

        Cada vez que se ejecuta la sentencia ReDim, todos los valores almacenados en la matriz se pierden.
Visual Basic restablece los valores del valor Empty en matrices Variant, a cero en matrices numéricas, a una
cadena de longitud cero en matrices de cadenas, o a Nothing en matrices de objetos. Cuando le interese
cambiar el tamaño de la matriz conservando los valores de la misma los valores de la misma, ejecute ReDim
con la palabra clave Preserve. Por ejemplo, supongamos la matriz A de dos dimensiones. La sentencia:

        ReDim Preserve A(D1, UBound(A, 2) + 2)

       Incrementa el tamaño de la matriz multidimensional, sólo se puede cambiar el límite superior de la


última dimensión. Cualquier otro intento produce un error. Evidentemente, si se disminuye el tamaño de la
matriz hay una perdida parcial de los datos.

Sentencia Erase

Para matrices estáticas, Erase asigna cero a cada elemento de las matrices numéricas y nulo ("") a cada
elemento de las matrices de caracteres.
Para matrices dinámicas, Erase libera el espacio de memoria utilizado por las matrices. Para utilizar de
nuevo cualquiera de ellas , es necesario de nuevo declarar las dimensiones de la matriz utilizando ReDim o
Dim.
      Erase nombre_de_la_matriz[,nombre_de_la_matriz]...
Cuando se dispone de poco espacio de memoria, resulta útil la sentencia Erase para borrar las matrices
dinámicas que ya no van a ser utilizadas. Erase también puede utilizarse cuando deseamos redimensionar
matrices en una aplicación. Por ejemplo:
      Dim b() as integer
      n = 10: m = 20
      Dim a(100) as integer
      ReDim b(n, m)
        ...
      Erase a,b 'poner a 0 la matriz a y liberar la memoria de b
      ReDim b(5, 5) 'redimensionar la matriz b

Sentencia Option Base

Se utiliza en el nivel del módulo para definir el límite inferior predeterminado para los subíndices de una
matriz. Su sintaxis es:
       Option Base n

donde n es una expresión entera de valor 0 o 1.

El valor predeterminado es [Link] sentencia debe ejecutarse antes de definir cualquier matriz y no se puede
utilizar dentro de un procedimiento. Por ejemplo:
      Option Base 1
      Private Sub Form_Load()
          Dim a(100) as integer 'matriz de 100 elementos: a(1) ... a(100)
          a(1) = 10
           ...
     End Sub

Este ejemplo crea una matriz numérica unidimensional llamada a con 100 elementos, a(1) ... a(100).

No obstante, la cláusula To en las instrucciones Dim, Private, Public, ReDim y Static proporciona una forma
mas flexiblede controlar los límites inferior y superior de cada dimensión de una matriz.

Copiar una matriz en otra

No existe una función predefinida que permita copiar una matriz en otra. Por lo tanto, para realizar esta
operación tendremos que añadir a nuestra aplicación el código correspondiente.

Es posible asignar el contenido completo de una matriz a otra matriz, siempre y cuando la matriz del lado
izquierdo de la asignación sea una matriz dinámica. Las matrices estáticas solo pueden aparecer a la
derecha de la asignación. Según esto, puede sustituirse la rutina de copiar matriz del ejemplo anterior por:
   x= m

También podría gustarte