Estructura de Datos Array
Estructura de Datos Array
ESTRUCTUR AS DE DATOS 1:
(arrays y estructuras} 1
CONTENIDO
7.1.
7.2.
7.3.
7.4.
En los captulos anteriores se ha introducido el concepto de datos de tipo simple que representan
valores de tipo simple, como un nmero entero, real o un carcter. En muchas situaciones se ne
cesita, sin embargo, procesar una coleccin de valores que estn relacionados entre s por
algn mtodo, por ejemplo, una lista de calif icaciones, una serie de temperaturas med idas a lo
largo de un mes, etc. El procesamiento de tales conjuntos de datos, utilizando datos simples,
puede ser ex tremadamente dif cil y por ello la mayora de los lenguajes de programacin
incluyen caracters ticas de estructuras de datos. Las estructuras de datos bsicas que soportan
la mayora de Jos lenguajes de programacin son los arrayS -concepto matemtico de
vector y matri z-.
Un array o arreglo en Latinoamrica es una secuencia de posiciones de la memoria central a
las que se puede acceder d irectamente, que contiene datos del mismo tipo y pueden ser seleccio
nados individualmente mediante el uso de subnd ices. Este captulo estudia el concepto de arrays
unidimensionales y multidimensionales, as como el procesamiento de los mismos.
1
El trmino "array se conserva en ingls por su amplia aceptacin en la comunidad de ingeniera informtica y de siste
mas. Sin embargo, es preciso constat:ir que en prcticamente toda Latinoamrica (al menos en muchos de los numerosos pa
ses que conocemos y con los que lenemos relaciones acadmicas y personales) el trmino empleado como traduccin es arre
glo. El DRAE (ltima edicin, 22.', Madrid 21 J no considera ninguno de los dos trminos como vlidos, aunque la acepcin 2
de la definicin de arreglo pudiera ser ilustraci\'a del por qu de la adopcin del !rmino por la comunidad latinoamericana:
"Regla, orden, coordinacin.
247
248
Fundamentos de programacin
datos simples
estndar
entero (integer)
real ( real)
carcter (char)
lgico (boolean)
definido por el
programador ( no estndar)
datos estructurados
estticos
subrango (subrange)
enumerativo (enumerated )
arrays (vectores/matrices)
registros (record)
ficheros (archivos)
conjuntos (set)
cadenas (string )
dinnlicos
listas (pilas/colas)
listas enlazadas
rboles
grafos
Los tipos de datos simples o primitivos significan que no estn compuestos de otras estructuras de
datos; los ms frecuentes y utilizados por casi todos los lenguajes son: enteros, reales y carcter (char},
siendo los tipos lgicos, subrango y enumerativos propios de lenguajes estructurados como Pascal. Los
tipos de datos compuestos estn construidos basados en tipos de datos primitivos; el ejemplo ms re
presentativo es la cadena (string ) de caracteres.
Los tipos de datos simples pueden ser organizados en diferentes estructuras de datos: estticas
y dinmicas. Las estructuras de datos estticas son aquellas en las que el tamao ocupado en
memo ria se detine antes de que el programa se ejecute y no puede modificarse dicho tamao
durante la eje cucin del programa. Estas estructuras estn implementadas en casi todos los
lenguajes: array (vec tores/tablas-matrices). registros,ficheros o archivos (los conjuntos son
especficos del lenguaje Pascal). Las estructuras de datos dinmicas no tienen las limitaciones o
restricciones en el tamao de me moria ocupada que son propias de las estructuras estticas.
Mediante el uso de un tipo de datos espe cfico. denominado puntero, es posible construir
estructuras de datos dinmicas que son soportadas por la mayora de los lepguajes ofrecen
soluciones eficaces y efectivas en la solucin de problen1as con1- plejos -Pascal es el lenguaje
tipo por excelencia con posibilidad de estructuras de datos dinmicos-. Las estructuras dinmicas
por excelencia son las listas --enlazadas, pilas, colas-, rboles -binarios, rbol-b, bsqueda binaria
y grafos.
La eleccin del tipo de estructura de datos idnea a cada aplicacin depender esencialmente del
tipo de aplicacin y. en menor medida. del lenguaje. ya que en aquellos en que no est implementada
una estructura -por ejemplo, las listas y rboles no los soporta COBOL- deber ser simulada con
el algoritmo adecuado, dependiendo del propio algoritmo y de las caractersticas del lenguaje su fcil
o difcil solucin.
Una caracterstica importante que diferencia a los tipos de datos es la siguiente: los tipos de datos
simples tienen como caracterstica comn que cada variable representa a un elemento: los tipos de da
tos estructurados tienen como caracterstica comn que un identificador (nombre) puede representar
mltiples datos individuales, pudiendo cada uno de stos ser referenciado independientemente.
249
'""'
NOTAS ( I )
NOTAS ( 2 )
NOTAS ( l )
NOTAS ( N )
1 i
El subndice o ndice de un elemento (1, 2, ..., i, n) designa su posicin en la ordenacin del vec
tor. Otras posibles notaciones del vector son:
en matemticas y algunos lenguajes (VB 6.0 y VB.Net)
A(l ) , A(2)
,
..
.'
A[l ] , A[2]
,
A{i )
,
A[i ]
,
...'
A(n)
A[n]
en programacin ( Pascal y C)
Obsrvese que slo el vector global tiene nombre ( NOTAS ) . Los elementos del vector se refe
rencian por su subndice o ndice ( subscript), es decir, su posicin relativa en el valor.
En algunos libros y tratados de programacin, adems de las notaciones anteriores, se suele utili
zar esta otra:
A ( L :U } "' ( A ( I ) }
para I L, L+l,
. . . , U-1, U
que significa: A, vector unidimensional con elementos de datos tipo T, cuyos subndices varan en
el rango de L a U, lo cual significa que el ndice no tiene por qu comenzar necesariamente en O o
en l.
Como ejemplo de un vector o array unidimensional, se puede considerar el vector TEMPERATU
RA que contiene las temperaturas horarias registradas en una ciudad durante las veinticuatro horas del
da. Este vector constar de veinticuatro elementos de tipo real, ya que las temperaturas normalmente
no sern enteras siempre.
El valor mni mo pennitido de un vector se denomina lmite inferior del vector (L) y el valor m
ximo pennitido se denomina lmite superior (U). En el ejemplo del vector TEMPERATURAS el lmite
inferior es 1y el superior 2 4.
y.:;,,TEMPERATURAS ( I )
El nmero de elementos de un vector se denomina rango del vector. El rango del vector A ( L :U
) es U-L+l. El rango del vector B ( :n) es n.
Los vectores, como ya se ha comentado. pueden contener datos no numricos, es decir, tipo ca
rcter>>. Por ejemplo, un vector que representa las frutas que se venden en un supermercado:
250
Fundamentos de programacin
FRUTAS(l
) FRUTAS
(2)
\ .S.\
uvas
manzanas
papayas
FRUTAS(I)
.
.
.
.
melocotones
FRUTAS ( N)
--
_j
Otro ejemplo de un vector pueden ser los nombres de los alumnos de una clase. El vector se de
nomina ALUMNOS y tiene treinta elementos de rango.
ALUMNOS
Luis Francisco
Jose
Victoria
Martn
30
Graciela
NUMEROSll]
Direccin X
NUMEROS[2]
Direccin X+l
NUMEROS[3]
Direccin X+2
NUMEROS [ 50 ]
Direccin X+49
251
Cada elemento de un vector se puede procesar como si fuese una variable simple al ocupar una
posicin de memoria. As,
NUMEROS [ 2 5 ]
f-
72
almacena el valor entero o real 72 en la posicin 25. del vector NUMEROS y la instruccin de salida
'( OIUO:J ,101
escribir ( NUMEROS [ 2 5 ] )
X[2]
X[3)
X[4]
X[5]
X[6]
X[7]
X[8)
14 . 0
12 . 0
8.0
7.0
6 . 41
5.23
6 .15
7 .25
Elemen10
l.
Elemento
Elemento
2.
8.
Acciones
Resultados
escribir ( X [1] l
X [ 4 ) f- 4 5
SUMA f- X [ l ] + X [
3 ] SUMA f- SUMA+
X [ 4 ] X [ 5 ] f- x [ 5
]+3,5
X [ 6 ] f- X [ l ] + X [
2]
'
Visualiza el valor de X [ 1] o 14 . O.
Almacena el valor 45 en X [ 4 ] .
Almacena la suma de X [ 1] y x [ 3 ] o bien 22.0 en la variable
SUMA. Aade en la variable SUMA el valor de X [ 4 J , es decir.
SUMA = 67 . O. Suma 3 .5 a X [ 5 ) ; el nuevo valor de X [ 5 ] ser 9
.91.
Almacena la suma de X [ 1] y X [ 2 ] en X [ 6 ] ; el nuevo valor de X [ 6 ] ser 2 6 . 5.
Antes de pasar a tratar las diversas operaciones que se pueden efectuar con vectores, considere
mos la notacin de los diferentes elementos.
"
Supongamos un vector V de ocho elementos.
V[l ]
V[2]
V[3]
12
-7
V[4]
14 . 5
V[5]
V[6]
V[7]
V[Sl
20
l.5
2.5
-10
Los subndices de un vector pueden ser enteros, variables o expresiones enteras. As. por ejem
plo, si
I +3J
I <- 4
V [ I+ l )
V[I +2
] V [ I
-2 ] V [
valor 2 . 5
.1')1'.lil1
. ' . t
'
252
Fundamentos de programacin
. . . , X [n]
"'
contiene seis elementos, en el que el primer elemento comienza en cero. El vector P, cuyo rango es 7
y sus lmites inferior y superior son -3 y 3, es
[[ )X
P [ -3 ) ,
3]
P [ -2 ] , P [ -1) ,
P[O] , P[l ] ,
P[2] ,
-1
P[
Las operaciones que se pueden realizar con vectores durante el proceso de resolucin de un pro
blema son:
asignacin,
lectura/escritura,
recorrido (acceso secuencial),
actualizar (aadir, borrar, insertar),
orde11ll cin,
bsqueda.
)'..IUltni i.'BnugIA
En general, las operaciones con vectores implican el procesamiento o tratamiento de los elemen
tos individuales del vector.
Las notaciones algortmicas que utilizaremos en este libro son:
tipo
array [ l iminf
nombre_array
l imi nf . .l
imsup t ipo
. . l imsup } de t ipo
nombre_array
tipo
array [ l . . 10 ) de car ct
er
NOMBRES
var
NOMBRES : N
significa que NOMBRES es un array (vector) unidimensional de diez elementos (1 a 10) de tipo ca
rcter.
tipo
real
var
LISTA : L
LISTA
Estructuras de
253
;.e.\'
t ipo
array[0 ..100] de entero : NUMERO
var
NUMERO: NU
7.3.1. Asignacin
La asignacin de valores a un elemento del vector se realizar con la instruccin de asignacin:
A[29]
f-
Si se desea asignar valores a todos los elementos de un vector, se debe recurrir a estructuras
repe titivas (desde, mient ras o repetir) e incluso selectivas (si-entonces, segun).
leer ( A [ i ] J
01ne1m1osoo
>'"\
OOl.1..i:'l'.O'Q! S
asignaciones
oql'.1
' 'lJS'l'.:ta
A [l ]
uv
f-
,JAV!l 'i
A [ 2 ] f- 7
A [ 3 ] f- 8
A[4]
o.t olo:l:
b
14
f-
A [ 5 ] f- 12
'
El ejemplo anterior ha asignado diferentes valores a cada elemento del vector A; si se desea dar el
mismo valor a todos los elementos, la notacin algortmica se simplifica con el formato.
desde i
A[i ]
f-
= 1 hasta 5 hacer
8
fin_desde
donde A[i] tomar los valores numricos
A [ l ] = 8 , A [ 2 ] = 8 , . . ., A [ 5 ] 8
e-
para indicar la asignacin de un mismo valor a cada elemento de un vector A. Esta notacin se consi
derar con mucho cuidado para evitar confusin con posibles variables simples numricas de igual
nombre (A).
254
Fundamentos de programacin
leer ( V [ S J )
' ]Vi
\) y
Se puede acceder a los elementos de un vector para introducir datos ( escribir) en l o bien para vi
sualizar su contenido ( leer). A la operacin de efectuar una accin general sobre todos los elementos
de un vector se la denomina recorrido del vector. Estas operaciones se realizan utilizando estructuras
repetitivas, cuyas variables de control (por ejemplo, I) se utilizan como subndices del vector (por
ejemplo, S [ I ] ). El incremento del contador del bucle producir el tratamiento sucesivo de los ele
mentos del vector.
Ejemplo 7.1
Lectura de veinte valores enteros de un vector denominado F.
Procedimiento 1
algoritmo leer_vect
or tipo
array [ l . . 2 0 ] de enter
o
FINAL
- r1, .
var
FINAL
inicio
desde i f- 1 hasta 2 0 hacer
leer ( F [ i J
) f in_desde
-t
r ,- .< ,,,
fin
Procedimiento 2
'JA
Los elementos del vector se pueden leer tambin con bucles mientras o repetir,
i
mi'"e""ntras
<
'
leer ( F [ i ] }
'"""
i +1
20 hacer
'"""
rep t ir
o bien
.1.Gq '
hasta_que
i > 20
255
t:N\oa.
'.!:";';
Ejemplo 7.2
Este ejemplo procesa un array PUNTOS,realizando las siguientes operaciones; a) lectura del array,
b) clculo de la suma de los valores del array, e) clculo de la media de los valores.
El array lo denominaremos PUNTOS; el lmite superior del rango lo introduciremos por teclado y
el lmite inferior lo consideraremos 1.
algoritmo media_puntos
const
LIMITE = 40
tipo
array[l ..LIMITE) de
real
PUNTUACION
var
PUNTUACION : PUNTOS
real : suma, media
entero : i
inicio
suma f- O
escribir ('Datos del array' )
desde i +-- 1 hasta LIMITE hacer
leer (PUNTOS[i] )
suma +-- suma+PUNTOS[i]
fin_desde
media +-- suma/LIMITE
escribir ('La media es' , media}
fin
Se podra ampliar el eje1nplo, en el sentido de visualizar los elementos del arra;'.cuyo valor es su
perior a la media. Mediante una estructura desde se podra realizar la operacin, aadindole al al
goritmo anterior.
escribir(' Elementos del array superior a la media')
desde i +-- 1 hasta LIMITE hacer
si PUNTOS[i] > media entonces
escribir{PUNTOS(i])
fin_si
fin_desde
Ejemplo 7.3
Cal cular ta med ia de las estaturas de una clase. Deducir cuntos son ms altos que Ja media y cun
tos son ms bajos que dicha media.
11
256
Fundamentos de programacin
Soluci
n
..1.J
Tabla de
variables
n
H[
] ...H [ n]
i
MEDIA
ALTOS
BAJOS
SUMA
inicio
leer n
entera
real
entera
real
entera
entera
real
:: '
/
si
i=
i fj + 1
MEDIA
+--- SUMNn
n
BAJOS +--- O
ALTOS +--- O
e_el
1 <-
L/
_,_H
m'- /
tll-
O".l83l1S
of o.l: nl
,.
b
SUMA +--SUMA+H{ij
BAJOS r+--BAJOS + 1
_s;ei_
= <i media??
'" n -< n
i ifH[i]
0
r---+n?
H(i]
1 > MEDIA
_>----""---:i.
o
o
si
f +- ALTOS +1
escribir
ALTOS
n,
no
MEDIA
BAJOS, ALTOS
(
fin
e
m
d
clculo
'19(3
__
...
257
elementos
elementos
elementos
Se denomina aadir datos a un vector la operacin de aadir un nuevo elemento al final del vec
tor. La nica condicin necesaria para esta operacin consistir en la comprobacin de espacio de me
moria suficiente para el nuevo vector; dicho de otro modo, que el vector no contenga todos los ele
mentos con que fue definido al principio del programa.
Ejemplo 7.4
Un array TOTAL se ha dimensionado a seis elementos, pero slo se le han asignado cuatro valo
res a los elementos TOTAL[l], TOTAL[2], TOTAL[3] y TOTAL[4]. Se podrn aadir dos elemen
tos ms con una simple accin de asignacin.
TOTAL [ 5 ]
TOTAL [ 6 ]
ff-
14
12
La operacin de insertar un elemento consiste en introducir dicho elemento en el interior del vec
tor. En este caso se necesita un desplazamiento previo hacia abajo para colocar el elemento nuevo en
su posicin relativa.
Ejemplo 7.5
Se tiene un array COCHES2 de nueve elementos de contiene siete marcas de automviles en or
den alfabtico y se desea insertar dos nuevas marcas: OPEL y CITROEN.
Como Opel est comprendido entre Lanc ia y Renaul t, se debern desplazar hacia abajo
los elementos 5 y 6, que pasarn a ocupar la posicin relativa 6 y 7. Posteriormente debe
realizarse la ope racin con C it ron, que ocupar la posicin 2.
El algoritmo que realiza esta operacin para un vector de n elementos es el siguiente, suponiendo
que haya espacio suficiente en el vector.
1. //Calcular la posicin ocupada por el elemento a insertar (por ejemplo, P)
2. //Inicializar contador de inserciones i f- n
3. mientras i >= P hacer
//transferir el elemento actual i-simo hacia abajo, a la posicin
i+l COCHES[i+l] f- COCHES[i]
//decrementar contador
4.
5.
6.
7.
f-
i-1
fin_mientras
//insertar el elemento en la posicin
P COCHES[P] f- 'nuevo elemento'
//actualizar el contador de elementos del vector
n f- n+l
fin
258
Fundamentos de
programacin
In sert ar
OPEL
b)
a) COCHES
1 Alfa
Romeo
2
Fiat
1 Alfa
1 Alfa Romeo
Romeo
Citron
3
4
Fiat
Ford
Opel
Ford
Ford
Lancia
Lancia
Seat
6
.J
Eenault
Opel
Lancia
seat
Renault
Seat
Renault
.A ....C.
Fiat
e) Insert ar
CITROEN
"
S se deseara realzar ms insercones, haba que ncluir una estructura de decsn si-enton
ces para preguntar si se van a realizar ms inserciones.
La operacin de borrar un elemento al final del vector no presenta ningn problema; el borrado de
un elemento del interior del vector provoca el movimiento hacia arriba de los elementos inferiores a
l para reorganizar el vector.
inicio
//se utilizar
variable auxiliar -AUX- que contendr el
una
valor se desea borrar
//del elemento
que AUX fCOCHES[j]
desde i f- j hasta N-1 hacer
//llevar elemento j+l haci a arriba
COCHES[i] f- COCHES[i +l]
fin_desde
//actualizar contador de elementos
//ahora tendr un elemento menos, N-1
N
f-
N-1
fin
(mes/unidades vendidas o bien mes/ventas totales), etc. Se pueden definir tablas o matrices como
arrays multidimensionales, cuyos elementos se pueden referenciar por dos, tres o ms subndices. Los
arrays no unidimensionales los dividiremos en dos grandes grupos:
arrays bidimensionales
arrays
multidimensionales
(2 dimensiones)
(3 o ms dimensiones)
7.4.1.
259
l b
Fila 3
Fila 4
Fila s
i
1
ri
olumna 6
Columna 5
""'
Columna 4
Columna 3
Columna 2
Columna 1
...
B[I ,J ]
'
M
...
J del array s.
260
Fundamentos de programacin
donde
I = l, .. . , M
J = 1, . . . , N
cada elemento B [ I , J 1 es de tipo T.
o bien
El array B se dice que tiene M por N elementos. Existen N elementos en cada fila y M elementos
en cada columna ( M*N) .
Los arrays de dos dimensiones son muy frecuentes: las calificaciones de los estudiantes de una
clase se almacenan en una tabla NOTAS de dimensiones NOTAS [ 2 O , 5 ] , donde 20 es el n1nero
de alumnos y 5 el nmero de asignaturas. El valor del subndice I debe estar entre 1 y 20, y el de J
en tre 1 y 5. Los subndices pueden ser variables o expresiones numricas, NOTAS (M, 4 ) y en ellos
el subndice fila ir de 1a M y el de columnas de 1a N.
En general, se considera que un array bidimensional comienza sus subndices en O o en 1 (segn
el lenguaje de progra1nacin, O en el lenguaje C, 1 en FORTRAN), pero pueden tener lmites selec
cionados por el usuario durante la codificacin del algoritmo. En general, el array bidimensional B
con su primer subndice, variando desde un lmite inferior L (inferior, lotv) a un lmite superior U (su
perior, up). En notacin algortmica
,,
B ( Ll :Ul , L2 :U2 ) = ( B [ I , J] }
donde
','
Ll < = I < =
Ul L2 <= J <=
U2
cada eletnento B [ I ,
J]
es del tipo T.
Ejemplo 7.6
La matriz T representa una tabla de notaciones de saltos de altura (primer salto), donde las f ilas
representan el nombre del atleta y las columnas las dif erentes alturas saltadas por el atleta. Los
smbolos almacenados en la tabla son: x, salto vlido; O, salto nulo o no intentado.
2.00
2.10
2.20
2.30
2.35
2.40
Garca
Prez
Gil
Mortirner
o
o
o
o
o
o
X
o
o
[.- ''. , ,
261
'
Ejemplo 7.7
i:
- .t.
.t.
i:
.t. .t.
.t.
- , : .:..e::
.t.
, J. U :IJ ) A
' f!Jj ''(
.fl. iw
. 'lll 8
.fl.
.t.
d
8
l:t ll
"( I +.,J-,:J ) D
l +..1- -U )
, )i ) A
Ejemplo 7.8
NOTA
El array f resume la inf ormacin de la estructura de la red de enlaces.
.)
262
Fundamentos de programacin
,("! (' .
r,
<=
uk
donde k = l , 2 ,
..., n
( U,-L;+l)
* ...*
( UN-LN+l )
Ejemplo 7.9
Un array de tres d imensiones puede ser uno que contenga los datos relativos al nmerO
diantes de la universidad ALFA de acuerdo a los siguientes criterios:
d;estu
Figura 7 .6.
263
Ejemplo 7.10
Otro array de tres dimensiones puede ser PASAJE que representa el estado actual del sistema
de reserva de una lnea area, donde
i
.,
= l, 2,
..
10
j = l, 2 '
k = l, 2 ,
60
12
Entonces
pasa j e [ i , j ' k]
pasa j e [ i , j ' k]
asento libre
asiento ocupado
'\f , _;,"
A [ 1,
1J A [ l , 2 ] A [ l , 31 A [ l , 4 ]
A(2]
A[2,
1J A ( 2 , 2 1 A [ 2 , 31 A [ 2 , 4 ]
A[3,
1J A [ 3 , 2 ] A [ 3 , 31 A [ 3 , 4 ]
A[i ]
.
.
A[n]
8)
b)
, s.a:
_, . ..
Figura 7.7.
b1Q
264
Fundamentos de programacin
'
ot'.l' olqmE>f3
..,
' :;,: ' l
,
,.
AA
Posicin B
B+n[ [l3.]]
1
Posicin
Si cada elemento del array ocupa s bytes (1 byte = 8A[n]
bits) y B es la direccin inicial de la
.
B+1 -posicin o direccin A[2]
memo ria central de la computadora
base-, la direccin inicial del elemento
i-simo sera:
B+ ( I- l ) *S
.
A
[i ]
Al130AMJA
.<
NOTA
Si el lmite inferior no es igual a 1, considrese el array declarado como N(4:10); la direc
cin inicial de N(6) es B+(6-4)*S.
265
1 B [ l , 1] 1 B [ l , 2 ] 1 B [ l , 3 ] 1 B [ 2 , 1] 1 B [ 2 , 2 ] 1 B [ 2 , 3 ]
Fila 1
Fifa 2
B
Columna 1
2
Columna
Columna 3
'
De modo general, el compilador del lenguaje de alto nivel debe ser capaz de calcular con un ndi
ce [ i, j ] la posicin del elemento correspondiente.
l
En un array en orden de fila mayor, cuyos subndices mximos sean m y n ( m, filas;
n,
columnas), la posicin p del elemento [i,j] con relacin al primer elemento es
p = n ( i-l ) +
l'
Para calcular la direccin real del elemento [i,j] se aade p a la posicin del primer elemento y se
resta 1 . La representacin grfica del almacenamiento de una tabla o matriz B [ 2 , 4 ] y e [ 2 , 4 J
.
B [ l , 1) .B [ l , 2 ]
B [ 1, 1]
E [ 1,
B [ 2 , 3 )-i..B [ 2 , 4 ]
B[l , 2]
B [ 2 , 11
B [ 2 , 1)- B [ 2 , 2 ]
11
B [ 1, 3 )-.B [ 1, 4 )-
B [ 1, 3 ]
B [ 1, 4 ]
a]
B [ 2 , 1)
B[2, 2]
B[2, 3]
B[2, 4]
B [ 11,
21
B[2,
21
B ( 1,
31
B[2, 3J
B
B[l , 4]
B[2, 4]
[
B
B
1
l
[,
,
:r.\
b)
,,]
]
l4
]
]
a)
b)
l
B
266
Fundamentos de programacin
A [ 2 , 1, 3 ) A [ 2 , 2 , 3 ] A [ 2 , 3 , 3 ] A [ 2 , 4 , 3 ]
A [ l , 1, 2 ] A [ l , 2 , 2 ] A [ l , 3 , 2 ] A [ l , 4 , 2 ]
/ / /
3]
')
'!
A [ 2 , 1, 2 ] A [ 2 , 2 , 2 ] A [ 2 , 3 , 2 ] A [ 2 , 4 , 2 ]
A [ l , 1, l] A [ l , 2 , 1] A [ l , 3 , 1] A [ l , 4 , 1]
/ / /
A [ 2 , 1, l ] A [ 2 , 2 , 1] A [ 2 , 3 , l ] A [ 2 , 4 , l]
Consideremos un ejemplo del clculo del valor medio de los elementos de un array A de 50 por
300 elementos, A [ 5O , 3 O O J Los algoritmos de almacenamiento respectivos sern:
f-
f-
t ot al +a [ i , j ]
3
fin_desde
fin_desde
med ia
t ot al / ( 30 0*50 }
f-
f-
desde i
desde
'
]
f-
1 hasta 50 hacer
hasta 300 hacer
j f- 1
t ot al f- t ot al +a [ i , j]
f-
fin_desde
fin_desde
media
t ot al / ( 300 *50 )
267
se se accede mediante una referencia. Sin embargo, en muchas ocasiones se requiere el uso de tipos va
lor. Las variables de un tipo valor contienen directamente los datos, mientras que las variables de tipos
3
referencia almacenan una referencia al lugar donde se encuentran almacenados sus datos. El acceso a
los objetos a travs de referencia aade tareas y tiempos suplementarios y tambin consume espacio.
En el caso de pequeos objetos este espacio extra puede ser significativo. Algunos lenguajes de pro
gramacin como C y los orientados a objetos como C++, C#, ofrecen el tipo estructura para resolver
estos inconvenientes. Una estructura es similar a una clase en orientacin a objetos ]e igual a un regis
tro en lenguajes estructurados como C pero es un tipo valor en lugar de un tipo referencia.
7.7.1. Registros
Un registro en Pascal es similar a una estructura en C y aunque en otros lenguajes como C# y C++
las estructuras pueden actuar como clases, en este captulo restringiremos su definicin al puro regis
tro contenedor de diferentes tipos de datos. Un registro se declara con la palabra reservada
estructura (struct, en ingls) o registro y se declara utilizando los mismos pasos necesa
rios para utilizar cualquier variable. Primero, se debe declarar el registro y a continuacin se asignan
valores a los miembros o elementos individuales del registro o estructura.
Sintaxis
registro:
nombre_tipo
tipo_l: campo]
tipo_2:
estructura:
Ejemplo
campo2
fin_registro
nombre_clase tipo_l:
campal tipo_2:
estructura:
fechaNacimiento
campo2
entero:
mes 11 mes de nacimiento
entero: dia 11 da de nacimiento
fin_estructura
entero:
ao 11 ao de nacimiento
Pin_estructura
La declaracin anterior reserva almacenamiento para los elementos de datos individuales denomi
nados campos o miembros de la estructura. En el caso de fecha, la estructura consta de tres campos
da, mes y ao relativos a una fecha de nacimiento o a una fecha en sentido general. El acceso a los
miembros de la estructura se realiza con el operador punto y con la siguiente sintaxis
Nombre_estructura.miembro
268
Fundamentos de programacin
reserva almacenamiento para dos variables llamadas Cumpleaos y delDia, respectivamente. Cada
una de estas estructuras individuales tiene el mismo formato que el declarado en la clase Fecha.
Los miembros de una estructura no estn restringidos a tipos de datos enteros sino que pueden ser
cualquier tipo de dato vlido del lenguaje. Por ejemplo, consideremos un registro de un empleado de
una empresa que contase de los siguientes miembros:
estructura Empleado
Cadena: nombre
entero: idNumero
real: Salar-io
Fecha:
FechaNacimiento
entero: Antigedad
fin_estructura
<--- :
'
'
'
Nmero de empleado
Salarlo
97005
95758
87124
67005
20001
20020
99002
20012
21001
97005
1.500
1.768
2.456
3.125
2.156
1.990
2.450
4.780
3.590
3.574
grama que maneje los registros para poder ser manipulados con
eficacia. La declaracin de un array de estructuras es similar a la
declaracin de un array de cualquier otro tipo de variable. En conse
cuencia, en el caso del archivo de empleados de la empresa se puede
declarar el array de empleado con el nombre Empleado y el registro
o estructura lo denominamos Regis t roNomina
estruc
tu
ra
:
Re
g
is
tr
oN
om
in
a
en
te
ro
:
Nu
mE
mp
le
ad
o
ca
de
na
[3
0)
:
No
mb
re
re
al
:
Sa
la
ri
o
fin_estructura