Kashub's Code Barn - "laborka"

podświetlone jako cpp (dodał(a) bar @ 2010-05-11 12:13:18)

Twoja wyszukiwarka
Podświetl ten kod w:
Ostatnio dodane:
Losowe wpisy:
#include "cslpp.h"
#include "conio.h"
 
#define MaxLiczbaZgloszen 1000
#define SrOdstepZgl 1000
#define SrCzasObsl 450
 
#define SumZgloszen 10000
 
 
class Element : public Timer{
 public:
		int LP;
};
 
 
// typedef Timer Element  ;
 
Element		Zgloszenie[MaxLiczbaZgloszen];
Set 		Wolne(MaxLiczbaZgloszen);
Queue		Kolejka(MaxLiczbaZgloszen);
 
Timer		NadZgl,
		KonObsl ;
 
int StanObsl;
 
 
 
Negexp	GenOdstZgl   (SrOdstepZgl),
		GenCzasObsl (SrCzasObsl);
 
StatD		StatCzasuPobytu;
StatCRect   StatDlKol;
 
uint		DlKol;
Timer       ZegarStat;
 
Hist		HistLP(7, 0, 1);
 
long LiczbaObs;
long SumLiczbaObs = 10000;
uint El;
 
Random rnd3(3);
 
// funkcja prawdopodobienstwo 1/3
int bRet (){
 if (rnd3.Get() > 2)
	return 1;
 else
	return 0;
}
 
 
void Eksperyment () {
 
	// inicjalizacja
	Wolne.Load();
	Kolejka.Zero();
	ZegarStat.t =0;
 
	StatDlKol.Clear(0);
	HistLP.Clear();
	StatCzasuPobytu.Clear();
 
	LiczbaObs = 0;
	StanObsl = -1;
	NadZgl.t = 0;
	NadZgl.SetOn();
 
 
 
// petla symulacji
while (1) {
 
	// jesli nadchodzi zgloszenie
	if (NadZgl.Now()) {
		Wolne.Find(El, FIRST); // znajdujemy element ze zbioru Wolne
		Wolne.From(El); // usuwamy ten element
		Zgloszenie[El].LP =0; // liczba wystapien ustawiona na zero
		Zgloszenie[El].t= 0; // ustawiamy czas pobytu w systemie na zero
		Kolejka.To(El); // dodajemy element do kolejki przed stanowiskiem obslugi
		DlKol++ ; // inkrementacja zmiennej przechowujacej dlugosc kolejki
		StatDlKol.Add (DlKol, -ZegarStat.t); // aktualizacja statystyki dot. sredniej dl. kolejki
						     // (aktualny czas to -ZegarStat.t)
		NadZgl.t = GenOdstZgl.Get(); // ustawienie czasu nadejscia kolejnego zgloszenia
	}
 
 
	// jesli nastepuje koniec obslugi elementu na stanowisku obslugi
	if (KonObsl.Now()) {
 
	/***************************************/
	// miejsce ktore uzupelniamy		
 
		// do histogramu liczby przejsc
		Zgloszenie[StanObsl].LP++;
 
		if (bRet())
		{
			// wracamy element na poczatek kolejki z prawdopodobienstwem 1/3
			Kolejka.To(StanObsl); 
			DlKol++ ; // zwiekszamy dlugosc kolejki
			StatDlKol.Add (DlKol, -ZegarStat.t); // aktualizujemy statsytke sr. dlugosci kolejki
 
		}
		else
		{
			// koniec obslugi elementu
 
			LiczbaObs++;
 
			// histogram dotyczacy liczby przejsc elementow przez stanowisko obslugi
			HistLP.Add(Zgloszenie[StanObsl].LP);
 
			// sredni czas pobytu w systemie
			StatCzasuPobytu.Add(-Zgloszenie[StanObsl].t);
			Wolne.To( StanObsl); // wprowadzenie elementu do zbioru Wolne
 
		}
		StanObsl = -1 ; // stanowisko obslugi jest puste
		KonObsl.SetOff(); // zablokowanie obslugi
 
	}
 
	// jesli stanowisko obslugi jest wolne i sa elementy w kolejkce to pobierz element
	if ((StanObsl==-1) && (Kolejka.Find(El, FIRST)) ){
		Kolejka.From (El); // usun element z kolejki
		DlKol--; // zmniejsz dlugosc kolejki
		StatDlKol.Add (DlKol, -ZegarStat.t); // aktualizuj statystyke sredniej dlugosci kolejki
		StanObsl = El; // zapamietujemy numer obslugiwanego elementu
		KonObsl.t = GenCzasObsl.Get(); // generacja czasu zakonczenia obslugi
		KonObsl.SetOn(); // wlaczene obslugi
 
 
	}
 
 
	if (LiczbaObs>=SumLiczbaObs)
		break;
 
 
 
	TimeFlow();
 
}
}
 
int main()
{
double sr;
sr = 2.71828 ;
 
/*
for (int m=1; m<100;m++)
cout << rnd3.Get() << " ";
cout << endl ;
*/
 
 
clrscr() ;
cout << "Symulacja" << endl ;
Eksperyment();
cout << "Wyniki po przej˜ciu " << LiczbaObs << " obserwacji"<< endl ;
cout << "Czas symulacji: " << -ZegarStat.t << endl;
 
 
StatCzasuPobytu.GetStat(sr);
cout << "Sredni czas pobytu w systemie: " << sr << endl ;
 
StatDlKol.GetStat(-ZegarStat.t,sr);
cout << "Srednia dlugosc kolejki: " << sr << endl ;
 
cout << "Histogram liczby przejsc:\n" << HistLP << endl ;
 
cout << endl;
 
 
return 0;
}
 
 
| Sklepy internetowe | | sklep z bielizną | | Skróć link | | Darmowe Blogi | | Blog o książkach | | Blogi za darmo | | Jak przenieść bloga | | Skracacz adresów | | Opisy GG |