Los registros se declaran al comienzo del programa, después de la declaración de constantes y de la palabra reservada tipos y antes de la declaración de cualquier función y/o procedimiento. El siguiente esquema muestra la forma general de un programa escrito en el pseudo lenguaje utilizado en este curso:
| constantes <declaración constantes> tipos <declaración registros> <declaración funciones y/o procedimientos> procedimiento principal() variables <declaración variables procedimiento principal> inicio <algoritmo principal> fin_procedimiento |
Cuando se ha declarado un registro, es decir un nuevo tipo, se pueden declarar variables del mismo.
EJEMPLOS.
Ejemplo 1. z1 : Complejo. En este caso la variable z1 tiene dos campos x e y de tipo real.
Ejemplo 2. x : Caja. En este caso la variable x tiene tres campos de tipo real, alto, ancho y largo.
Ejemplo 3. e : Estudiante. En este caso la variable e tiene tres campos, el primero es nombre el cual es de tipo cadena de caracteres de tamaño cien, el segundo es código de tipo entero y el último es notas que es un arreglo de tamaño cinco de reales.
Para obtener y/o modificar el valor de cualquier campo de un registro se utiliza la siguiente notación:
| <variable>.<campo> donde, <variable> : es el nombre de la variable de tipo registro. <campo> : es el nombre del campo del registro, del cual se quiere obtener el valor. |
EJEMPLOS.
Ejemplo 1. Si x es una variable de tipo Caja
| x.alto := 10 /* modifica el campo alto de x y lo deja en 10 */ x.ancho := (x.ancho / 2.0) /* divide el ancho de la caja x por dos */ escribir( x.largo ) /* escribe en pantalla el largo de la caja x */ volumen := x.largo*x.alto*x.ancho /* calcula el volumen de la caja x*/ |
Ejemplo 2. Si z1 es una variable del tipo Complejo
| norma := z1.x * z1.x + z1.y * z1.y /* calcula la norma de z1 */ leer z1.x /* lee la parte x del complejo z1 */ escribir z1.y /* imprime la parte y del complejo z1 */ |
Ejemplo 3. Si e es una variable del tipo Estudiante
| e.notas[0] := dato * 0.15 /* obtiene el 15% de dato y lo almacena en la primer nota del estudiante e */ /* las siguientes 5 lineas calculan el promedio de las notas de e */ promedio := 0.0 para i := 0 hasta 4 hacer promedio := promedio + e.notas[i] fin_para promedio := promedio / 5.0 |
Como cualquier otra variable, una variable de tipo registro puede ser pasada como argumento a una función y/o procedimiento por valor o por referencia.
Ejemplo. Desarrollar un programa que calcule la nota definitiva más alta de un conjunto de 40 estudiantes, cada uno de los cuales tiene nombre, código y cinco notas parciales.
Algoritmo:
| constantes /* el numero de caracteres maximo en el nombre */ TAMANO_NOMBRE = 100 /* el numero de estudiantes del curso */ N = 40 /* el numero de notas parciales de cada estudiante */ NUM_NOTAS = 5 tipos /* El estudiante es un registro con nombre, codigo y cinco notas */ Estudiante como nombre : arreglo[TAMANO_NOMBRE] de caracter codigo : entero notas : arreglo[NUM_NOTAS] de real fin_tipo /* leer los datos de un estudiante, la variable e es pasada por referencia, lo que implica que la variable enviada como argumento sera modificada */ procedimiento LeerEstudiante( referencia e : Estudiante ) variables i : entero inicio /* lee el nombre del estudiante */ escribir( “Digite el nombre del estudiante:”) leer( e.nombre ) /* lee el codigo del estudiante */ escribir( “Digite el codigo del estudiante:”) leer( e.codigo ) /* lee las cinco notas del estudiante */ para i := 0 hasta NUM_NOTAS-1 hacer escribir( “Digite la nota ”, i, “-esima del estudiante ”, e.nombre, “:” ) leer( e.notas[i] ) fin_para fin_procedimiento /* calcula la nota definitiva de un estudiante, la variable e es pasada por valor lo que implica que la variable enviada como argumento no sera modificada en esta función */ funcion definitiva( e : Estudiante ) : real variables i : entero promedio : real inicio /* suma las notas parciales */ promedio := 0.0 para i := 0 hasta NUM_NOTAS-1 hacer promedio := promedio + e.notas[i] fin_para /* divide la suma de notas parciales por el numero de notas */ promedio := promedio / NUM_NOTAS /* retorna la nota definitiva del estudiante */ retornar promedio fin_funcion /* calcula el maximo de una colección de N reales */ funcion maximo( A : arreglo[N] de real ) : real variables max : real i : entero inicio max := A[0] para i := 1 hasta N-1 hacer si max < A[i] entonces max : A[i] fin_si fin_para retornar max fin_funcion /* algoritmo principal */ procedimiento principal() variables curso : arreglo[N] de Estudiante definitivas : arreglo[N] de real i : entero max : real inicio para i := 0 hasta N-1 hacer escribir(“Datos del estudiante “, i, “-esimo”) escribir cambio_linea /* lee los datos del i-esimo estudiantes del curso */ LeerEstudiante( curso[i] ) /* calcula la definitiva del i-esimo estudiante */ definitivas[i] := Definitiva( curso[i] ) fin_para /* calcula la nota maxima definitiva */ max := maximo( definitivas ) escribir( “La nota maxima definitiva fue: ”, max ) fin_procedimiento |