1 / 15

Seminario de Lenguajes A – Opción Ada

Seminario de Lenguajes A – Opción Ada. 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

mariel
Download Presentation

Seminario de Lenguajes A – Opción Ada

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Seminario de Lenguajes A – Opción Ada • 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) Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 1

  2. Seminario de Lenguajes A – Opción Ada • 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; Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 2

  3. Seminario de Lenguajes A – Opción Ada • 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 Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 3

  4. Seminario de Lenguajes A – Opción Ada • Tipos definidos por el usuario • Punteros y listas Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 4

  5. Seminario de Lenguajes A – Opción Ada • Tipos definidos por el usuario • Punteros y listas Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 5

  6. Seminario de Lenguajes A – Opción Ada • Tipos definidos por el usuario • Punteros y listas Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 6

  7. Seminario de Lenguajes A – Opción Ada • 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); Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 7

  8. Seminario de Lenguajes A – Opción Ada • Tipos definidos por el usuario • Punteros y listas Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 8

  9. Seminario de Lenguajes A – Opción Ada • 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; Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 9

  10. Seminario de Lenguajes A – Opción Ada • 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; Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 10

  11. Seminario de Lenguajes A – Opción Ada • 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; Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 11

  12. Seminario de Lenguajes A – Opción Ada • 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; Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 12

  13. Seminario de Lenguajes A – Opción Ada • 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; Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 13

  14. Seminario de Lenguajes A – Opción Ada • 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); Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 14

  15. Seminario de Lenguajes A – Opción Ada • 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; Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 15

More Related