Vous êtes sur la page 1sur 11

Tema 6.

Arrays

Introduccin
Definicin de estructuras de datos Concepto de array Array unidimensionales Vectores Array multidimensionales Matrices Operaciones bsicas con arrays Uso de arrays como parmetros Tipos de datos definidos por el usuario Tipos de datos subrango y enumerado
Tema 6. Arrays 2

Estructuras de datos
Estructuras de datos o tipos de datos estructurados son tipos de datos construidos a partir de otros tipos de datos Tipos de estructuras de datos segn
Tipo de datos
Homognea: Todos los elementos tienen el mismo tipo de datos Heterognea: Los elementos pueden incorporar distintos tipos de datos

Cantidad de datos
Esttica: Tienen un nmero fijo de elementos Dinmica: Tienen un nmero variable de elementos

A la hora de determinar la estructura de datos que debe de utilizarse en un determinado problema, la eleccin depender del problema en s, y no tanto del lenguaje de programacin escogido para la implementacin de su solucin

Tema 6. Arrays

Ejemplo
LEER(NOMBRE1,NOTA1,NOMBRE2,NOTA2,NOMBRE3, LEER(NOMBRE1,NOTA1,NOMBRE2,NOTA2,NOMBRE3, NOTA3,NOMBRE4,NOTA4,NOMBRE5,NOTA5 ) MEDIA(NOTA1+NOTA2+NOTA3+NOTA4+NOTA5)/5 MEDIA SI NOTA1 >= MEDIA ENTONCES ESCRIBIR ( NOMBRE1 , 'est aprobado' ) FIN_SI SI NOTA2 >= MEDIA ENTONCES ESCRIBIR ( NOMBRE2 , 'est aprobado' ) FIN_SI SI NOTA3 >= MEDIA ENTONCES ESCRIBIR ( NOMBRE3 , 'est aprobado' ) FIN_SI SI NOTA4 >= MEDIA ENTONCES ESCRIBIR ( NOMBRE4 , 'est aprobado' ) FIN_SI SI NOTA5 >= MEDIA ENTONCES ESCRIBIR ( NOMBRE5 , 'est aprobado' ) FIN_SI LEER(NOMBRE1,NOTA1,NOMBRE2,NOTA2,., NOMBRE100,NOTA100 ) MEDIA (NOTA1+NOTA2++NOTA100)/100 SI NOTA1 >= MEDIA ENTONCES ESCRIBIR ( NOMBRE1 , 'est aprobado' ) FIN_SI SI NOTA2 >= MEDIA ENTONCES ESCRIBIR ( NOMBRE2 , 'est aprobado' ) FIN_SI SI NOTA100 >= MEDIA ENTONCES ESCRIBIR ( NOMBRE100 , 'est aprobado' ) FIN_SI

Tema 6. Arrays

Arrays
Se utilizan subndices (al igual que se hace en Matemticas) que actan como contador de variables, todas del mismo tipo, pero en lugar de utilizar Ai usaremos la notacin A[i] Un array es una estructura de datos formada por una cantidad fija de datos del mismo tipo, cada uno de los cuales tiene asociado uno o ms ndices que determinan de forma unvoca la posicin del dato en el array Si tiene asociado un solo ndice se habla de VECTORES Si tiene asociado ms de un ndice se habla de MATRICES Para poder utilizar un array es necesario especificar el nmero de elementos que contiene y el tipo de datos de los elementos La declaracin de una variable de tipo array tiene la siguiente sintaxis Ident_var:ARRAY[valorinicial..valorfinal] DE tipodato valorinicial y valorfinal determinan el rango del ndice de manera que para acceder a cualquier elemento del array valorincial<=ndice<=valorfinal (el nmero de elementos del array es valorfinal-valorinicial+1) valorinicial y valorfinal deben pertenecer a un tipo ordinal y no pueden ser variables (deben ser constantes o valores constantes)
Tema 6. Arrays 5

Arrays
Cuando se declara un array, se reserva una cantidad de memoria fija, que es inalterable durante toda la ejecucin del programa, ocupando cada componente del vector un espacio en memoria igual al que ocupa el tipo de dato al que pertenece dicho componente Todas las posiciones ocupadas por un vector se reservan/almacenan de forma contigua en memoria
A: ARRAY[1..100] de ENTEROS se reservan 100 elementos * 2 bytes/elemento=200 bytes B: ARRAY[10..19] de CARACTER se reservan 10 elementos * 1 bytes/elemento=10 bytes

Tema 6. Arrays

Arrays unidimensionales
La nica operacin que se puede realizar sobre un array es la seleccin. Para ello es necesario especificar el nombre del array y la posicin a la que se quiere acceder. Una vez seleccionada una posicin se pueden utilizar todas las operaciones que permita el tipo de datos del array Podemos ver un array como una estructura de celdas donde se pueden almacenar valores Ejemplo
Notas: ARRAY[1..5] de REALES
? ? ? ? ?

El array notas tiene 5 casillas que pueden contener valores reales. Una vez que se accede a un elemento del array se puede tratar como un nmero real simple Notas[2] 5.5 ? ? ? ? 5.5 Notas[1] 3.7 Notas[3] (Notas[1]+Notas[2])/2
Tema 6. Arrays

3.7

5.5

4.6

Arrays multidimensionales
Un array es un conjunto de elementos del mismo tipo y este tipo puede ser a su vez otro array:
Clase: ARRAY[1..3] de ARRAY[1..5] de REALES

Se trata de arrays bidimensionales puesto que se necesitan dos ndices para acceder a cada elemento. La declaracin anterior es equivalente a
Clase: ARRAY[1..3,1..5] de REALES

El nmero de elementos del array multidimensional ser la multiplicacin del los elementos de cada uno de los ndices. En el ejemplo anterior ser (3-1+1)*(5-1+1)=15
Clase[2,4] 7.5
1 2 3 1
Tema 6. Arrays

7.5

5
8

Lectura/Escritura de elementos de un vector


ALGORITMO lectura_escritura. CONSTANTES MAX=500 VARIABLES A:ARRAY[1..MAX] de ENTEROS N,i:ENTERO 1.[Entrada del nmero de elementos del array N] REPETIR ESCRIBIR('Introduzca el n de datos ') LEER(N) HASTA ((N>0) AND N<=MAX)) 2.[Entrada de los N elementos del array] PARA i=1 HASTA N HACER ESCRIBIR('Introduzca el dato n ',i,': ') LEER(A[i]) FIN_PARA 4.[Escritura de los N elementos del array] PARA i=1 HASTA N HACER ESCRIBIR('El Elemento',i,' del array es ',A[i]) FIN_PARA 5.[Fin]
Tema 6. Arrays

