PRÁCTICA INVENTADA TOP MANTA Matías Blanco – Sergio Pérez.

Slides:



Advertisements
Presentaciones similares
UN MUNDO LLENO DE PROBLEMAS
Advertisements

Compiladores e intérpretes Análisis Sintáctico II
BRISTOL MURDER -Y&L-.
Archivos de Texto. Introducción Los archivos son una secuencia de bits que se guarda en el disco duro. La ventaja de utilizar archivos es que los datos.
Instrumentación Virtual con LabVIEW
SISTEMAS DE INFORMACIÓN
ADA: lenguaje de programación concurrente
Cuadrado en el país redondo.
Lectura Personal cuento Antes de leer
Iteración La iteración permite modelar problemas en los cuales una secuencia de instrucciones debe ejecutarse varias veces. La cantidad de iteraciones.
Type tipo_bf = ; tipo_dato = word; tipo_puntero = ^tipo_nodo; tipo_nodo = record dato: tipo_dato; izquierdo, derecho: tipo_puntero; bf: tipo_bf;
Que tengas un lindo día!! El aconsejar es un oficio tan común
Era una vez una pandilla muy revoltosa, cuyos niños eran Daniel, Agoney, Andrea, Nayara, Nairoa, Lioba y Yanira. Les gustaba jugar siempre juntos. En.
Laura Quesada Rodríguez. La clase práctica de hoy me ha llamado mucho la atención ya que con el nombre de la asignatura Orientación e intervención tutorial,
Metodología de la Programación
BRISTOL MURDER. Bristol es el lugar donde se va a desarrollar el relato...! Peter hizo uno de sus viajes laborales a Bridgwater encubriendo a un chico,
Resolución de Problemas y Algoritmos Buffer - Read & Readln
Realizado por: Ing. Mauricio Rivera1 Colas. Realizado por: Ing. Mauricio Rivera2 ¿Qué es una Cola? Una cola es un grupo ordenado de elementos homogéneos.
Curso de Programación 1 Plan 97
1.2 Sintaxis del lenguaje Java.
EXCEPCIÓN DE ERRORES.
Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Tipos definidos por el usuario –Parámetros array ilimitados.
PL/SQL Francisco Moreno Universidad Nacional.
TE ACUERDAS DE…. Cuando llegues a la última frase..., ¡¡vas a sonreír!!
Características Objeto Relacionales en Oracle
Algoritmos y Estructuras de Datos
VISUAL BASIC CONSOLA Todas las ordenes o instrucciones se digitan dentro de sub Main() y End Sub ÁREA DE TRABAJO: Las aplicaciones de consola son aquellas.
C lase 10 COMPUTACION /17/2014Computacion - Fac. Ingeniería2  Ademas de los ya vistos (tipos simples), puede usarse como parámetros variables.
El 28 de septiembre de 1994 nació una niña muy hermosa pero muy pobre la niña nació en una de muy bajos recursos económicos los cueles.
PL/SQL Francisco Moreno Universidad Nacional.
Grado en Ingeniería electrónica y comunicaciones Facultad de Físicas Universidad Complutense P1 Fundamentos de Programación.
Arboles Binarios de expresiones
Excel y 15 de julio de 2014.
7 “verdades” del mercadeo en red
16/04/ Sesión 11 Funciones y procedimientos Ing. Ricardo Inquilla.
Conversión cadena a número
COMPUTACION 2009 Clase 6 Clase 7.
UNITA - IBARRA TRIGGERS
Resolución de Problemas y Algoritmos Uso de iteración con secuencias
Programación en Pascal
Sesión 5 Sentencias de Selección y repetición Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
Matías Blanco – Sergio Pérez. The Problem A few peregrins, each one with his own strenght and money want to make the Saint James’ Way. They can start.
Material de apoyo Unidad 4 Estructura de datos
EL NIÑO EXTRAÑO PERO NO ASESINO
Teoría – Alejandro Gonzalez
DRAGON BALL Sergio Pérez Camacho Matías Blanco León.
Ada 2º Parte (variables, ámbitos , subrutinas , tipos abstractos de datos y excepciones)
Concurrencia en Ada.
Monitores Cabudare, noviembre de 2010 Universidad Fermín Toro
Definir un vector Forma general Variable=[tipo]*tamaño Tipo: es el valor inicial con el cual quedarán llenas todas las posiciones creadas del vector. Tamaño:
Problema de inclusión en una Curva Digital Por Orellana Muñoz, Alfonso Paz Vicente, Rafael Pérez Medina, Gerardo Rodríguez Naranjo.
PROBLEMA DE MATEMÁTICAS (Polinomios, 3º ESO, Tema 5)
Tema 6: Estructuras de Control
¿Qué memoria? Unidad 6 Página 83 ¿Te acuerdas? 1. A.3 B. 4 C. 1 D Aunque + indicativo: C Aunque + presente o pretérito perfecto de subjuntivo:
NANO, UN PEZ DIFERENTE.
Isabella Gómez Torres y Camila Grisotto León Edades: Isabella: 10 años y Camila: 10 años, estudiamos en el colegio EMIL FRIEDMAN.
COMPUTO III Ing. Jimmy Ojeda Arnica.
Funcionamiento del servicio de correo electrónico
El delincuente y la anciana Marta Nonbre: EstefanÍa Gonzaled Curso: 6º de primaria Colegio: Cra Domingo de Guzman.
Francisco Gamboa Herrera Tanya Pérez Herrera Viernes 12 de Noviembre, 2010 Presentación de Resultados finales.
CUENTO CON FINAL ABIERTO
Tema 6 – Servicio de Correo Electrónico
Visual Basic FUNCIONES Y PROCEDIMIENTOS
LAS 10 FORMAS MAS SEGURAS DE ELEGIR MAL LOS ESTUDIOS
Estructura: COLA Profesor: Ing. Erick López Ch. M.R.I.
Objetivos del tema. Hemos visto lo que es la estructura de un programa, los datos, que esos datos en realidad se convierten en variables de distinto.
Daniela era una niña muy tierna que siempre se la pasaba estudiando en casa o de ves en cuando salía con sus amigas y se iban de compras o simplemente.
Algorítmica y Programación
Estructura de Datos PILA Universidad Hispanoamericana Prof. Ing. Erick López.
NAVIDAD 2011 NAVIDAD 2011 Como todos los años esta mañana hemos ido a visitar Nacimientos. Mi abuela lo tiene como costumbre, montar su Belén un par.
Transcripción de la presentación:

