Mudanças entre as edições de "Sensores"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Etiqueta: Substituído
Linha 4: Linha 4:
  
 
# f u ck
 
# f u ck
==meu pirú==
 
 
# 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 10h19min de 3 de maio de 2020


Código nodemcu esp8266-12e

  1. f u ck