Arreglos y Registros
Arreglos y Registros
Arreglos y Registros
Arreglos y Registros
entero(integer)
real (real)
estándar
carácter (char)
Datos Simples o Primitivos
lógico (boolean)
subrango (subrange)
definido por el programador
(no estándar)
Enumerativo (enumerated)
Arreglos (vectores/matrices)
registro (record)
listas (pilas/colas)
Árboles y grafos
Los tipos de datos simples o primitivos: son aquellos que no están compuestos de
otras estructuras de datos.
Los tipos de datos compuestos están construidos en base a los tipos de datos
primitivos, un ejemplo, es la cadena o string de caracteres.
A su vez, las estructuras compuestas pueden ser:
Estáticas: cuando el tamaño ocupado en memoria se define antes de que el programa
se ejecute y no puede modificarse dicho tamaño durante la ejecución del programa.
Dinámicas: no tienen limitaciones o restricciones en el tamaño de memoria ocupada
(este tipo de estructura no se contempla en esta asignatura).
Diferencia entre los tipos de datos
Los tipos de datos simples tienen como característica común que cada variable
representa un elemento.
Los tipos de datos estructurados tienen como característica común que un identificador
(nombre) puede representar múltiples datos individuales, pudiendo cada uno de éstos
ser referenciado independientemente.
A(1), A(2),………,A(I),…..A(N)
A[1], A[2],………,A[I],…..A[N] en programación (C y Pascal)
En el ejemplo de las notas, observe que sólo el vector global, el dato compuesto, tiene
nombre (NOTAS). Los elementos del vector se referencian por su subíndice ó índice, es
decir, por su posición relativa en el vector.
Otra forma de Notación:
A (L:U) = {A (I)}
Para I = L, L+1,…,U-1, U donde cada elemento A (I) es de tipo de datos T
A es el vector unidimensional con elementos de datos tipo T, cuyos subíndices varían en
el rango L a U, que significa que el índice no tiene porqué comenzar en 0 o en 1.
El número de elementos de un vector se denomina rango del vector.
El rango del vector A (L: U) es U – L+1.
El rango del vector B (1: n) es n.
Un ejemplo de un vector pueden ser los nombres de los alumnos de una clase. El vector
se denomina ALUMNOS y tiene 30 elementos de rango.
1 Luis
2 Francisco
3 José
i Martín
30 Graciela
30 Dirección x + 49
Cada elemento de un vector se puede procesar como si fuese una variable simple al
ocupar una posición de memoria. Así:
NUMEROS[25] = 72 almacena el valor entero o real 72 en la posición 25ª del vector
NUMEROS y la instrucción de salida ESCRIBIR NUMERO [25] visualiza el valor
almacenado en la posición 25ª, en este caso 72.
Esta propiedad significa que cada elemento de un vector y posteriormente una tabla o
matriz, es accesible directamente y es una de las ventajas más importantes de usar un
vector.
Ejemplo 1: Vector X de ocho elementos
Acciones Resultados
SUMA = X[1]+X[3] Almacena la suma de X[1] y X[3] o bien 22.0 en la variable SUMA
SUMA = SUMA+X[4] Añade en la variable SUMA el valor de X[4], o sea, SUMA= 67.0
X[5] = X[5] + 3.5 Suma 3.5 a X [5]; el nuevo valor será 9.91
X[6] = X[1] + X[2] Almacena la suma de X[1] y X[2] en X[6]; el nuevo valor será
26.5
I= 4
V [I+1] representa el elemento V (5) de valor 20
V [I+2] representa el elemento V (6) de valor 1.5
V [I-2] representa el elemento V (2) de valor 5
V [I+3] representa el elemento V (7) de valor 2.5
Los subíndices de un vector pueden ser enteros, variables o expresiones enteras.
TIPO
ARRAY [liminf…limsup] DE tipo:nombre_array
i= 1 I= 1
MIENTRAS i <= 20 HACER
LEER F [i] o bien LEER F [i]
i = i+1 i = i+1
FIN-MIENTRAS HASTA i > 20
7 7 Seat 7 Renault
8 8 8 Seat
9 9 9
Fila 2 18
Fila 3
Fila 4
Fila 5
1 2 3 4 . J . N
1
2
.
I B[I,J]
.
M
El elemento B [i , j ] , se puede representar en notación algorítmica, el array B con
elementos del tipo T (numéricos, alfanuméricos) con subíndice fila que varían en el rango
de 1 a M y subíndice columna en el rango de 1 a N es:
B (1 : M, 1: N) = B [I, J]
Donde I = 1, ….. , M o 1 <=I<= M
Donde J = 1, ….. , N 1 <=J<= N
Cada elemento B [I , J] es de tipo T.
En general, el arreglo bidimensional B con su primer subíndice, variando desde un límite
inferior L a un límite superior U.
En notación algorítmica:
B (L1 : U1, L2: U2) = B [I , J] Donde L1 <= I <=<U1
L2 <= J <=<U2
Cada elemento B [ I, J ] es del tipo T
El Nro. de elementos de una fila de B = U2-L2+1.
El Nro. de elementos en una columna B = U1-L1+1.
Nro. total de elementos de B= (U2-L2+1) * (U1-L1+1).
Ejemplo: La matriz T representa una tabla de notaciones de saltos de altura (1er. salto),
las filas representan el nombre del atleta y las columnas las diferentes alturas saltadas.
Los símbolos almacenados en la tabla son: X: salto válido; 0: salto nulo o no intentado.
García X 0 X x X 0
Pérez 0 X X 0 X 0
Gil 0 0 0 0 0 0
Mortimer 0 0 0 X x X
A[i]
A[n]
Posición B A[1]
…. A[3]
…..
A[i]
….
Si cada elemento del array ocupa S bytes (1 byte = 8 bits) y B es la dirección inicial de la
memoria central de la computadora, posición o dirección base, la dirección inicial del
elemento i-ésimo sería:
B+(I–1)*S
En general, el elemento N (I) de un array definido como N (L : U ) tiene la dirección
inicial
B+(I–L)*S
5.2. 6. Datos estructurados: Registros.
Un arreglo permite el acceso a una lista o a una tabla de datos del mismo tipo utilizando
un único nombre.
A veces es necesario almacenar información de distinto tipo en una única estructura: un
nombre de cadena, un número de código entero y un precio de tipo real.
Una estructura que permite almacenar diferentes tipos de datos bajo una misma variable
se denomina registro.
Un registro en Pascal es similar a una estructura en C, y aunque en otros lenguajes como
C ++ las estructuras pueden actuar como clases, aquí nos remitiremos a definirlo como
un contenedor de diferentes tipos de datos.
Un registro se declara con la palabra reservada estructura (struct, en ingles) o registro
y esto se hace utilizando los mismos pasos necesarios para utilizar cualquier variable.
Primero se declara el registro y a continuación se asignan valores a los miembros o
elementos individuales del registro o estructura.
Ejemplo:
Estructura: fechaNacimiento
entero: mes // mes de nacimiento
entero: día // día de nacimiento
entero: año // año de nacimiento
Fin_estructura
Dado un archivo de alumnos, calcular e imprimir el promedio de notas de los parciales aprobados.
PROGRAM LeerArchivo;
USES wincrt;
TYPE
alumnos = RECORD
LU: INTEGER;
nombre:STRING[30];
notaParcial1:INTEGER;
notaParcial2:INTEGER;
status:char;
END;
VAR
alumno:alumnos;
archivo: file of alumnos;
promedio: REAL;
BEGIN
clrscr;
(* creando y abriendo el archivo *)
ASSIGN(archivo,'c:\alumnos.dat');
RESET(archivo);
(* ciclo de lectura y despliegue registro *)
WHILE NOT(EOF(archivo)) DO
BEGIN
READ(archivo,alumno);
(* revisando status registro *)
IF alumno.status = 'A' THEN
BEGIN
WRITE('LU : ');WRITELN(alumno.LU);
WRITE('Nombre : ');WRITELN(alumno.nombre);
IF (alumno.notaParcial1>=6) and
(alumno.notaParcial2>=6) THEN
BEGIN
promedio := (alumno.notaParcial1 +
alumno.notaParcial2)/2;
WRITE('Promedio: ', promedio:3:2);
END;
WRITELN;
WRITE('<enter> para continuar ');READLN;
END;
END;
(* cerrando archivo *)
CLOSE(archivo);
END.
b) Exámenes parciales:
Actividad Fecha
Extraordinario 03 de julio
4 Mayo 13/05/2009
5 Julio 08/07/2009
6 Julio 29/07/2009
7 Agosto 26/08/2009
8 Septiembre 30/09/2008
9 Noviembre 24/11/2009
10 Diciembre 16/12/2009