PRÁCTICA INVENTADA TOP MANTA Matías Blanco – Sergio Pérez

Enunciado Un grupo de N individuos de Bolaños, tras ver muchos dibujos de Sin Chan en la televisión, han decidido imitar el comportamiento de sus héroes los asiáticos. Habiendo visto tan poco mundo, han tenido que decidir entre montar un restaurante o ponerse a copiar CDs para el topmanta. Como uno de ellos era informático, optaron por lo segundo. Así, se organizaron del siguiente modo: ● N de ellos copiarían CDs, para lo cual, cada cierto tiempo, tendrían que reponer los CDs vírgenes que usan para tal tarea. ● Ellos mismos irían al polígono industrial y buscarán en algún almacén por si hay CD's suficientes. Si los hay, los cogen. ● Si no quedan suficientes, llamarán al relaciones públicas, antes llamado Pepe, ahora conocido como Pe Ping. Éste se encargará de llenar los almacenes. ● Sólo cuando Pe Ping haya repuesto, los demás podrán coger CDs de ese almacén.

Enunciado (2) Este negocio era demasiado fácil para ser verdad, hasta que un día apareció el primo de Pe Ping, llamado Hoo Lee Ann, para complicarlo todo. Avisó a la policía, diciéndoles que en el polígono se encontraban almacenes donde había CDs que se usaban para piratería. La policía empezó entonces a hacer rondas, de almacén en almacén. Cuando iban a investigar uno de ellos (que no lo hacían siempre porque eran vagos), a veces (que no siempre) Pe Ping recibía un chivatazo de su amigo el corrupto. Cuando lo recibía, movía los CDs de un almacén al siguiente. Si la policía iba sin aviso y no encontraba CDs no pasaba nada, había sido una falsa sospecha. Por el contrario, si encontraba CDs mandaban a Pe Ping a la carcel, pero Pe Ping, que era un poquito... inculpaba a algunos de sus piratillas, que serían los que fueran a la cárcel por él. Cuando salieran de la cárcel, continuarían trabajando.

