-- AUTORA: Elvira Mayordomo Cámara
-- PROYECTO: módulo de declaración del TAD
-- 	  lrestricciones solución
--	     del examen de febrero de 2001 de la asignatura de 
--	     Estructuras de Datos y Algoritmos
-- FICHERO: lrestricciones.ads
-- FECHA: 6-2-01; 12-1-04
-- Especificación no hecha

with Ada.text_io, Ada.Strings.Unbounded,
Ustrings,tablasrecolocacion;
use Ada.text_io, Ada.Strings.Unbounded, Ustrings;

package lrestricciones is
type planEstudios is private;
	 type prerequisito is private;
	-- coste en memoria: n asignaturas ocupan 
	-- ocupa O(numMax)
	 
	function h(palabra:ustring;tam:integer) return integer;
  	-- función hash por el método de la división con módulo numMax 
	-- coste en tiempo O(longitud(palabra))=O(1)
  procedure vacio(p:out planEstudios);
	-- coste en tiempo O(numMax)
  procedure anyadir(p:in out planEstudios; x:in prerequisito);
	-- coste en tiempo O(1)
  procedure leer(p:out planEstudios);
  -- pide el nombre de un fichero y copia la información del
  -- mismo en el plan de estudios p
  function maxSemestres(p:planEstudios) return integer;
	-- coste en tiempo O(n^2), donde n es
	-- el número de asignaturas
private
  numMax: constant:=211; -- primer primo mayor que 200
  type nodo;
  type ptnodo is access nodo;
  type pt4nodo is	array(1..4) of ptnodo;
  type nodo is 
    record
     ptrequisitos:pt4nodo;
     altura:integer; --sólo se calcula en maxSemestres
    end record;
  nulo: constant pt4nodo:=(null,null,null,null);
	package tablas is new
	tablasrecolocacion(ustring, ptnodo, nummax,h);
	use tablas;
  type rnombre;
	type lista is access rnombre;
	type rnombre is record
		elnombre: ustring;
		posicion: ptnodo;
		sig: lista;
	end record;	
type planEstudios is 
    record
      asig:tabla;--tabla hash de asignaturas
      titulo:ptnodo;--relaciones entre las asignaturas
		lalista:lista;--lista de asignaturas
   end record;
  type lospre is array(0..4) of ustring;
  type prerequisito is
    record
      numasig:integer;
      pres:lospre;
   end record;	
end lrestricciones;


syntax highlighted by Code2HTML, v. 0.9.1