Algorítmica y Programación I
Registros en Ada
Declaración de tipo registro
type <nombre del tipo> isrecord <nombre de campo 1> : <tipo de dato 1>; <nombre de campo 2> : <tipo de dato 2>;
… <nombre de campo N> : <tipo de dato N>;
end record;
Un record se define con la palabra "record", seguida de la declaración de los campos del record y "end record".
Algorítmica y Programación I
Declaración de variables y constantes
<nombre de variable> : <tipo de dato registro>;<nombre de constante>: constant <tipo de dato registro>:= ( <nombre de campo 1> => <valor campo 1> , <nombre de campo 2> => <valor campo 2>, … , <nombre de campo N> => <valor campo N>);
Registros en Ada
Algorítmica y Programación I
type t_fecha is record dia:integer range 1..31; mes:string (1..10); anio:integer;
end record;nacimiento: t_fecha;fecha_fija: constant t_fecha:= (dia => 01, mes => "Enero ", anio => 2011);
Se pueden especificar valores iniciales para los campos de un record en la propia definición del tipo. Por ejemplo:
type t_fecha is record dia:integer range 1..31; mes:string (1..10) := (others => ' '); anio:integer:=2011;end record;
Ejemplo 1:
Algorítmica y Programación I
Para acceder a los campos de un registro se usa la clásica notación registro.componente:
procedure Mostrar_fecha_nacimiento (nacimiento: in fecha) isbegin nacimiento.dia := 15;nacimiento.mes := “Enero ";nacimiento.anio := 1980;Put_Line ("Su fecha de nacimiento es: " & integer’image(nacimiento.dia) & " de " & nacimiento.mes & " de " & integer’image(nacimiento.anio));end Mostrar_fecha_nacimiento;
Los registros pueden ser manipulados como objetos completos. Además, es posible asignar valores a todos los componentes de un registro mediante un conjunto ordenado o desordenado. agregado posicional: especificando los valores de todos los campos en el orden adecuado y entre paréntesis: nacimiento := (15, “Enero ", 1980 );agregado nominal: especificando los nombres de los campos junto con los valores: nacimiento := (anio => 1980, mes => “Enero ", dia => 15);Cuando se usa un agregado nominal los campos se pueden enumerar en cualquier orden, pero siempre hay que enumerarlos a todos.
El acceso a los valores
Algorítmica y Programación I
-- otra forma de declarar tipo fecha
type t_mes is (ene,feb,mar,abr,may,jun,jul,ago,sep,oct,nov,dic);
type t_fecha is record
dia : integer range 1..31;
mes : t_mes;
anio : integer:=2010;
end record;
descubrimiento : constant t_fecha (12 ,oct, 1492);
ayer,hoy : t_fecha;
Ejemplo 2:
Algorítmica y Programación I
type t_persona is record nombre : cadena25;dni : cadena8;domicilio : cadena25;cursadas : vector30;finales : vector30;end record;
alumno, auxiliar, egresado : t_persona;………………..alumno.dni:=“10800854”;egresado.finales:=(9.0,8.0,7.0,8.0,6.0,8.0, 9.0,8.0,7.0,8.0,6.0,8.0, 9.0,8.0,7.0, 9.0,8.0,7.0,8.0,6.0,8.0, 9.0,8.0,7.0,8.0,6.0,8.0, 9.0,8.0,7.0);alumno.cursadas:=(others =>6.0);
Ejemplo 3:
Programa ejemploEn las siguientes dos diapositivas veremos el código
fuente del Programa_ejemplo
Algorítmica y Programación I
Vector de registrosPodemos agrupar registros por medio de un arreglo, el cual puede ser de cualquier tipo simple de datos (entero, flotante, caracter, etc. ) o tipos compuestos (registros, arreglos)
Teniendo en cuenta la declaración de tipo siguiente y nuevas variables veremos como manipular un arreglo de registros.
TiposT_registro = registro
Campo1: T_dato1Campo2: T_dato2FinRegistro
VariablesVariableRegistro : T_registroArregloRegistro: arreglo (30) de T_registro
Comienza......i 1 { quiero acceder a la posición 1 del arreglo }VariableRegistro ArregloRegistro ( i ) { accedo a la información
de un registro}{ si ahora quiero mostrar el primer campo de la 5 posición del
arreglo de registros}Escribir (ArregloRegistro(5).Campo1)......
Termina
Algorítmica y Programación I
Supongamos que queremos almacenar información del personal de la Facultad. Primero debemos definir qué estructura utilizaremos para contener la información. Una elección posible podría ser:TiposT_Registro_Persona = Registro
Nombre : cadena20Edad : enteroOcupacion : cadena25Salario :flotante
Fin RegistroVariables
Yo : T_Registro_PersonaFacultad : Arreglo (30) de T_Registro_Persona { permite
mantener información de 30 personas}
Ejemplo :
Algorítmica y Programación I
Veamos cómo se dispone la información en la memoria:facultad(1).nombre facultad(1).edad facultad(1).ocupacion facultad(1).salario
facultad(2).nombre facultad(2).edad facultad(2).ocupacion facultad(2).salario
facultad(3).nombre facultad(3).edad facultad(3).ocupacion facultad(3).salario
facultad(29).nombre facultad(29).edad facultad(29).ocupacion facultad(29).salario
facultad(30).nombre facultad(30).edad facultad(30).ocupacion facultad(30).salario
1
2
3
4
5
6
7
8
9
…
…
28
29
30
Facultad
Posición
Algorítmica y Programación I
Ejemplo de Vector de Registros en Ada
T_Persona is record nombre : cadena25;dni : cadena8;domicilio : cadena25;cursadas : vector30;finales : vector30;end record;
T_Vec_Personas is array(1..30) of T_Persona;Info: T_Vec_Personas;………-- en el programa pueden aparecer instrucciones como…. info(i).nombre:=“Juan Perez ”;info(i).dni:=“23455678”; for j in 1..30 loop get(info(i).cursadas(j))end loop;
Algorítmica y Programación I
En la siguiente diapositiva veremos el código fuente del ejecutable enlazado
El siguiente programa manipula un vector de registros, en los que cada componente contiene información de tipo T_Persona
Top Related