Citas ADA  Tareas:  Almacen  Piratilla  Pe Ping  Policia  Citacion

Citas ADA - Almacen  Representa un almacén con N_CDs_ALMA CDs.  Tanto un piratilla, como la policía, como Pe Ping tienen acceso al mismo.  Piratilla – lectura  PePing – lectura/escritura  Policia – lectura/escritura

Citas ADA – Almacén (2)  Init – Inicializa almacén  Pilla_CDs – Devuelve los CDs que se piden y OK si hay suficientes, si no, not OK.  Llenar – Llena el almacén.  Vaciar – Saca los CD's que queden y nos devuelve cuántos son.  Meter – Introduce un número determinado de CDs. Llenar podría utilizar esta entrada pero se han separado por significar cosas diferentes.  PoliInvestiga – Devulve el número de CDs que hay dentro de ese almacén.  PoliRequisa – La policía vacía el almacén.

Citas ADA – Almacén (3) task type Almacen is entry Init(Idd: in Integer); entry Pilla_CDs(Idd: in Integer; N_CDs: in Integer; OK: in out Boolean); entry Llenar; entry Vaciar(N_CDs: in out Integer); entry Meter(N_CDs: in Integer); entry PoliInvestiga(N_CDs: in out Integer); entry PoliRequisa; end Almacen; Almacenes: array (1..MAX_ALMACENES) of Almacen;

