Algorítmica y Programación Registros en Ada Vectores de Registros
Registros en Ada Declaración de tipo registro type  <nombre del tipo>  is record   <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 &quot;record&quot;, seguida de la declaración de los campos del record y &quot;end record&quot;.
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
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 =>  &quot; Enero  &quot;,  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:
Para acceder a los campos de un registro se usa la clásica notación registro.componente: procedure   Mostrar_fecha_nacimiento (nacimiento:  in  fecha)  is begin   nacimiento.dia  := 15; nacimiento.mes  := “Enero  &quot;; nacimiento.anio := 1980; Put_Line (&quot;Su fecha de nacimiento es: &quot; & integer’image(nacimiento.dia)  & &quot; de &quot; & nacimiento.mes & &quot; de &quot; &  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  &quot;, 1980 ); agregado nominal:  especificando los nombres de los campos junto con los valores:  nacimiento := (anio => 1980, mes => “Enero  &quot;, 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
-- 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:
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: En las siguientes dos diapositivas veremos el código fuente del Programa_ejemplo Programa ejemplo
 
 
Vector de registros Podemos 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 .  Tipos T_registro =  registro Campo1: T_dato1 Campo2: T_dato2 FinRegistro Variables VariableRegistro : T_registro ArregloRegistro:  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
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: Tipos T_Registro_Persona =  Registro Nombre  : cadena20 Edad  : entero Ocupacion : cadena25 Salario  :flotante Fin Registro Variables Yo : T_Registro_Persona Facultad : Arreglo (30) de T_Registro_Persona  {  permite mantener información de 30 personas } Ejemplo :
Veamos cómo se dispone la información en la memoria: Facultad Posición 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
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;
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
 
 
Veremos en el pizarrón cómo: generar un vector de registros ordenar un vector de registros imprimir un vector de registros

2011 clase17

  • 1.
    Algorítmica y ProgramaciónRegistros en Ada Vectores de Registros
  • 2.
    Registros en AdaDeclaración de tipo registro type <nombre del tipo> is record <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 &quot;record&quot;, seguida de la declaración de los campos del record y &quot;end record&quot;.
  • 3.
    Declaración de variablesy 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
  • 4.
    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 => &quot; Enero &quot;, 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:
  • 5.
    Para acceder alos campos de un registro se usa la clásica notación registro.componente: procedure Mostrar_fecha_nacimiento (nacimiento: in fecha) is begin nacimiento.dia := 15; nacimiento.mes := “Enero &quot;; nacimiento.anio := 1980; Put_Line (&quot;Su fecha de nacimiento es: &quot; & integer’image(nacimiento.dia) & &quot; de &quot; & nacimiento.mes & &quot; de &quot; & 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 &quot;, 1980 ); agregado nominal: especificando los nombres de los campos junto con los valores: nacimiento := (anio => 1980, mes => “Enero &quot;, 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
  • 6.
    -- otra formade 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:
  • 7.
    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: En las siguientes dos diapositivas veremos el código fuente del Programa_ejemplo Programa ejemplo
  • 8.
  • 9.
  • 10.
    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 . Tipos T_registro = registro Campo1: T_dato1 Campo2: T_dato2 FinRegistro Variables VariableRegistro : T_registro ArregloRegistro: 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
  • 11.
    Supongamos que queremosalmacenar 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: Tipos T_Registro_Persona = Registro Nombre : cadena20 Edad : entero Ocupacion : cadena25 Salario :flotante Fin Registro Variables Yo : T_Registro_Persona Facultad : Arreglo (30) de T_Registro_Persona { permite mantener información de 30 personas } Ejemplo :
  • 12.
    Veamos cómo sedispone la información en la memoria: Facultad Posición 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
  • 13.
    Ejemplo de Vectorde 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;
  • 14.
    En la siguientediapositiva 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
  • 15.
  • 16.
  • 17.
    Veremos en elpizarrón cómo: generar un vector de registros ordenar un vector de registros imprimir un vector de registros