SYMULACJA CYFROWA (PRZEMYSŁAW ANDRZEJEWSKI) poprawiony program


SYMULACJA CYFROWA

PRZEMYSŁAW ANDRZEJEWSKI

Program przedstawiający symulację obsługi kolejki samochodów przez 2 policjantów sprawdzających stan pojazdów. Kierowcy podjeżdżają, są obsługiwani i odjeżdżają ze stanowiska. Kierowcy przyjmowani są wg systemu FIFO. W Naszej symulacji zakładamy że po drogach jeżdżą sami porządni kierowcy i sprawne samochody. Żaden nie musi być zatrzymany. Dane wejściowe programu symulacyjnego stanowią:

SCHEMAT BLOKOWY:

0x01 graphic

KOD PROGRAMU:

#include <time.h>

#include <stdlib.h>

#include <queue>

#include <iostream>

using namespace std;

int main()

{

int X;

do

{

queue<int> kolejka; // inicjacja kolejki

int nowy = 0; // czas przybycia nowego auta

int A = 0; // stanowisko A

int B = 0; // stanowisko B

int sr_t_obsl; // średni czas obslugi

int sr_t_nowego; // średni czas przybycia nowego auta

int t_s; // czas symulacji

int dl_kolejki; //długość kolejki

int max_kolejka = 0; // maksymalna ilość aut jaka była w kolejce

int sum_kolejka = 0; // suma aut z kolejki

int t_oczekiwania = 0; // łaczny czas oczekiwania

int suma_aut = 0; // suma aut

cout<<"JAKI CZAS SYMULACJI ??"<<endl;

cout<<"\n"<<endl;

cin>>t_s;

cout<<"\nJAKI SREDNI CZAS OBSLUGI??"<<endl;

cout<<"\n"<<endl;

cin>>sr_t_obsl;

cout<<"\nJAKI SREDNI CZAS DOLACZENIA AUT W KOLEJKE ??"<<endl;

cout<<"\n"<<endl;

cin>> sr_t_nowego;

cout<<"\nJAKA DLUGOSC KOLEJKI ??"<<endl;

cout<<"\n"<<endl;

cin>>dl_kolejki;

srand(time(NULL));

nowy = (rand() % (sr_t_nowego + 1)); // wyznaczenie czasu nowego auta

for(int t = 0; t < t_s; t++)

{

if(nowy == 0)

{

if(dl_kolejki > kolejka.size())

{

suma_aut = suma_aut + 1; // dodanie kolejnego auta do sumy wszystkich

kolejka.push(t); // dodanie auta do kolejki z czasem przyjazdu

}

nowy = (rand() % (sr_t_nowego + 1)); // wyznaczenie czasu kiedy pojawi się kolejne auto

}

if(A == 0 && kolejka.size() > 0)

{

t_oczekiwania = t_oczekiwania + (t - kolejka.front()); // dodanie czasu oczekiwania auta

kolejka.pop(); // usunięcie auta z kolejki

A = (rand() % (sr_t_obsl + 1)); // wyznaczenie czasu obslugi A

}

if(B == 0 && kolejka.size() > 0)

{

t_oczekiwania = t_oczekiwania + (t - kolejka.front()); // dodanie czasu oczekiwania auta

kolejka.pop(); //usunięcie auta z kolejki

B = (rand() % (sr_t_obsl + 1)); // wyznaczenie czasu obslugi B

}

if(A > 0)

{

A = A - 1; // zmniejszenie czasu za ile skończy się mycie

}

if(B > 0)

{

B = B - 1; // zmniejszenie czasu za ile skończy się mycie

}

if(nowy > 0)

{

nowy = nowy - 1; // zmniejszenie czasu za ile przyjdzie nastepny klient

}

if(max_kolejka < kolejka.size())

{

max_kolejka = kolejka.size();

}

sum_kolejka = sum_kolejka + kolejka.size();

}

cout<<"---------------------------------------------------------------";

cout<<"\n";

cout<<"SUMA AUT: "<<suma_aut <<endl;

cout<<"\n";

cout<<"MAKSYMALNA ILOSC AUT CZEKAJACYCH W KOLEJCE: "<<max_kolejka<<endl;

cout<<"\n";

cout<<"SREDNIO W KOLEJCE CZEKALO: "<<sum_kolejka / t_s <<endl;

cout<<"\n";

cout<<"SREDNI CZAS OCZEKIWANIA: "<<t_oczekiwania / (suma_aut - kolejka.size())<<endl;

cout<<"\n";

cout<<"---------------------------------------------------------------";

cout<<"\n";

cout<<"*** NOWA SYMULACJA?? <press 1 and ENTER to confirm> ***\n\n";

cin>>X;

cout<<"\n";

cout<<"\n";

cout<<"\n";

}

while (X==1);

system("pause");

return 0;

}

SYMULACJE:

0x01 graphic

Przy budowaniu programu skorzystałem z adaptera kolejki FIFO [queue] dostępnego w bibliotece C++. W strukturze tej mamy dostęp tylko do pierwszego i ostatniego elementu kolejki. Operacje tej kolejki wykorzystane w tym programie to:

Przypisanie wartosci czasów obsługi i przyjazdu nowych aut było realizowane przy pomocy generatora liczb losowych funkcji „rand()”. Generator ten ma rozkład równomierny. Oznacza to, że szanse wylosowania kazdej liczby z wybranego zakresu są takie same.

Dane wyjsciowe programu stanowią:

W obydwóch przypadkach symulacji mieliśmy do czynienia z przepełnieniem kolejki. W przypadku przepełnienia kolejki, pozostałe auta przyjeżdżające, musiały kierować się na inną drogę. Nie zostały więc obsłużone. Problem przepełnienia mógł zostać zniwelowany, gdyby przy kontroli stał jeszcze jeden policjant. Wyjściowe wartosci średnie zostały nieco przybliżone, ponieważ program operuje na liczbach całkowitych.



Wyszukiwarka

Podobne podstrony:
przemysłowa wykład 3 poprawiony
poprawiony program wychowawczy, Materiały dydaktyczne EFS
9 Poprawność programów
Matematyka dyskretna 2002 11 Poprawność programów
Referat Poprawno¶ć programów[1] Bł±d,Ľródła błędów Anetka
Andrzej Fesnak Programowanie sukcesu 11 użytecznych porad
Matematyka dyskretna 2002 11 Poprawność programów
Programowanie robotów przemysłowych FANUC
Środowisko programowe do symulacji zjawiska tunelowania
Program - PROGNOZOWANIE I SYMULACJA, STUDIA, prognozowanie
pw sc2, WAT, IV SEM, PW, koloPW, Programowanie Wspólbieżne, pw poprawa
Program syganlizacj poprawiony
Sprawozdanie ze znajomości programu symulacyjnego NF & S, metalurgia i odlewnictwo
PROGRAM PROFILAKTYCZNY DOTYCZĄCY ZWALCZANIA AGRESJI WŚRÓD UCZNIÓW SZKOŁY PODSTAWOWEJ ( do poprawek )
Metrologia, POPRAWIONE 02 - Badanie charakterystyk statycznych przetworników cyfrowych, Metrologia -
PROGRAM PROFILAKTYCZNY DOTYCZĄCY ZWALCZANIA AGRESJI WŚRÓD UCZNIÓW SZKOŁY PODSTAWOWEJ ( do poprawek )
Metrologia, POPRAWIONE 02 - Badanie charakterystyk statycznych przetworników cyfrowych, Metrologia -
Instrukcja Obsługi Programu Symulacyjnego TUTSIM
statystyka i symulacje program PL

więcej podobnych podstron