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?
Comentarios (1)
Trackbacks (0)
( suscribirse a los comentarios de esta entrada )
Aún no hay trackbacks.

11 febrero, 2009 - 14:57
pido la vez para copiarme!!!!!
Usando