Para el resto de ejercicios se supone que los datos de entrada son los siguientes N=10 A=[2,4,0,3,8,10,2,0,5,4] i 1 2 3 4 5 6 7 8 9 10
A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10]

2 2 2 2 2 2 2 2 2 2 i 1 2 . 10

4 4 4 4 4 4 4 4 4

0 0 0 0 0 0 0 0

3 3 3 3 3 3 3

8 8 8 8 8 8

10 10 10 10 10

2 2 2 2

0 0 0

5 5

Salida por pantalla El Elemento 1 del array es 2 El Elemento 2 del array es 4 . El Elemento 10 del array es 4
9

Suma de los elementos de un vector


ALGORITMO suma.
N=10 i 1 2 3 4 5 6 7 8 9 10 S 0 2 6 6 9 17 27 29 29 34 38 A=[2,4,0,3,8,10,2,0,5,4] A 2 4 0 3 8 10 2 0 5 4 2 4 0 3 8 10 2 0 5 4 2 4 0 3 8 10 2 0 5 4 2 4 0 3 8 10 2 0 5 4 2 4 0 3 8 10 2 0 5 4 2 4 0 3 8 10 2 0 5 4 2 4 0 3 8 10 2 0 5 4 2 4 0 3 8 10 2 0 5 4 2 4 0 3 8 10 2 0 5 4 2 4 0 3 8 10 2 0 5 4 2 4 0 3 8 10 2 0 5 4

