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 –Punteros Tipo access:

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 –Punteros Tipo access:"— 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 –Punteros Tipo access: estructuras de datos en tiempo de ejecución type PInteger is access integer; type TFecha is record Dia, Mes, Ano: integer; end record; type PFecha is access TFecha; PI: PInteger; -- null PF: PFecha; -- null F: TFecha; Alocación PI := new integer; PP := new TFecha; Desalocación –Garbage collector (depende de la implementación)

2 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde2 Tipos definidos por el usuario –Punteros Referenciación PF.Dia := 20; PF.Mes := 4; PF.Ano := PF.Dia * PF.Mes; F := PF.all; PF.all := F; PF.all.Ano := PF.all.Dia * PF.all.Mes; I := PI.all; PI.all := I; Qué hacen las siguientes asignaciones? PF1: PFecha; PF2: PFecha;.... PF2 := PF1; PF2 := F; PF2.all := PF1; PF2.all := F;

3 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde3 Tipos definidos por el usuario –Punteros Operaciones –Asignación PF2 := PF1; –Comparación por igualdad (/desigualdad) if PF1 = PF2 then if PF1 /= PF2 then –Referenciación type PFecha is access TFecha; type TArreglo is array (1..10) of integer; type PArreglo is access TArreglo; PF: PFecha; PA: PArreglo; PF := new TFecha; PF.Dia := PF.Mes; PA := new TArreglo; PA(1) := PA(2); PA.all := (others => 1); –No se permiten operaciones aritméticas sobre access

4 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde4 Tipos definidos por el usuario –Punteros y listas with Text_IO; use Text_IO; procedure Clase6_Listas is type Element; type List is access Element; type Element is record Value: character; Link: List; end record; procedure PutOnFront(Head: in out List; C: in character) is P: List; begin P := new Element; P.Value := C; P.Link := Head; Head := P; end PutOnFront; procedure Put(L: in List) is Act: List := L; begin while Act /= null loop Put(Act.Value); Act := Act.Link; end loop; end Put; L: List; C: character; begin loop Get(C); exit when C = 'X'; PutOnFront(L, C); end loop; Put(L); end Clase6_Listas;

5 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde5 Tipos definidos por el usuario –Punteros y listas with Text_IO; use Text_IO; procedure Clase6_Listas is type Element; type List is access Element; type Element is record Value: character; Link: List; end record; procedure PutOnFront(Head: in out List; C: in character) is P: List := new Element; begin P.Value := C; P.Link := Head; Head := P; end PutOnFront; procedure Put(L: in List) is Act: List := L; begin while Act /= null loop Put(Act.Value); Act := Act.Link; end loop; end Put; L: List; C: character; begin loop Get(C); exit when C = 'X'; PutOnFront(L, C); end loop; Put(L); end Clase6_Listas;

6 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde6 Tipos definidos por el usuario –Punteros y listas with Text_IO; use Text_IO; procedure Clase6_Listas is type Element; type List is access Element; type Element is record Value: character; Link: List; end record; procedure PutOnFront(Head: in out List; C: in character) is P: List := new Element; begin P.all := (C, Head); Head := P; end PutOnFront; procedure Put(L: in List) is Act: List := L; begin while Act /= null loop Put(Act.Value); Act := Act.Link; end loop; end Put; L: List; C: character; begin loop Get(C); exit when C = 'X'; PutOnFront(L, C); end loop; Put(L); end Clase6_Listas;

7 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde7 Tipos definidos por el usuario –Punteros, alocación con inicialización Tipo access: estructuras de datos en tiempo de ejecución type TFecha is record Dia, Mes, Ano: integer; end record; type TArreglo is array (1..10) of integer; type PInteger is access integer; type PFecha is access TFecha; type PArreglo is access TArreglo; PI: PInteger; PF: PFecha; PA: PArreglo; Alocación con inicialización PI := new integer'(2); PI := new integer'(2 + 2); PP := new TFecha'(13, PI.all, 1968); PA := new TArreglo'(others => 0);

8 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde8 Tipos definidos por el usuario –Punteros y listas with Text_IO; use Text_IO; procedure Clase6_Listas is type Element; type List is access Element; type Element is record Value: character; Link: List; end record; procedure PutOnFront(Head: in out List; C: in character) is begin Head := new Element'(C, Head); end PutOnFront; procedure Put(L: in List) is Act: List := L; begin while Act /= null loop Put(Act.Value); Act := Act.Link; end loop; end Put; L: List; C: character; begin loop Get(C); exit when C = 'X'; PutOnFront(L, C); end loop; Put(L); end Clase6_Listas;

9 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde9 Tipos definidos por el usuario –Punteros y árboles Arbol binario de caracteres in order sin repeticiones type Nodo; type Arbol is access Nodo; type Nodo is record Valor: character; Izq, Der: Arbol; end record;

10 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde10 Tipos definidos por el usuario –Punteros y árboles procedure Insertar(A: in out Arbol; C: in character) is begin if A = null then -- árbol vacío A := new Nodo'(C, null, null); -- => crear raíz elsif C < A.Valor then Insertar(A.Izq, C); -- => insertar en rama izquierda elsif C > A.Valor then Insertar(A.Der, C); -- => insertar en rama derecha end if; end Insertar;

11 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde11 Tipos definidos por el usuario –Punteros y árboles function Esta(A: in Arbol; C: in character) return boolean is Result: boolean; begin if A = null then -- árbol vacío Result := false; -- => C no está elsif C < A.Valor then Result := Esta(A.Izq, C); -- buscar en rama izquierda elsif C > A.Valor then Result := Esta(A.Der, C); -- buscar en rama derecha else -- C = A.Valor Result := true; end if; return Result; end Esta;

12 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde12 Tipos definidos por el usuario –Punteros y árboles procedure Put(A: in Arbol) is begin if A /= null then Put(A.Izq); Put(A.Valor); New_line; Put(A.Der); end if; end Put;

13 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde13 Tipos definidos por el usuario –Punteros y árboles with Text_IO; use Text_IO; procedure Clase6_Arbol is............. A: Arbol; C: character; begin loop Get(C); exit when C = '.'; Insertar(A, C); end loop; Put(A); end Clase6_Arbol;

14 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde14 Tipos definidos por el usuario –Tipos derivados Tipo nuevo con las mismas características que el tipo base pero incompatible Provee protección adicional contra la mezcla indeseada de tipos type PInteger is access integer; subtype SubPInteger is PInteger; type NewPInteger is new PInteger; type NewSubPInteger is new SubPInteger; type NewRango is new integer range 0..100; type Arreglo is array (NewRango range <>) of integer; type NewArreglo is new Arreglo; subtype SubArreglo is Arreglo(1..10); subtype SubNewArreglo is NewArreglo; SNA: SubNewArreglo(20..30);

15 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde15 Tipos definidos por el usuario –Tipos derivados type Registro (Disc: NewRango := 0) is record Campo: Arreglo(1..Disc); end record; type NewRegistro is new Registro; R: Registro; NR: NewRegistro; begin R := (10, (others => 10)); NR := (10, (others => 10)); R := NR; -- ilegal NR := R; -- ilegal R := Registro(NR); NR := NewRegistro(R); end Clase6_TiposDerivados;


Descargar ppt "Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Tipos definidos por el usuario –Punteros Tipo access:"

Presentaciones similares


Anuncios Google