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