{-- Lectura de los datos de entrada--}


{------ suma de los elementos --------} S0 PARA i=1 HASTA N HACER S S+A[i] FIN_PARA ESCRIBIR('La suma es ',S)

Salida por pantalla: La suma es 38


Tema 6. Arrays 10

Mayor elemento de un vector


ALGORITMO mayor.
N=10 A=[2,4,0,3,8,10,2,0,5,4]

{----- Lectura de los datos ----}


{--- clculo del mayor elemento --} mayor A[1] i_mayor 1 PARA i=2 HASTA N HACER SI mayor < A[i] ENTONCES mayor A[i] i_mayor i FIN_SI FIN_PARA ESCRIBIR(El elemento mayor est en la posicin ,i_mayor, con valor ,mayor)

i mayor i_mayor A 2 1 2 4 2 2 2 4 3 2 2 4 4 2 2 8 5 5 2 10 6 6 2 10 7 6 2 10 8 6 2 9 6 2 10 10 10 6 2

4 4 4 4 4 4 4 4 4 4

0 0 0 0 0 0 0 0 0 0

3 3 3 3 3 3 3 3 3 3

8 8 8 8 8 8 8 8 8 8

10 10 10 10 10 10 10 10 10 10

2 2 2 2 2 2 2 2 2 2

0 0 0 0 0 0 0 0 0 0

5 5 5 5 5 5 5 5 5 5

4 4 4 4 4 4 4 4 4 4

Salida por pantalla: El elemento mayor est en la posicin 6 con valor 10

Tema 6. Arrays

11

Menor elemento de un vector


ALGORITMO menor.
N=10 A=[2,4,0,3,8,10,2,0,5,4]

{----- Lectura de los datos ----}


{--- clculo del menor elemento --} menor A[1] i_menor 1 PARA i=2 HASTA N HACER SI menor > A[i] ENTONCES menor A[i] i_menor i FIN_SI FIN_PARA ESCRIBIR(El elemento menor est en la posicin ,i_menor, con valor ,menor)

i menor i_menor A 2 1 2 2 2 1 2 0 3 3 2 0 4 3 2 0 5 3 2 0 6 3 2 0 7 3 2 0 8 3 2 9 3 2 0 10 0 3 2

4 4 4 4 4 4 4 4 4 4

0 0 0 0 0 0 0 0 0 0

3 3 3 3 3 3 3 3 3 3

8 8 8 8 8 8 8 8 8 8

10 10 10 10 10 10 10 10 10 10

2 2 2 2 2 2 2 2 2 2

0 0 0 0 0 0 0 0 0 0

5 5 5 5 5 5 5 5 5 5

4 4 4 4 4 4 4 4 4 4

Salida por pantalla: El elemento menor est en la posicin 3 con valor 0

Tema 6. Arrays

12

Media de los elementos de un vector


ALGORITMO media.
N=10

A=[2,4,0,3,8,10,2,0,5,4]

{-- Lectura de los datos de entrada--}


{------ media de los elementos --------} media 0.0 PARA i=1 HASTA N HACER media media+A[i] FIN_PARA media media/N ESCRIBIR(La media es ,media)

i 1 2 3 4 5 6 7 8 9 10 -

media A 0.0 2 2.0 2 6.0 2 6.0 2 9.0 2 17.0 2 27.0 2 29.0 2 29.0 2 34.0 2 38.0 2 3.8 2

4 4 4 4 4 4 4 4 4 4 4 4

0 0 0 0 0 0 0 0 0 0 0 0

3 3 3 3 3 3 3 3 3 3 3 3

8 8 8 8 8 8 8 8 8 8 8 8

10 10 10 10 10 10 10 10 10 10 10 10

2 2 2 2 2 2 2 2 2 2 2 2

0 0 0 0 0 0 0 0 0 0 0 0

5 5 5 5 5 5 5 5 5 5 5 5