Citas ADA – Almacén (4) task body almacen is Id: Integer; N_CDS_ALMA: Integer; begin accept Init (Idd: in Integer) do Id:= Idd; end Init; N_CDS_ALMA:= MAX_CDs_ALMACEN; -- Lleno en un principio loop select accept Pilla_CDs (Idd: in Integer; N_CDs: in Integer; OK: in out Boolean) do if (N_CDs <= N_CDs_ALMA) then Put("El piratilla " & Integer'Image(Idd) & " coge " & Integer'Image(N_CDs) & " CDs del almacen " & Integer'Image(Id) );New_Line; N_CDs_ALMA:= N_CDs_ALMA - N_CDs; OK:=True; else OK:= False; end if; end Pilla_CDs;

Citas ADA – Almacén (5) …or… accept Llenar do if (N_CDs_ALMA >= MAX_CDs_ALMACEN) then Put("El almacen " & Integer'Image(Id) & "ya no hace falta llenarlo.");New_Line; else Put("PePing empieza a llenar el almacen " & Integer'Image(Id));New_Line; N_CDs_ALMA:= MAX_CDs_ALMACEN; delay 1.0; Put("PePing termina de llenar el almacen " & Integer'Image(Id));New_Line; end if; end Llenar; or accept Vaciar(N_CDs: in out Integer) do Put("PePing vacia el almacen " & Integer'Image(Id));New_Line; N_CDs:= N_CDs_ALMA; N_CDs_ALMA:=0; end Vaciar;

Citas ADA – Almacén (6)..or… accept Meter(N_CDS: in Integer) do Put("PePing mete " & Integer'Image(N_CDS) & " CDs de la mudanza en el almacen " & Integer'Image(Id));New_Line; N_CDs_ALMA:= N_CDs_ALMA + N_CDs; end Meter; or accept PoliInvestiga(N_CDs: in out Integer) do N_CDs:= N_CDs_ALMA; end PoliInvestiga; or accept PoliRequisa do N_CDs_ALMA:=0; end PoliRequisa; end select; end loop; end Almacen;

Citas ADA – Pe Ping task body PePing is AlmacenesRepo: TAlmacenesReposicion; AuxSacar: Integer:= 0; begin for I in 1..MAX_ALMACENES loop AlmacenesRepo(I):= False; -- No hay ninguno en reposicion end loop; loop select accept Reponer(Id: in Integer; N:in Integer) do if (not AlmacenesRepo(N)) then Put("PePing recibe la llamada del piratilla " & Integer'Image(Id) & " avisando para el en almacen " & Integer'Image(N));New_Line; AlmacenesRepo(N):=True; Almacenes(N).Llenar; AlmacenesRepo(N):=False; else Put("PePing recibe la llamada del piratilla " & Integer'Image(Id) & " avisando para el en almacen " & Integer'Image(N) & ": ya avisado!");New_Line; end if; end Reponer;

Citas ADA – Pe Ping (2) or accept Soplo(NumAlmacen: in Integer) do Put("La poli filtra a PePing que se va a investigar el almacen " & Integer'Image(NumAlmacen));New_Line; Almacenes(NumAlmacen).Vaciar(AuxSacar); delay (1.0); -- tarda un poco en mudar if (NumAlmacen < MAX_ALMACENES) then Almacenes(NumAlmacen+1).Meter(AuxSacar); else Almacenes(1).Meter(AuxSacar); end if; end Soplo;

Citas ADA – Pe Ping (3) or accept Carcel do Put("PePing a la carcel, pero... para librarse...");New_Line; for I in 1..MAX_PIRATAS loop if (Random(G) < 0.3) then Put("... inculpa y manda al piratilla " & Integer'Image(I) & " a la carcel x(");New_Line; Citacion.MandarCitacion(I); end if; end loop; end Carcel; end select; end loop; end Peping;

Citas ADA – Piratilla task body Piratilla is Id: Integer; N_CDs: Integer; OK: Boolean; CarcelFlag: Boolean; AlmacenActual: Integer:=0; begin accept Init(Idd: in Integer) do Id:= Idd; N_CDs:= Integer(Float(MAX_CDS_PIDEN-MIN_CDS_PIDEN)*Random(G))+MIN_CDS_PIDEN; CarcelFlag:=False; end Init;

Citas ADA – Piratilla (2) loop -- Graba Put("El piratilla " & Integer'Image(Id) & " están grabando");New_Line; delay Duration(0.1*Float(N_CDs)*Random(G)); -- Mira si le han pillado----- Citacion.VerTablon(Id, CarcelFlag); if (CarcelFlag) then Put("El pirata " & Integer'Image(Id) & " se va a la carcel");New_Line; delay 20.0; Put("El pirata " & Integer'Image(Id) & " sale de la carcel");New_Line; end if;

Citas ADA – Piratilla (3) AlmacenActual:=NumeroAleatorio.Random(F); OK:=False; Put("El piratilla " & Integer'Image(Id) & " necesita CDs y va al almacen " & Integer'Image(AlmacenActual) & " a ver si puede pillarlos");New_Line; while (not OK) loop Citacion.VerTablon(Id, CarcelFlag); if (CarcelFlag) then Put("El piratilla " & Integer'Image(Id) & " se libra de la carcel porque no tiene CDs!");New_Line; end if; Almacenes(AlmacenActual).Pilla_CDs(Id, N_CDs, OK); if (not OK) then Put("El piratilla " & Integer'Image(Id) & " avisa a PePing de que no hay CDs suficientes para el en el almacen " & Integer'Image(AlmacenActual));New_Line; PePing.Reponer(Id, AlmacenActual); Put("*"); end if; end loop; Put("El piratilla " & Integer'Image(Id) & " consigue los CDs (");Put(N_CDs,0);Put(")");New_Line; end loop; end Piratilla;

Citas ADA – Policia task body Policia is AlmacenInvestigado: Integer; CDsEncautados: Integer; begin Reset(G); AlmacenInvestigado:= 1; -- Empiezan por el primero. loop delay Duration(Random(G) * ); -- Un cafetillo… CDsEncautados := 0;

Citas ADA – Policia (2) if (Random(G) < 0.8) then if (Random(G) < 0.5) then PePing.Soplo(AlmacenInvestigado); delay 1.0; end if; Almacenes(AlmacenInvestigado).PoliInvestiga(CDsEncautados); if (CDsEncautados > 0) then PePing.Carcel; -- Aqui pueden seguir sacando mientras no requisen Almacenes(AlmacenInvestigado).PoliRequisa; Put("Se requisan " & Integer'Image(CdsEncautados) & " CDs del almacen " & Integer'Image(AlmacenInvestigado));New_Line; end if;

Citas ADA – Policia (3) AlmacenInvestigado:= AlmacenInvestigado + 1; if (AlmacenInvestigado = MAX_ALMACENES + 1) then AlmacenInvestigado:= 1; end if; end loop; end Policia;

Citas ADA – Citacion task body Citacion is Denuncias: TPiratasCitados; begin for I in 1..MAX_PIRATAS loop Denuncias(I):= False; end loop; loop select accept MandarCitacion(Id: in Integer) do Denuncias(Id):= True; end MandarCitacion; or accept VerTablon(Id: in Integer; Denuncia: in out Boolean) do Denuncia:=Denuncias(Id); Denuncias(Id):=False; end VerTablon; end select; end loop; end Citacion;

Citas ADA – variables y tipos… procedure TopMantaCitasAda is G: Generator; -- Constantes MAX_PIRATAS: constant Integer:= 10; -- tipos que copian CDs MAX_CDs_ALMACEN: constant Integer:= 2000; -- CDs que caben en un almacen MAX_CDs_PIDEN: constant Integer:= 200; -- Numero de CDs que piden como mucho MIN_CDs_PIDEN: constant Integer:= 100; -- Minimo de CDs que pueden pedir MAX_ALMACENES: constant Integer:= 4; -- Almacenes por los que se puede mover la mercancia -- Aleatorio discreto subtype valores is Integer range 1..MAX_ALMACENES; package NumeroAleatorio is new Ada.Numerics.Discrete_Random(valores); F: NumeroAleatorio.Generator; -- Tipos y Variables type TAlmacenesReposicion is array (1..MAX_ALMACENES) of Boolean; type TPiratasCitados is array (1..MAX_PIRATAS) of Boolean;

Citas ADA – procesos… Begin Reset(G); for I in 1..MAX_ALMACENES loop Almacenes(I).Init(I); end loop; for I in 1..MAX_PIRATAS loop Piratillas(I).Init(I); end loop; end TopMantaCitasAda;

Tipos Protegidos  Las tareas se mantienen  Almacen se convierte en un tipo protegido.  Como no se realiza ninguna comprobación, no hacen falta entradas, son todo procedimientos.

Tipos Protegidos - Almacen protected type Almacen is procedure Init (Idd: in Integer); procedure Pilla_CDs (Idd: in Integer; N_CDs: in Integer; OK: in out Boolean); procedure Llenar; -- Para reponer procedure Vaciar (N_CDs: in out Integer); procedure Meter (N_CDs: in Integer); procedure PoliInvestiga (N_CDs: in out Integer); -- La poli quiere investigar procedure PoliRequisa; private Id: Integer; N_CDs_ALMA: Integer := MAX_CDS_ALMACEN; end Almacen;

Ejecución $./TopMantaCitasAda El piratilla 1 están grabando El piratilla 2 están grabando El piratilla 3 están grabando El piratilla 4 están grabando El piratilla 5 están grabando El piratilla 6 están grabando El piratilla 7 están grabando El piratilla 8 están grabando El piratilla 9 están grabando El piratilla 10 están grabando El piratilla 3 necesita CDs y va al almacen 4 a ver si puede pillarlos El piratilla 3 coge 121 CDs del almacen 4 El piratilla 3 consigue los CDs (121) El piratilla 3 están grabando El piratilla 3 necesita CDs y va al almacen 1 a ver si puede pillarlos El piratilla 3 coge 121 CDs del almacen 1 El piratilla 3 consigue los CDs (121) El piratilla 3 están grabando El piratilla 8 necesita CDs y va al almacen 1 a ver si puede pillarlos El piratilla 8 coge 171 CDs del almacen 1 El piratilla 8 consigue los CDs (171)

Ejecución (2) El piratilla 8 están grabando El piratilla 2 necesita CDs y va al almacen 4 a ver si puede pillarlos El piratilla 2 coge 119 CDs del almacen 4 El piratilla 2 consigue los CDs (119) El piratilla 2 están grabando El piratilla 9 necesita CDs y va al almacen 3 a ver si puede pillarlos El piratilla 9 coge 125 CDs del almacen 3 El piratilla 9 consigue los CDs (125) El piratilla 9 están grabando El piratilla 9 necesita CDs y va al almacen 1 a ver si puede pillarlos El piratilla 9 coge 125 CDs del almacen 1 El piratilla 9 consigue los CDs (125) El piratilla 9 están grabando El piratilla 9 necesita CDs y va al almacen 1 a ver si puede pillarlos El piratilla 9 coge 125 CDs del almacen 1 El piratilla 9 consigue los CDs (125) El piratilla 9 están grabando El piratilla 6 necesita CDs y va al almacen 1 a ver si puede pillarlos El piratilla 6 coge 141 CDs del almacen 1 El piratilla 6 consigue los CDs (141) El piratilla 6 están grabando El piratilla 1 necesita CDs y va al almacen 4 a ver si puede pillarlos

Ejecución (3) El piratilla 1 coge 162 CDs del almacen 4 El piratilla 1 consigue los CDs (162) El piratilla 1 están grabando El piratilla 2 necesita CDs y va al almacen 1 a ver si puede pillarlos El piratilla 2 coge 119 CDs del almacen 1 El piratilla 2 consigue los CDs (119) El piratilla 2 están grabando El piratilla 5 necesita CDs y va al almacen 1 a ver si puede pillarlos El piratilla 5 coge 119 CDs del almacen 1 El piratilla 5 consigue los CDs (119) El piratilla 5 están grabando PePing a la carcel, pero... para librarse inculpa y manda al piratilla 5 a la carcel x(... inculpa y manda al piratilla 6 a la carcel x( Se requisan 2000 CDs del almacen 2 El pirata 6 se va a la carcel El piratilla 9 necesita CDs y va al almacen 1 a ver si puede pillarlos El piratilla 9 coge 125 CDs del almacen 1 El piratilla 9 consigue los CDs (125) El piratilla 9 están grabando El piratilla 3 necesita CDs y va al almacen 4 a ver si puede pillarlos

Ejecución (4) El piratilla 3 coge 121 CDs del almacen 4 El piratilla 3 consigue los CDs (121) Se requisan 1149 CDs del almacen 4 El piratilla 9 necesita CDs y va al almacen 3 a ver si puede pillarlos El piratilla 9 avisa a PePing de que no hay CDs suficientes para el en el almacen 3 PePing recibe la llamada del piratilla 9 avisando de que no hay CDs sufientes para el en almacen 3 PePing empieza a llenar el almacen 3 El piratilla 3 necesita CDs y va al almacen 4 a ver si puede pillarlos El piratilla 3 avisa a PePing de que no hay CDs suficientes para el en el almacen 4 PePing termina de llenar el almacen 3 PePing recibe la llamada del piratilla 3 avisando de que no hay CDs sufientes para el en almacen 4 *PePing empieza a llenar el almacen 4 El piratilla 9 coge 125 CDs del almacen 3 El piratilla 9 consigue los CDs (125) El piratilla 9 están grabando El piratilla 9 necesita CDs y va al almacen 2 a ver si puede pillarlos El piratilla 9 avisa a PePing de que no hay CDs suficientes para el en el almacen 2...

Fin ¿…?