registros

 

 

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

 



Universidad Nacional de Colombia
Carrera 30 No 45-03 - Edificio 477
Bogotá D.C. - Colombia
PBX: 3165000
webmaster@unal.edu.co

Aviso Legal - Copyright
Gobierno en LíneaAgencia de Noticias UN