4 4 4 4 4 4 4 4 4 4 4 4

Salida por pantalla: La media es 3.8

Tema 6. Arrays

13

Media de los elementos de un vector-2


ALGORITMO media.
N=10

A=[2,4,0,3,8,10,2,0,5,4]

{-- Lectura de los datos de entrada--}


{------ media de los elementos --------} media 0.0 PARA i=1 HASTA N HACER media media+A[i] /N FIN_PARA ESCRIBIR(La media es ,media)

i 1 2 3 4 5 6 7 8 9 10

media A 0.0 2 0.2 2 0.6 2 0.6 2 0.9 2 1.7 2 2.7 2 2.9 2 2.9 2 3.4 2 3.8 2

4 4 4 4 4 4 4 4 4 4 4

0 0 0 0 0 0 0 0 0 0 0

3 3 3 3 3 3 3 3 3 3 3

8 8 8 8 8 8 8 8 8 8 8

10 10 10 10 10 10 10 10 10 10 10

2 2 2 2 2 2 2 2 2 2 2

0 0 0 0 0 0 0 0 0 0 0

5 5 5 5 5 5 5 5 5 5 5

4 4 4 4 4 4 4 4 4 4 4

Salida por pantalla: La media es 3.8

Tema 6. Arrays

14

Varianza de los elementos de un vector


ALGORITMO varianza.
N=10 A=[2,4,0,3,8,10,2,0,5,4]

{-- Lectura de los datos de entrada--}


{------ clculo de la media = 3.8 ------} {---- clculo de la varianza -----} varianza 0.0 PARA i=1 HASTA N HACER varianza varianza+(A[i]-media)2 FIN_PARA varianza sqrt(varianza/N) ESCRIBIR(La varianza es ,varianza)

i varianza A 0.0 2 4 0 3 8 10 2 0 5 4 1 3.24 2 4 0 3 8 10 2 0 5 4 2 3.28 2 4 0 3 8 10 2 0 5 4 3 17.72 2 4 0 3 8 10 2 0 5 4 4 18.36 2 4 0 3 8 10 2 0 5 4 5 36.00 2 4 0 3 8 10 2 0 5 4 6 74.44 2 4 0 3 8 10 2 0 5 4 7 77.68 2 4 0 3 8 10 2 0 5 4 8 92.12 2 4 0 3 8 10 2 0 5 4 9 93.56 2 4 0 3 8 10 2 0 5 4 10 93.60 2 4 0 3 8 10 2 0 5 4 3.06 2 4 0 3 8 10 2 0 5 4

Salida por pantalla: La varianza es 3.06

Tema 6. Arrays

15

Lectura / Escritura de un array multidimensional


ALGORITMO lectura_escritura. CONSTANTES MAX=500 VARIABLES A:ARRAY[1..MAX,1..MAX] de ENTEROS N,,M,i,j:ENTERO 1.[Entrada del n de columnas y filas N y M] REPETIR ESCRIBIR('Introduzca el n de columnas ') LEER(N) HASTA ((N>1) AND N<=MAX)) REPETIR ESCRIBIR('Introduzca el n de filas ') LEER(M) HASTA ((M>1) AND (M<=MAX)) 2.[Entrada de los elementos del array] PARA i=1 HASTA N HACER PARA j=1 HASTA M HACER ESCRIBIR('Introduzca el dato para la columna ',i,', fila ',j,': ') LEER(A[i,j]) FIN_PARA FIN_PARA 4.[Escritura de los elementos del array] PARA i=1 HASTA N HACER PARA j=1 HASTA M HACER ESCRIBIR('El Elemento de la columna ',i,',fila ',j,' es ',A[i,j]) FIN_PARA FIN_PARA 5.[Fin]

Tema 6. Arrays

16

Uso de arrays como parmetros


Los parmetros formales deben especificarse utilizando identificadores de tipo
Tipos de datos predefinidos Tipos definidos por el usuario

