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

2011 clase17

Jul 26, 2015

Download

Documents

Patricia
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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