With Ada.Text_IO; SELECT `desciption` FROM `db_blogs` WHERE `author` = 'SkG';

11feb/091

Go go go!!

Comienza el examen de programación!! Nervios nervios~~
¿Quien pretendía copiarse de mi? Vais mal xDD
Let's go! Suerte a todos!

Ya terminó el examen... No se si hubiera sido buena idea el tratar de copiarse de mi xD Lo hice a duras penas y a mi modo como medianamente pedía, pero funciona... xD

Espero que os fuera bien, a continuación podéis ver lo que yo hice, no es exactamente lo que pidió, de hecho solo puse 4 departamentos, y usar 25 a mi método seria infumable, pero al menos hice algo que funcionaba xD a ver si me cuenta algo...

Saludos~~

----------------------------------------------------------------
-- Nombre: Telefonía
-- Fecha: 11/02/2009
-- Descripción: Practica de clase
-- Requiere: Modulo de manejo de listas (lista.ads y lista.adb)
----------------------------------------------------------------
-- Autor: [SkG]
----------------------------------------------------------------
with Ada.Text_IO, Ada.Integer_Text_IO, Ada.Float_Text_IO;
use Ada.Text_IO, Ada.Integer_Text_IO, Ada.Float_TexT_IO;

with Lista;

procedure telefonia is
   ----------------------------------------------------------------
   -- Declaración de tipos y paquetes
   ----------------------------------------------------------------
   type TDep is (DEP1,DEP2,DEP3,DEP4);
   package Dep_IO is new Ada.Text_IO.Enumeration_IO(TDep); use Dep_IO;
   type TLlamada is record
      Hora: Integer;
      Dur: Integer;
	  Dep: TDep;
   end record;

   package ListaLlamadas is new Lista(TLlamada); use ListaLlamadas;
   subtype TLista is ListaLlamadas.Tipo;
   ----------------------------------------------------------------
   -- Declaración de funciones y procedimientos
   ----------------------------------------------------------------
   function DurAux(Col:TLista;Duracion:natural) return natural is
   HoraI: constant natural := 9; -- Hora de comienzo del horario laboral
   HoraF: constant natural := 18; -- Hora de fin del horario laboral
   begin
      if Es_Vacia(Col) then
         return Duracion;
      elsif Primero(Col).Hora >= HoraI and Primero(Col).Hora < = HoraF then
         return DurAux(Resto(Col),Primero(Col).Dur+Duracion);
      else
         return DurAux(Resto(Col),Duracion);
      end if;
   end DurAux;

   function Dur(Col:TLista) return natural is
   begin
      if Es_Vacia(Col) then
         return 0;
      else
         return DurAux(Col,0);
      end if;
   end Dur;

   function CostAux(Col:TLista;CTotal:natural;NLlamadas:natural) return natural is
   CosteS: constant natural := 2; -- Coste de la llamada en CENTIMOS
   begin
      if Es_Vacia(Col) then
         return CTotal/NLlamadas;
      else
         return CostAux(Resto(Col),(Primero(Col).Dur*CosteS)+CTotal,NLlamadas+1);
      end if;
   end CostAux;

   function Cost(Col:TLista) return natural is
   begin
      if Es_Vacia(Col) then
         return 0;
      else
         return CostAux(Col,0,0);
      end if;
   end Cost;

   function DepAux(Col:TLista;D1:Natural;D2:Natural;D3:Natural;D4:Natural)
return TLista is
   begin
      if Es_Vacia(Col) then
         return Cons((Cost(Cons((0,D1,DEP1),Vacia)),D1,DEP1),
Cons((Cost(Cons((0,D2,DEP2),Vacia)),D2,DEP2),
Cons((Cost(Cons((0,D3,DEP3),Vacia)),D3,DEP3),
Cons((Cost(Cons((0,D4,DEP4),Vacia)),D4,DEP4),Vacia))));
      elsif Primero(Col).Dep = DEP1 then
         return DepAux(Resto(Col),D1+Primero(Col).Dur,D2,D3,D4);
      elsif Primero(Col).Dep = DEP2 then
         return DepAux(Resto(Col),D1,D2+Primero(Col).Dur,D3,D4);
      elsif Primero(Col).Dep = DEP3 then
         return DepAux(Resto(Col),D1,D2,D3+Primero(Col).Dur,D4);
      elsif Primero(Col).Dep = DEP4 then
         return DepAux(Resto(Col),D1,D2,D3,D4+Primero(Col).Dur);
      end if;
   end DepAux;

   function Depart(Col:TLista) return TLista is
   begin
      if Es_Vacia(Col) then
         return Vacia;
      else
         return DepAux(Col,0,0,0,0);
      end if;
   end Depart;

   function Euros(Centimos:natural) return float is
   begin
      return Float(Centimos)/100.0;
   end Euros;

   procedure ImprLlamada(Llamada:TLlamada) is
   begin
      Put("("); Put(Llamada.Hora,0);
      Put(" - "); Put(Llamada.Dur,0);
      Put(" - "); Put(Llamada.Dep); Put(")");
   end ImprLlamada;

   procedure ImprLista is new Escribir(ImprLlamada);

   procedure ImprDpto(Depto:TLlamada) is
   begin
      Put("(");Put(Depto.Dep); Put(": ");
      Put(Depto.Dur,0); Put(" - ");
      Put(Euros(Depto.Hora),0,2,0); Put(")");
   end ImprDpto;

   procedure ImprCons is new Escribir(ImprDpto);
   ----------------------------------------------------------------
   -- Declaración de variables y/o constantes
   ----------------------------------------------------------------
   Llamadas: constant TLista := Lista_Cons(((7,20,DEP1),(8,50,DEP2),(19,45,DEP4),
(15,26,DEP1),(12,37,DEP1),(18,28,DEP4),(9,79,DEP2),(17,129,DEP2),(11,46,DEP3),
(18,74,DEP1)));

   ----------------------------------------------------------------
   -- Parte ejecutiva
   ----------------------------------------------------------------
begin
   Put("Llamadas (Hora - Duracion (segundos) - Departamento): ");
   ImprLista(Llamadas); New_Line;
   Put("Coste medio de las llamadas (euros): ");
   Put(Euros(Cost(Llamadas)),0,2,0); New_Line;
   Put("Duracion total de las llamadas laborales (segundos): ");
   Put(Dur(Llamadas),0); New_Line;
   Put("Consumo por departamentos (segundos - euros): ");
   ImprCons(Depart(Llamadas)); New_Line;
end telefonia;</pre>

¿Te gustó este artículo?

¡Suscríbete a nuestro feed RSS!

Comentarios (1) Trackbacks (0)
  1. pido la vez para copiarme!!!!!

    Usando Internet Explorer 7.0 Internet Explorer 7.0 en Windows XP Windows XP

Leave a comment

(required)

Aún no hay trackbacks.