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

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 1: Linha 1:
  
  
 +
==TAREFA 6==
  
<syntaxhighlight lang=matlab><br  />% Exemplos e Experimentos baseados no livro:<br  />% DINIZ, P. S. R., DA SILVA, E. A. B., e LIMA NETTO, S. Processamento Digital de Sinais: Projeto e Análise de Sistemas. 2. ed. Porto Alegre: Bookman, 2014. 976 p. ISBN 978-8582601235.<br  />%% Experimento 1.1<br  />alpha = 1.15; N = 256;<br  />x = [1 zeros(1,N)];<br  />y = filter(1,[1 -1/alpha],x);<br  />stem(y);<br  /></syntaxhighlight>
+
# 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 17h19min de 2 de maio de 2020


TAREFA 6

  1. 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  />}