Extras din curs
Programul C este construit ca proiect compus din doua fisiere sursa, "sp.c" si "rndevg.c". Acesta din urma contine rutine pentru generarea distributiilor statistice, ale caror prototipuri sunt definite în fisierul header "rndevg.h".
Fisierul "rndev.h":
#include <math.h>
#include <stdlib.h>
#include <time.h>
#define MaxReal 1.0E30
#define SEC_D 86400
#ifndef M_PI
#define M_PI 3.1416
#endif
void Randomize(void);
double Expon(double);
double Norml(double,double);
Fisierul "rndevg.c":
#include "rndevg.h"
#include <stdio.h>
void Randomize(void)
{
time_t *t;
long Randseed=time(t) % SEC_D;
srand(Randseed);
printf("Randseed=%ldnn",Randseed);
}
double Expon(Med);
double Med;
{ /* return ( Med * log((double)(rand())/RAND_MAX));*/
int r;
double rd;
r=rand();
if (r != 0) rd=(double)(r);
else rd=(double)(r+1);
return( Med*log(rd/RAND_MAX));
}
double Norml(Med, Sigma);
double Med, Sigma;
{
double E1, N1;
/*Randomize();*/
E1 = Expon(Med);
/*Randomize();*/
N1 = sqrt(2 * E1) * cos(2 * M_PI * (double)(rand())/RAND_MAX);
return (Sigma * N1 + Med);
}
Fisierul "sp.c":
/* ANSI version, with user-constructed Randomize */
#include <stdio.h>
#include "rndevg.h"
#define NumEv 2
#define NMax 500
static double tmis, tms, sigma, tue, b, s, clck;
static long ncl, lqt, lst, mq, f, np, imev;
static double tsclq[NMax];
static double lev[NumEv];
static void INIT()
{
clck = 0.0; imev = 0; lqt = 0; lst = 0; tue = 0.0;
b = 0.0; mq = 0; s = 0.0; f = 0; np = 0;
Randomize();
lev[0] = clck + Expon(tmis);
lev[1] = MaxReal;
}
static void AVANST()
{
long i;
double fmin = MaxReal;
imev = 0; i = 1;
while (i <= NumEv && lev[i 1] <= fmin) {
fmin = lev[i 1];
imev = i;
i++;
}
if (imev == 0) printf("*** ERR.1: Empty Future Event List");
else clck = lev[imev 1];
}
static void SOSIRE()
{
long i;
double ts, tis;
if (lst != 1) {
lst = 1;
tsclq[0] = clck;
ts = Norml(tms, sigma);
lev[1] = clck + ts;
tue = clck;
if (lqt > mq) mq = lqt;
} else {
Preview document
Conținut arhivă zip
- Simularea Secventiala prin Planificare de Evenimente intr-un Limbaj Procedural - ANSI C.doc