17
Algorítmica y Programación Registros en Ada Vectores de Registros

2011 clase17

Embed Size (px)

Citation preview

Page 1: 2011 clase17

Algorítmica y Programación

Registros en AdaVectores de Registros

Page 2: 2011 clase17

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".

Page 3: 2011 clase17

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

Page 4: 2011 clase17

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:

Page 5: 2011 clase17

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

Page 6: 2011 clase17

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:

Page 7: 2011 clase17

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

Page 8: 2011 clase17

Algorítmica y Programación I

Page 9: 2011 clase17

Algorítmica y Programación I

Page 10: 2011 clase17

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

Page 11: 2011 clase17

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 :

Page 12: 2011 clase17

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

Page 13: 2011 clase17

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;

Page 14: 2011 clase17

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

Page 15: 2011 clase17

Algorítmica y Programación I

Page 16: 2011 clase17

Algorítmica y Programación I

Page 17: 2011 clase17

Algorítmica y Programación I

Veremos en el pizarrón cómo:

• generar un vector de registros

• ordenar un vector de registros

• imprimir un vector de registros