La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Tipos definidos por el usuario –Parámetros array ilimitados.

Presentaciones similares


Presentación del tema: "Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Tipos definidos por el usuario –Parámetros array ilimitados."— Transcripción de la presentación:

1 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Tipos definidos por el usuario –Parámetros array ilimitados with Text_IO; use Text_IO; procedure Clase5_ParamArrayIlim is type Matriz is array (integer range <>, integer range <>) of integer; package IntIO is new Integer_IO(integer); use IntIO; procedure Put(Mat: in Matriz) is begin for X in Mat'Range loop for Y in Mat'Range loop Put(Mat(X, Y)); end loop; New_Line; end loop; end Put; M: Matriz(1..5, 1..10) := (others => (others => 0)); begin Put(M); end Clase5_ParamArrayIlim;

2 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde2 Tipos definidos por el usuario –Slices Es un mecanismo que provee Ada para hacer referencia a una parte de un array (sólo unidimiensionales) type Vector is array (integer range <>) of integer; package IIO is new Integer_IO(integer); use IIO; procedure Put(V: Vector) is begin for I in V'Range loop Put(V(I), 2); end loop; end Put; V: Vector(1..10); I: integer; W: Vector(11..15) := (others => 5); begin V(2..6) := (1, 2, 3, 4, 5); V(7..10) := (1, 2, 3, 4); V(1) := 1; V(2..6) := W; W := V(3..7); W(11..13) := V(8..10); Put(V); Put(V(1)); Put(V(1..1)); I := V(1); I := V(1..1); -- ilegal end Clase5_Slices;

3 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde3 Tipos definidos por el usuario –Strings El tipo String es un array ilimitado predefinido como: subtype Positive is integer range 1..integer'Last; type String is array (Positive range <>) of character; Como el tipo String es un array ilimitado, la declaración de variables debe incluir la restricción de rango. S1: String(1..4); S2: String(1..4); Agregate para arreglos String: S1 := ('P', 'e', 'p', 'e'); S2 := "Pepe"; En la declaración de constantes se puede omitir la restricción C: constant String := "Pepe";

4 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde4 Tipos definidos por el usuario –Strings El Put predefinido en el package Text_IO, podría ser: procedure Put(S: in String) is begin for I in S'Range loop Put(S(I)); end loop; end Put;

5 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde5 Tipos definidos por el usuario –Strings Lo molesto de que los strings sean arrays es que con la declaración: Name: String(1..30); no se puede asignar: Name := "Pepe"; sino que se debe asignar: Name := "Pepe "; Pero los slices pueden aliviar un poco el manejo Name(1..4) := "Pepe"; y por otro lado procedure Get_Line(Item: out String; Last: out Natural); Name(1..Last) := Item;

6 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde6 Tipos definidos por el usuario –Arreglos dinámicos Los arreglos locales pueden ser dinámicos, es decir tomar sus límites en ejecución: procedure Proc(N: integer) is A: array(1..N) of integer; begin end Proc; Proc(5); Proc(10); Por ejemplo: type Vector is array(integer range <>) of integer; function Concat(X, Y: in Vector) return Vector is Z: Vector(1..X'Length + Y'Length); begin Z(1..X'Length) := X; Z(X'Length + 1..Z'Length) := Y; return Z; end Concat;

7 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde7 Tipos definidos por el usuario –Operaciones sobre Arrays Concatenación & Comparación por igualdad/desigualdad =, /= –definidos aunque tengan distintos límites –Dos arrays de distintas longitudes son distintos Para arreglos unidimensionales con elementos de tipos discretos:, >= –Se aplican elemento a elemento el orden lexicográfico Para arreglos unidimensionales con elementos de tipo boolean and, or, xor –Se aplican elemento a elemento –El resultado es un array del mismo tipo que los operandos

8 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde8 Tipos definidos por el usuario –Registros parametrizados Registros con discriminante: –el tipo de un campo depende del valor del parámetro subtype Rango is integer range 0..50; type Arreglo is array (Rango range <>) of integer; type VarArray(Len: Rango := 0) is record Valor: Arreglo(1..Len); end record; –El valor por default del parámetro es opcional. Si aparece, se puede declarar variables sin restricción VA1: VarArray(4); -- limitado VA2: VarArray; -- ilimitado => valor por default –El valor del parámetro se puede consultar pero no asignar Put(VA1.Len); Put(VA2.Len); VA1.Len := 5; -- ilegal VA2.Len := 5; -- ilegal

9 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde9 Tipos definidos por el usuario –Registros parametrizados Registros con discriminante: –El valor del parámetro de un registro limitado no puede cambiar –El valor de los parámetros de una variable registro parametrizado puede cambiar sólo en las siguientes condiciones: »Valor por default para el parámetro en la declaración del tipo »Variable declarada ilimitada (sin restricción) »Asignar valor a todo el registro en una única asignación –Por ejemplo: VA1.Valor := (1, 2, 3, 4); VA2.Valor := (...); -- rango vacío, no se puede asignar VA1 := VA2; -- No se puede VA2 := VA1; VA1 := VA2; -- Ahora sí se puede VA2 := (5, (1, 2, 3, 4, 5)); VA2 := (VA1.Len, VA1.Valor);

10 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde10 Tipos definidos por el usuario –Registros parametrizados Registros variantes: –El conjunto de campos definidos en un tipo registro puede variar dependiendo de los valores de los parámetros –Ejemplo (próxima diapositiva) –En el case deben ser consideradas todas las alternativas. Puede usarse la alternativa others –Los nombres de los campos deben ser ditintos aunque pertenezcan a distintas alternativas –Si para alguna alternativa no se declaran campos, se utiliza el null

11 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde11 type EstadoCivil is (Soltero, Casado, Divorciado, Viudo); type DNI is new integer range 10_000_ _999_999; type Fecha is record Dia: integer range 1..31; Mes: integer range 1..12; Ano: integer range ; end record; type Persona(EstCivil: EstadoCivil := Soltero) is record Nombre: String(1..30); Ident: DNI; FechaNacimiento: Fecha; case EstCivil is when Soltero => null; when Casado => Conyuge: DNI; DiaCasamiento: Fecha; when Divorciado|Viudo => FechaFin: Fecha; end case; end record; P1: Persona(Soltero); P2: Persona; begin P1.Nombre := "Campodónico Juan Maria Ignacio"; P1.Ident := 22_333_777; P1.FechaNacimiento := (23, 12, 1970); P2 := P1; P2 := (Casado, P2.Nombre, P2.Ident, P2.FechaNacimiento, 22_444_888, (23, 12, 2000)); P2 := (Divorciado, P2.Nombre, P2.Ident, P2.FechaNacimiento, (27, 4, 2003)); P2.Conyuge := P1.Ident; -- Constraint_error end Clase5_Variantes;


Descargar ppt "Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Tipos definidos por el usuario –Parámetros array ilimitados."

Presentaciones similares


Anuncios Google