|
|
|
||
|
|
|||
|
|
|||
|
Quick basic |
|||
|
12) Arreglos |
|||
|
|
Hasta el momento hemos visto las estructuras de datos más sencillas que son las variables, pero ahora veremos otras estructuras de datos que se llaman arreglos. Para ver más o menos para que se utilizan estas estructuras, vamos a ver lo siguiente: Debemos introducir los nombres de 4 personas y guardarlos para luego volverlos a imprimir en el mismo orden en que entraron. La primera forma que se nos podría ocurrir, es usar 4 variables de tipo String, guardar los nombres en ellas y luego volverlos a imprimir, algo así como:
CLS
|
||
|
Esta es la manera más trabajosa de hacerlo ¡Que tal si fueran 100 o 200 personas! Los arreglos (también llamados arrays, matrices o vectores) son espacios de memoria que se utilizan para almacenar información de un tipo de dato determinado. Podemos tener arreglos de enteros, de cadena, de simple precisión, etc. Podemos imaginar un arreglo sencillo de la siguiente forma:
Cada cuadro (o dirección del arreglo) es un espacio reservado en memoria para guardar información del tipo que vaya a ser el arreglo. Siguiendo con el ejemplo de las 4 personas, se supone que el arreglo será de tipo String ya que almacenaremos cadenas de caracteres. Para utilizar un arreglo, debemos declararlo primero con la siguiente sintaxis: DIM nombre del arreglo(tamaño del arreglo) AS tipo de dato Siguiendo con el ejemplo anterior, podemos declarar nuestro arreglo de la siguiente forma: DIM personas(4) AS STRING Ahora veremos como llenar las localidades que reservamos en el arreglo.
DIM
personas(4)
AS STRING En realidad el programa anterior es muy trabajoso todavía, pero nos ilustra de una manera como es que se llenan las direcciones de un arreglo. De lo anterior podemos ver que el nombre de la persona 1 se almacenará en la dirección 1 del arreglo, la persona 2 en la dirección 2, la persona 3 en la dirección 3 del arreglo, etc, etc, etc. Si quisiéramos llenar una dirección 5 se produciría un mensaje límite fuera de rango, ya que queremos poner valores en una dirección que no existe. Como las direcciones están especificadas por un número, podemos utilizar un FOR para rellenar el arreglo en la posición del contador, empezando el contador en el límite inferior del arreglo y terminando en el límite superior. Veamos como se hace:
DIM
personas(4)
AS STRING 'Declaramos
nuestro arreglo Existe otra forma de declarar un arreglo que es la siguiente: Sintaxis: DIM nombre del arreglo(límite inferior TO límite superior) AS tipo de dato De lo anterior podemos deducir que es posible tener arreglos cuyo límite inferior sea cualquier entero corto. Por ejemplo:
DIM
elementos(3
TO
19)
AS INTEGER El limite inferior por default es 0. Sí el límite inferior es cero, porqué empezamos a rellenar el arreglo desde la posición 1?. Si consideramos el formato: DIM nombre del arreglo(tamaño del arreglo) AS tipo de dato podemos ampliar lo siguiente: · Si empezamos a rellenar el arreglo con 1 como límite inferior, entonces QBasic lo entenderá y nos dejará que lo rellenemos desde 1 para terminar en 4. En pocas palabras, si empezamos a rellenar en 1, el tamaño del arreglo permanece igual. · Si queremos llenar el arreglo empezando desde 0, entonces terminaremos de introducir todas las personas en la posición 3 del arreglo. Pero como en realidad tamaño del arreglo es el límite superior, todavía podríamos introducir el nombre de una persona más en la posición 4 del arreglo. En pocas palabras si comenzamos a rellenar el arreglo desde 0, el tamaño del arreglo se incrementaría en 1. Ya que QBasic lo permite, es recomendable empezar a rellenar el arreglo desde 1, aunque hay quién prefiere establecer desde el principio los límites del arreglo usando: DIM personas(1 TO 4) AS STRING Aunque no es muy común que se utilicen arreglos cuyo límite inferior sea diferente de 1, puede que se dé el caso y por eso se usa el TO para poner donde empieza y donde termina un arreglo.
Supongamos que queremos capturar los siguientes datos de 5 personas para luego imprimirlos en el mismo orden en que entraron: · Nombre A simple vista se puede antojar utilizar 5 (1 por cada persona) arreglos de 3 elementos (en cada dirección iría un dato) tipo String; o también 3 (1 por cada dato) arreglos de 5 elementos (en cada elemento iría una persona). Como esto es algo tedioso (imaginemos unas 100 personas y unos 30 datos para algún curriculum...), lo mejor es utilizar un arreglo de dos dimensiones. En realidad la sentencia DIM no se limita a declarar variables o arreglos de 1 sola dimensión, sino que va mucho más allá:
DIM
personas(1
TO
10,
1
TO
5)
ó
DIM
personas(10,
5) 'Arreglo
de 2 dimensiones Las dimensiones de un arreglo en QBasic pueden ser desde 0 (que es una variable sencilla) hasta 60 dimensiones; y el rango de los límites puede ser cualquier número en el intervalo de -36768 a 36767, pero el número de elementos no debe sobrepasar los 36767. Ahora veremos como utilizar un arreglo de dos dimensiones:
DIM
personas(5,
3)
AS STRING · En el ejemplo anterior utilizamos un arreglo de dos dimensiones para almacenar los datos de las personas. La primera dimensión identifica a las personas en una dirección respectiva (la persona 1 se representa en la dirección 1 de la primera dimensión del arreglo, la persona 2 en la dirección 2, la persona 3 en la 3, etc.) y en la segunda dimensión se guardan los datos de cada persona. · Con el primer FOR nos posicionamos en la dirección de la persona y cuando con el segundo FOR terminamos de recolectar los datos, entonces se continua con la siguiente persona. · Los datos se guardan usando la conveniencia de que el elemento 1 de la segunda dimensión corresponde al nombre de la persona, el elemento 2 al apellido y el elemento 3 a la edad. Por esto puse los ELSEIF. Ahora veamos como utilizar un arreglo de 3 dimensiones:
'Recolecta
las horas trabajadas por semana de 2 trabajadores pertenecientes DIM empleados(2, 3, 2) AS INTEGER
FOR
sucursal
=
1
TO
2 · La primera dimensión del arreglo corresponde a la sucursal, la segunda parte al departamento en donde trabaja el empleado y en la 3ª dimensión se almacenará el no. de horas que trabajó en la semana. · El primer FOR nos sirve para primeramente colocarnos en la sucursal, el segundo FOR para colocarnos en el departamento, y el 3er. FOR nos sirve para recolectar las horas trabajadas de los empleados; cuando este ultimo FOR termina, entonces se prosigue con el siguiente departamento; y cuando se terminan los departamentos, entonces continuamos con la siguiente sucursal.
Estas dos funciones nos permiten obtener los límites inferior y superior de la dimensión de un arreglo (UBOUND, abreviatura de Upper Bound o límite superior; LBOUND, abreviatura de Lower Bound o límite inferior) respectivamente. Sintaxis:
UBOUND(nombre
del arreglo[,dimensión]) Si el arreglo es de una dimensión, entonces solo ponemos el nombre del arreglo. Por ejemplo si tenemos el arreglo: DIM cubo(1 TO 20, 2 TO 9, 3 TO 15) AS SINGLE Entonces:
LBOUND(empleados,
1)
'Devolverá
1 que es el límite inferior de la primera dimensión y
UBOUND(empleados,
1)
'Devolverá
20 que es el límite superior de la 1° dimensión Si quisiéramos obtener los límites superior e inferior del siguiente arreglo: DIM vector(3) AS INTEGER Es posible que si en un programa empezamos a rellenar este arreglo desde 1 creamos que como empezamos a rellenar desde 1, entonces LBOUND nos retornará 1; lo cual no hay nada más falso. Por otro lado y como ya hemos visto que los arreglos comienzan virtualmente en 0, entonces:
LBOUND(vector)
'Devolverá
0 ya que los arreglos empiezan desde 0. De lo anterior podemos deducir que: · Suponiendo que empezamos a rellenar un arreglo desde un número que no sea cero y luego queremos referirnos al menor elemento en una determinada dimensión utilizando LBOUND, entonces deberemos poner los limites usando TO. Ejemplo:
DIM
prueba(3
TO
6) · Podemos utilizar la declaración OPTION BASE n para indicar que el limite inferior de todos los arreglos de nuestro programa que no declaremos con TO empezarán en n, donde n puede ser 0 o 1. Ejemplo:
OPTION BASE
0
Existen dos tipos de arreglos: estáticos y dinámicos. Una arreglo estático es un arreglo cuyo número de elementos en cada dimensión permanecerá igual durante le ejecución del programa; por otro lado un arreglo dinámico es un arreglo cuyo número de elementos en cada dimensión puede cambiar en el transcurso del programa; o sea, puede hacerse más chico o más grande. Hasta el momento solo hemos manejado arreglos estáticos. Ya que los arreglos ocupan espacio en memoria, debemos indicarle al compilador si queremos que haga flexible a los arreglos y a la memoria, ó indicarle que los arreglos permanecerán con el mismo número de elementos durante todo el programa. Si vamos a usar arreglos dinámicos en nuestro programa, entonces debemos de poner $DYNAMIC al inicio del programa y a manera de comentario, esto es: '$DYNAMIC ó REM $DYNAMIC Por otro lado si en nuestro programa solo vamos utilizar arreglos estáticos, entonces podemos poner $STATIC al inicio del programa, aunque no es necesario. '$STATIC ó REM $STATIC Todos los arreglos por default son estáticos y tipo Single.
La sentencia ERASE reinicializa un arreglo poniendo todos los elementos a cero y todas las cadenas en nulo ( "" ) (en pocas palabras lo resetea). Ejemplo:
'Ejemplo
de borrado de arreglos. Para borrar más de un arreglo solo hay que ponerlos separados por comas ( , ) después de ERASE. Por otro lado, la sentencia REDIM cambia el numero de elementos que contienen las dimensiones de un arreglo $DYNAMIC.
'Ejemplo
de arreglo dinámicos. REDIM cambia el número de elementos en las dimensiones de un arreglo, no las dimensiones; o sea, no podemos tener algo como:
REM $DYNAMIC Por último solo queda mencionar que al cambiar el tamaño del un arreglo, todos los elementos se resetean (números a 0 y cadenas a "" ). También es posible cambiar el número de elementos del arreglo $DYNAMIC, primero borrándolo con ERASE y luego volver a declarar los límites con DIM, aunque es más engorroso.
'Ejemplo
de arreglo dinámicos II.
|
|||
|
Descargar gratis los programas y compiladores necesarios para aprender a programar |
|||
|
¿Buscas algo? |
|||
|
|
|||
|
|
|||
|
|
|||