Los parmetros actuales que sean arrays deben ser exactamente del mismo tipo que el parmetro formal con el que se corresponda Para utilizar un array como parmetro hay que crear un nuevo tipo de dato con un identificador de tipo

Tema 6. Arrays

17

Definicin de nuevos tipos de datos


Para definir nuevos tipos de datos se deben especificar en la seccin de seccin definicin de tipos que aparece fsicamente despus de la seccin de seccin declaracin de constantes
TIPOS nom_tipo1 = tipo1

nom_tipoN = tipoN

Ejemplos
TIPOS NUMERO = ENTERO LETRA = CARACTER VECTOR=ARRAY[1..10] DE ENTEROS VARIABLES NUM:NUMERO L:LETRA V:VECTOR

VARIABLES NUM:ENTERO L:CARACTER V:ARRAY[1..10] DE ENTEROS V:ARRAY[1..10]

Tema 6. Arrays

18

Tipo de datos ordinales


Un tipo de dato se dice que es ordinal si los valores de ese tipo estn ordenados de manera que cada uno de ellos, excepto el primero, tiene un predecesor inmediato y cada uno de ellos, excepto el ltimo, tiene un sucesor inmediato
Tipos ordinales predefinidos
Enteros Lgicos Carcter

Tipos ordinales definidos por el usuario


Enumerado Subrango
Tema 6. Arrays 19

Tipo enumerado
Para declarar una variable de tipo enumerado VARIABLES
Ident_var: (id1,id2idN) Ident_var: Dia : (lunes, martes, miercoles, jueves, viernes, sabado, domingo) TIPOS dia= (lunes, martes, miercoles, jueves, viernes, sabado, domingo) VARIABLES Diadelasemana : dia

Para crear un nuevo tipo de datos enumerado


TIPOS Id_tipo_enum= (id1,id2idN) VARIABLES Ident_var: Id_tipo_enum Ident_var:

Los valores de tipo enumerado no se pueden leer ni escribir pero s se pueden comparar Funciones predefinidas que se pueden usar Pred: devuelve el predecesor. Ejemplo: pred(martes) es lunes Pred: pred(martes) Succ: devuelve el sucesor. Ejemplo: Succ(martes) es miercoles Succ: Succ(martes) Ord: devuelve el ordinal. Ejemplo: Ord(martes) es 1 Ord: Ord(martes)
Tema 6. Arrays 20

10

Tipo subrango
Para declarar una variable de tipo subrango
VARIABLES Ident_var: primer_valor..ultimo_valor Ident_var: primer_valor..ultimo_valor laborable : lunes ..viernes digito:0..9

Para crear un nuevo tipo de datos subrango


TIPOS Id_tipo_subr= p_valor..u_valor p_valor..u_valor VARIABLES Ident_var: Id_tipo_subr Ident_var: TIPOS digito=0..9 VARIABLES num : digito

El tipo subrango se usa fundamentalmente para


Especificar los tipos del ndice para arrays Asegurarse que los datos de entrada estn dentro de un determinado rango
Tema 6. Arrays 21

Uso de arrays como parmetros


CORRECTO ALGORITMO prueba. CONSTANTES max=50 TIPO Elemento=ARRAY[1..max] de Elemento=ARRAY[1..max] ENTEROS VARIABLES A:ELEMENTO FUNCION f(B:ELEMENTO):ENTERO f(B:ELEMENTO):ENTERO FIN_FUNC {-------- mdulo principal -----------} -----------} INICIO ESCRIBIR(f(A)) ESCRIBIR(f(A)) FIN
Tema 6. Arrays

INCORRECTO ALGORITMO prueba. CONSTANTES max=50 VARIABLES A: ARRAY[1..max] de ENTEROS ARRAY[1..max] FUNCION f(B: ARRAY[1..max] de f(B: ARRAY[1..max] ENTEROS):ENTERO ENTEROS):ENTERO FIN_FUNC {-------- mdulo principal -----------} -----------} INICIO ESCRIBIR(f(A)) ESCRIBIR(f(A)) FIN

22

11

Vous aimerez peut-être aussi