# L-13 MCS 260 Wed 26 Sep 2007 : top down and functions # # simulate processing of jobs to compute waiting times # def form(L): "returns floats in L in %.2f format" s = "[ " + '%.2f' % L[0] for i in range(1,len(L)): s += ', ' + '%.2f' % L[i] return s + ' ]' def ask(): "returns tuple (n,T,mu,sg)" n = input('number of jobs : ') T = input('length of time : ') mu = input(' mean time/job : ') sg = input(' deviation/job : ') return (n,T,mu,sg) def make_jobs(n,T,mu,sg): "returns arrival and process times" A = [] # arrival times of jobs P = [] # time to process each job import random for i in range(0,n): A.append(random.uniform(0,T)) P.append(random.gauss(mu,sg)) A.sort() return (A,P) def simulate(A,P): "returns wait time for each job" W = [0] # no wait for first job b = P[0] # time busy for job for i in range(1,len(A)): t = A[i] - A[i-1] # elapsed time if t >= b: # idle printer b = 0 # no wait else: # busy printer b = b - t # wait W.append(b) # store wait b = b + P[i] # update busy return W def avgdev(W): "average and deviation of W" import math avg = sum(W)/len(W) dev = 0 for i in range(0,len(W)): dev += (W[i] - avg)**2 dev = math.sqrt(dev) return (avg,dev) def main(): (n,T,mu,sg) = ask() (A,P) = make_jobs(n,T,mu,sg) print ' arrivals : ' + form(A) print 'job times : ' + form(P) W = simulate(A,P) print 'wait times : ' + form(W) (a,d) = avgdev(W) print 'average wait : %.2f' % a print ' deviation : %.2f' % d main()