Mudanças entre as edições de "Sensores"
Ir para navegação
Ir para pesquisar
Linha 4: | Linha 4: | ||
# f u ck | # f u ck | ||
+ | ==TAREFA 6== | ||
+ | |||
+ | |||
+ | # Adaptar o código de tratamento de uma fila MM1 simples, conforme colocado no slide para um formato de um simulador de eventos discretos com filas. Use o código abaixo como apoio. | ||
+ | |||
+ | |||
+ | <syntaxhighlight lang=c><br />//Basead em http://stdcxx.apache.org/doc/stdlibug/2-2.html#225 | ||
+ | |||
+ | |||
+ | #include <queue><br />#include <iostream><br />#include <cstdlib> | ||
+ | |||
+ | |||
+ | //==================================================================<br />// classes evento e simulação - base para o desenvolvimento da simulação<br />//================================================================== | ||
+ | |||
+ | |||
+ | class event {<br />public:<br /> // Construct sets time of event.<br /> event (double t) : time (t)<br /> { } | ||
+ | |||
+ | |||
+ | // Execute event by invoking this method.<br /> virtual void processEvent () = 0; | ||
+ | |||
+ | |||
+ | const double time;<br />};<br />class simulation {<br />public:<br /> simulation () : simtime (0), eventQueue () <br /> {}<br /> void run ();<br /> void scheduleEvent (event * newEvent) {<br /> eventQueue.push (newEvent);<br /> }<br /> double simtime;<br />protected:<br /> class eventComparator {<br /> public:<br /> bool operator() (const event * left, const event * right) const {<br /> return left->time > right->time;<br /> }<br /> };<br /> std::priority_queue<event*,<br /> std::vector<event *, std::allocator<event*> >,<br /> eventComparator> eventQueue; //fila de eventos <br />}; | ||
+ | |||
+ | |||
+ | void simulation::run () { | ||
+ | |||
+ | |||
+ | while (! eventQueue.empty ()) { //enquanto exisitr eventos na fila de eventos | ||
+ | |||
+ | |||
+ | event * nextEvent = eventQueue.top (); //captura evento no topo da fila<br /> eventQueue.pop (); //retira evento da fila<br /> simtime = nextEvent->time; //ajusta tempo de simulação<br /> nextEvent->processEvent (); //processa evento<br /> delete nextEvent; //remove evento<br /> }<br />} | ||
+ | |||
+ | |||
+ | //===================================================================<br />//Customização dos eventos e do simulador<br />//=================================================================== | ||
+ | |||
+ | |||
+ | class standardArrival : public event {<br />public:<br /> standardArrival (double t)<br /> : event (t)<br /> { }<br /> virtual void processEvent ();<br />}; | ||
+ | |||
+ | |||
+ | void standardArrival::processEvent () {<br /> std::cout << "processando evento no tempo " << time << '\n';<br />} | ||
+ | |||
+ | |||
+ | class simuladorFilas : public simulation {<br />public:<br /> simuladorFilas ()<br /> { }<br /> <br />} oSimulador; | ||
+ | |||
+ | |||
+ | // from https://stackoverflow.com/questions/2704521/generate-random-double-numbers-in-c | ||
+ | |||
+ | |||
+ | double fRand(double fMin, double fMax)<br />{<br /> double f = (double)rand() / RAND_MAX;<br /> return fMin + f * (fMax - fMin);<br />} | ||
+ | |||
+ | |||
+ | int main () { | ||
+ | |||
+ | |||
+ | // Inicializar aqui a fila de eventos<br /> double t; | ||
+ | |||
+ | |||
+ | oSimulador.scheduleEvent (new standardArrival (t=fRand(1.0,10.0)));<br /> oSimulador.scheduleEvent (new standardArrival (t=t+fRand(1.0,10.0)));<br /> oSimulador.scheduleEvent (new standardArrival (t=t+fRand(1.0,10.0))); | ||
+ | |||
+ | |||
+ | // Executar simulador<br /> oSimulador.run ();<br /> return 0;<br />} | ||
+ | |||
+ | |||
+ | </syntaxhighlight> |
Edição das 17h39min de 2 de maio de 2020
Código nodemcu esp8266-12e
- f u ck
TAREFA 6
- Adaptar o código de tratamento de uma fila MM1 simples, conforme colocado no slide para um formato de um simulador de eventos discretos com filas. Use o código abaixo como apoio.
<br />//Basead em http://stdcxx.apache.org/doc/stdlibug/2-2.html#225
#include <queue><br />#include <iostream><br />#include <cstdlib>
//==================================================================<br />// classes evento e simulação - base para o desenvolvimento da simulação<br />//==================================================================
class event {<br />public:<br /> // Construct sets time of event.<br /> event (double t) : time (t)<br /> { }
// Execute event by invoking this method.<br /> virtual void processEvent () = 0;
const double time;<br />};<br />class simulation {<br />public:<br /> simulation () : simtime (0), eventQueue () <br /> {}<br /> void run ();<br /> void scheduleEvent (event * newEvent) {<br /> eventQueue.push (newEvent);<br /> }<br /> double simtime;<br />protected:<br /> class eventComparator {<br /> public:<br /> bool operator() (const event * left, const event * right) const {<br /> return left->time > right->time;<br /> }<br /> };<br /> std::priority_queue<event*,<br /> std::vector<event *, std::allocator<event*> >,<br /> eventComparator> eventQueue; //fila de eventos <br />};
void simulation::run () {
while (! eventQueue.empty ()) { //enquanto exisitr eventos na fila de eventos
event * nextEvent = eventQueue.top (); //captura evento no topo da fila<br /> eventQueue.pop (); //retira evento da fila<br /> simtime = nextEvent->time; //ajusta tempo de simulação<br /> nextEvent->processEvent (); //processa evento<br /> delete nextEvent; //remove evento<br /> }<br />}
//===================================================================<br />//Customização dos eventos e do simulador<br />//===================================================================
class standardArrival : public event {<br />public:<br /> standardArrival (double t)<br /> : event (t)<br /> { }<br /> virtual void processEvent ();<br />};
void standardArrival::processEvent () {<br /> std::cout << "processando evento no tempo " << time << '\n';<br />}
class simuladorFilas : public simulation {<br />public:<br /> simuladorFilas ()<br /> { }<br /> <br />} oSimulador;
// from https://stackoverflow.com/questions/2704521/generate-random-double-numbers-in-c
double fRand(double fMin, double fMax)<br />{<br /> double f = (double)rand() / RAND_MAX;<br /> return fMin + f * (fMax - fMin);<br />}
int main () {
// Inicializar aqui a fila de eventos<br /> double t;
oSimulador.scheduleEvent (new standardArrival (t=fRand(1.0,10.0)));<br /> oSimulador.scheduleEvent (new standardArrival (t=t+fRand(1.0,10.0)));<br /> oSimulador.scheduleEvent (new standardArrival (t=t+fRand(1.0,10.0)));
// Executar simulador<br /> oSimulador.run ();<br /> return 0;<br />}