Arrays (vectores o matrices)

 

 

Introducción

Una posible definición de array sería:

"Un conjunto de datos del mismo tipo, identificados por el mismo nombre, y que se pueden distinguir mediante un número de índice."

Pero ¿qué quiere decir esto y para qué lo queremos?. Pues bien, supongamos que queremos almacenar la temperatura media de cada hora del día y la temperatura promedio del día. Con lo que sabemos hasta ahora podríamos hacer algo así:

	' Declaramos 24 variables, una para cada hora del día
	DIM temp1!,  temp2!,  temp3!,  temp4!,  temp5!,  temp6!,  temp7!,  temp8!
	DIM temp9!,  temp10!, temp11!, temp12!, temp13!, temp14!, temp15!, temp16!
	DIM temp17!, temp18!, temp19!, temp20!, temp21!, temp22!, temp23!, temp0!
	DIM media!

	' Asignamos el valor de cada una
	INPUT "Introduzca las temperaturas desde las 0 hasta las 23 separadas por comas: ", temp0!, temp1!, ... temp23!

	media = ( temp0! + temp1! + temp2! ... + temp23! ) / 24
	PRINT "La temperatura media es "; media!

Los puntos ... se utilizan por brevedad en el ejemplo; no constituyen una expresión válida en QBasic.

Observamos que hay que realizar un notable trabajo repetitivo de escritura de código. Precisamente es aquí donde son de utilidad los arrays. Vamos a repetir el programa anterior con un array:

	DIM temp!(24)	' Con esto declaramos las 24 variables
	DIM media!
	DIM hora%

	' Ahora damos valor a cada una
	FOR hora% = 0 TO 23
		PRINT "Introduzca temperatura de las"; hora%; "horas: ";
		INPUT "", temp!(hora%)
		media! = media! + temp!(hora%)
	NEXT hora%
	media! = media! / 24

	PRINT "La temperatura media es "; media!

El programa resulta más rápido de escribir y más cómodo para el usuario que el anterior.

Como ya hemos comentado, cuando declaramos una variable lo que estamos haciendo es reservar una zona de la memoria para ella. Cuando declaramos el array de este ejemplo reservamos espacio en memoria para 24 variables de tipo SINGLE. El tamaño del array (24) lo indicamos entre paréntesis al definirlo. Esta es la parte de la definición que dice: Un array es un conjunto de datos del mismo tipo identificados por el mismo nombre.

La parte final de la definición dice: y se distinguen mediante el índice. En el ejemplo recorremos la matriz mediante un bucle FOR y vamos dando valores a los distintos elementos de la matriz. Para indicar a qué elemento nos referimos usamos un número entre paréntesis (en este caso la variable hora), este número es lo que se llama índice del array.

En el ejemplo anterior el primer elemento de una matriz tiene el índice 0, el segundo tiene el 1, y así sucesivamente. De modo que si queremos dar un valor al elemento 4 (índice 3) haremos:

	temp!(3) = 20

No hay que confundirse. En la declaración del array el número entre corchetes es el número total de elementos; en cambio, cuando usamos la matriz, el número entre corchetes es el índice.

Volver al principio de página

 

Declaración de un array

La forma general de declarar un array es la siguiente:

DIM identificador_del_array[sufijo_tipo_dato](dimensión) [AS tipo_de_dato]

donde:

Como se ha indicado antes, al declarar un array reservamos en memoria tantas variables del tipo_de_dato como las indicada en dimensión.

dimensión también se puede especificar dando los límites superior e inferior de los subíndices del array:

DIM identificador_del_array[sufijo_tipo_dato]([inferior TO] superior)

En el ejemplo anterior podríamos haber puesto también:

	DIM temp(0 TO 23) AS SINGLE	' Con esto declaramos las 24 variables

Volver al principio de página

 

Inicialización de un array

En QBasic se inicializan los arrays al asignar valores a cada elemento de los mismos. Es decir, por ejemplo:

	temp!(9) = 20
	temp!(12) = 25
	temp!(20) = 23

Ahora el elemento 10, es decir, temp!(9), valdrá 20. El elemento 13 valdrá 25, y el elemento 21 valdrá 23. El resto, si no se asignan, tomarán valor 0 por defecto. Por ejemplo, el programa:

	DIM temp!(24), hora%

	temp!(9) = 20
	temp!(12) = 25
	temp!(20) = 23

	FOR hora% = 0 TO 23
		PRINT "La temperatura a las";hora%;" era de"; temp!(hora%);"grados."
	NEXT hora%

dará como resultado:

La temperatura a las 0 era de 0 grados.
La temperatura a las 1 era de 0 grados.
La temperatura a las 2 era de 0 grados.
La temperatura a las 3 era de 0 grados.
...
La temperatura a las 9 era de 20 grados.
...
La temperatura a las 12 era de 25 grados.
...
La temperatura a las 20 era de 23 grados.
La temperatura a las 21 era de 0 grados.
La temperatura a las 22 era de 0 grados.
La temperatura a las 23 era de 0 grados.

Vemos que los elementos a los que no se ha asignado valor inicial son nulos

Volver al principio de página

 

Arrays de más de una dimensión

En las secciones anteriores veíamos ejemplos de matrices con una sola dimensión (un sólo índice o subíndice). Pero las matrices pueden contar con más dimensiones. La utilización de matrices multidimensionales no es más que la extensión natural de la correspondiente a unidimensionales.

Supongamos que deseamos controlar mensualmente las temperaturas registradas durante todo un mes. Podemos definir una matriz que dependa de dos índices: el día del mes y la hora del día. Por ejemplo:

	DIM temp!(31,24)	' Matriz de temperaturas "día,hora"
	DIM dia%, hora%

	' Ahora damos valor a cada una
	FOR dia%=1 TO 31
		FOR hora% = 0 TO 23
			PRINT "Introduzca la temperatura del día";dia%;"a las"; hora%; "horas: ";
			INPUT "", temp!(dia%,hora%)

			PRINT "La temperatura introducida es: "; temp!(dia%,hora%)
		NEXT hora%
	NEXT dia%

Vemos que para dimensionar la matriz no tenemos más que utilizar:

DIM matriz(dimension1,dimension2)

o también:

DIM matriz(inferior_1 TO superior_1, inferior_2 TO superior_2)

Y para acceder al elemento caracterizado por los subíndices  i,j de la matriz no hay más que escribir la expresión matriz(i,j).

Esto es generalizable a más dimensiones.

Volver al principio de página

 

Paso de un array a un procedimiento

En QBasic podemos pasar un array entero a una función. Lo que tenemos que hacer es poner como argumento de la función el identificador del array seguido de () para que se reconozca como tal. Considérese este ejemplo:

DECLARE FUNCTION sumar% (m() AS INTEGER)	' Declara la función cuyo argumento es una matriz

' Ejemplo de paso de un array a una función
	DIM matriz(10) AS INTEGER

	FOR contador% = 1 TO 10
		matriz(contador%) = 2*contador%		' Asigna valores a los elementos
		PRINT contador%, matriz(contador%)
	NEXT contador%
	PRINT "La suma es "; sumar(matriz())
END

FUNCTION sumar%( m() AS INTEGER )	' El argumento es el array m() sin especificar la dimensión

	suma% = 0
	FOR i% = 0 TO 10
		suma% = suma% + m(i%)
	NEXT i%

	sumar = suma%
END

Este programa muestra los 10 elementos de un array y halla su suma. Obsérvese que en el argumento de la función sumar se especifica el array pero sin dimensiones, para que tome la dimensión del array utilizado en la llamada al procedimiento en el programa principal.

Volver al principio de página

volver a Inicio