Apuntes Nº 7 Arreglos. prof. Dolores Cuiñas

Anuncio
PROGRAMACIÓN 10.
Prof. Dolores Cuiñas H.
Recuerde que estos son apuntes
muy simplificados que deberá
completar
con
la
bibliografía
recomendada
APUNTES Nº 7
ARREGLOS.
Estructura de datos: es una colección de datos organizados de un modo particular.
Arreglo (ARRAY): es una estructura de datos en la que se almacena una colección de datos del mismo
tipo. Ejemplo notas de los estudiantes.
• Tienen un único nombre de variable, que representa todos los elementos, los cuales se diferencian
por un índice o subíndice.
Ejemplo: NOTAS
nombre del arreglo
NOTAS[1]
nombre del primer elemento del arreglo NOTAS
NOTAS[n]
1, 2, 3, ... n
nombre del elemento n del arreglo NOTAS
índices o subíndices del arreglo (pueden ser enteros, no negativos,
variables o expresiones enteras)
Clasificación de los arreglos: los arreglos se clasifican en UNIDIMENSIONALES (vectores o listas) y
MULTIDIMENSIONALES (Ejemplo, los bidimensionales son las tablas o matrices).
Arreglos unidimensionales o vectores: son una lista o columna de datos del mismo tipo, a los que
colectivamente nos referimos mediante un nombre. Deben cumplir lo siguiente:
• Compuesto por un número de elementos finito.
• Tamaño fijo: el tamaño del arreglo debe ser conocido en tiempo de compilación.
• Homogéneo: todos los elementos son del mismo tipo
• Son almacenados en posiciones contiguas de memoria, cada uno de los cuales se les puede
acceder directamente.
• Cada elemento se puede procesar como si fuese una variable simple ocupando una posición de
memoria.
Ejemplo: Dado un vector denominado Z cada uno de sus elementos se designará por ese mismo
nombre diferenciándose únicamente por su correspondiente subíndice.
Z
6
3
8 2
Z1 Z2 Z3 ....
5
30 12
Z7
En TURBO PASCAL los arreglos unidimensionales se declaran de la siguiente manera:
TYPE
identificador = ARRAY [tipo-subíndice] OF tipo;
Donde:
identificador : es el nombre del arreglo
tipo-subíndice: puede ser tipo ordinal (boolean o char), tipo enumerado o tipo
subrango. No pueden ser usados los tipo estandar (real o integer)
tipo: se refiere al tipo de los elementos y puede ser de cualquiera de los tipos
estandar o definido por el usuario.
Ejemplo:
Z
6
3
8
2
5
30 12
Z1 Z2 Z3 ....
En TURBO PASCAL:
Z[1] Z[2] Z[3]
Z7
....
Z[7]
Subíndice
Nombre del arreglo o vector
Y se declara:
TYPE
Z = ARRAY [1 .. 7] OF INTEGER;
Z = ARRAY [‘A’ .. ‘G’] OF INTEGER;
ambos representan
el mismo vector
Otros ejemplos de declaración de arreglos:
TYPE
X = ARRAY [TRUE .. FALSE] OF REAL;
CODIGO = ARRAY [1 .. 10] OF CHAR;
ALBA = ARRAY [0 .. 100] OF 1 .. 999;
NOMBRE = ARRAY [1 .. 60] OF STRING[20];
ETIC = ARRAY [‘A’ ..`F’] OF REAL;
iguales
NOT1 = ARRAY [1..6] OF REAL;
VARIABLES TIPO ARRAY. En Turbo pascal se declaran como:
VAR
nombrevar: nombrearray;
donde: nombrevar: es cualquier identificador válido que representa el nombre de la variable
nombrearray: nombre del arreglo utilizado en el TYPE
Ejemplo:
TYPE
VALORES = ARRAY [-10 .. 10] OF INTEGER;
VAR
PRECIOS: VALORES;
NOTAS:
• Las declaraciones de arreglos pueden aparecer directamente en la sección de variables, pero es
preferible no hacerlo.
• Las declaraciones de índices (tipo-índice) no pueden contener variables:
VAR
MUESTRA: ARRAY [1..N] OF REAL;
Incorrecto, salvo que N haya sido
definida previamente como CONSTANTE
•
No se pueden utilizar índices de arreglos que estén fuera del rango definido en TYPE
OPERACIONES CON ARREGLOS UNIDIMENSIONALES O VECTORES:
LECTURA: Tienen que utilizarse estructuras de repetición para leer los elementos del arreglo. Ejemplo:
TYPE
LISTANOTA = ARRAY [1..30] OF REAL;
VAR
DEFI, NOTAS: LISTANOTA;
FOR I : = 1 TO 30 DO
READLN( NOTAS[I] );
I : = 1;
WHILE I < = 30 DO
BEGIN
READ (NOTAS[I]);
I : = I+1
END;
I : = 1;
REPEAT
READ (NOTAS[I]);
I : = I+1
UNTIL I > 30;
ESCRITURA:
FOR I : = 1 TO 30 DO
WRITELN (NOTAS[I] :4:1);
WRITELN;
COPIAR: (sólo cuando ambos tienen el mismo tipo y el mismo tamaño)
FOR I : = 1 TO 30 DO
DEFI[I] : = NOTAS[I]; o simplemente: DEFI : = NOTAS;
SUMAR, RESTAR, MULTIPLICAR, DIVIDIR, DIV o MOD: (sólo cuando los arreglos involucrados tienen el
mismo tipo y el mismo tamaño):
declarado como constante
FOR I : = 1 TO N DO
X[I] : = A[I] + B[I];
* - / div mod
ARREGLOS BIDIMENSIONALES (tablas o matrices): Son arreglos con dos índices, los cuales deben ser
ordinales o de tipo subrango.
filas
1
2
3
4
1
X[1,1]
columnas
2
3
X[1,2]
4
5
X[4,1]
6
X[4,6]
Al igual que para los arreglos unidimensionales, el nombre del arreglo define el nombre de sus elementos
sólo que éstos se identifican por sus respectivos subíndices. Así si el arreglo mostrostrado en la figura
anterior se denomina X, cada uno de sus elementos se denominarán , por ejemplo:
X[1,1]
X[1,2]
elemento de la fila 1 columna 1
elemento de la fila 1 columna 2
X[4,1]
elemento de la fila 4 columna 1
Así hasta identificar los 24 elementos del arreglo X de este ejemplo.
Ambos tipos de índices no necesitan ser subrango del mismo tipo. Por ejemplo, uno puede ser subrango
entero y otro subrango carácter.
En TURBO PASCAL se definen de la siguiente manera:
TYPE
Identificador = ARRAY [indice1, indice2] OF tipo_elemento;
filas
Ejemplo:
columnas
TYPE
CALIFICACION = ARRAY [1..37,1..4] OF Real;
VAR
NOTAS : CALIFICACION;
Reserva 148 posiciones de memoria (datos reales): 37 filas y 4 columnas. Así NOTAS[i,j] se refiere al
elemento del arreglo NOTAS referenciado mediante la fila i y la columna j.
Otros ejemplos:
TYPE
ESTUDIANTES = ARRAY[1..37,1..5] OF REAL;
CUENTA = ARRAY[1..10,’A’..’Z’] OF INTEGER;
CONSOLA = ARRAY[0..4,0..8] OF CHAR;
VAR
CALCULOS : CUENTA;
CODIGOS : CONSOLA;
CLASE : ESTUDIANTES;
LECTURA DE UN ARREGLO BIDIMENSIONAL.
Por ejemplo, dado un arreglo X como el siguiente:
X=
30
84
6
22
12
10
8
15
46
3
11
18
TYPE
ROSCA = ARRAY[1..4,1..3] OF INTEGER;
VAR
X : ROSCA;
FOR I := 1 TO 4 DO
FOR J := 1 TO 3 DO
READLN( X[I,J]);
Los valores deben ser introducidos
así
Es decir, por filas
O también:
FOR J : = 1 TO 3 DO
FOR I : = 1 TO 4 DO
READLN(X[I,J]);
Los valores deben ser introducidos
así
Es decir, por columnas
30
12
46
84
10
3
6
8
11
22
15
18
30
84
6
22
12
10
8
15
46
11
18
ESCRITURA DE UN ARREGLO BIDIMENSIONAL.
Siguiendo el ejemplo anterior:
FOR I := 1 TO 4 DO
BEGIN
FOR J := 1 TO 3 DO
WRITE (x[I,J]: 4);
WRITELN
END;
30
80
6
22
Ver ejercicios y demás explicaciones de clase
Los conceptos anteriores son tomados básicamente de:
Programación en Turbo/ Borland. Pascal 7. Luis Joyanes Aguilar
Programación con Lenguaje Turbo Pascal. F.J. Sanchis Llorca.-
12
10
8
15
46
3
11
18
Descargar