c程序-队列实现模拟加油站 PPT课件_第1页
c程序-队列实现模拟加油站 PPT课件_第2页
c程序-队列实现模拟加油站 PPT课件_第3页
c程序-队列实现模拟加油站 PPT课件_第4页
c程序-队列实现模拟加油站 PPT课件_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

信软件基础实训答辩3 选题 模拟加油站的工作情况小组成员 三枚铜钱94keyboard时间 2015 5 5 通 模拟加油站的工作情况 加油站有两台油泵 每台油泵为一辆汽车加油的时间为d分钟 加油站的到车率为1辆 g分钟 模拟时间长度为time分钟 1 分析问题 2 确定框架 3 实现程序 1 分析问题 1 看是否有车来到 概率决定 2 若有车再看是否有空闲的油泵3 若有空闲油泵立即加油 否则排队等待4 若泵工作忙 未达到加油时间 则时间递减等待5 时间递减后若为0 将泵置为空闲 1 分析问题 我们要做什么 1 方案思路 模型 油泵1 油泵2 出口 出口 汽车入口 排队 第一段路 第二段路 第三段路 等待可服务 1 分析问题 日常生活中该类模型 是队列应用的典型例子 以加油站为例 假设某加油站有两台油泵 每台油泵的加油时间为d分钟 若已知该站的到车率为g分钟一辆 则该加油站的工作情况可用以下列队模型描述 定义一个循环队列 容量为MAX 足够大 不发生队列满的问题 用于组织等待加油的汽车序列 按照先到先加油的原则进行处理 整个模拟过程内的时间为time 每隔dt分钟监控一次 获取并输出实际情况 出事状态设为 队列为空 front rear MAX 每台油泵为空闲 pump 1 pump 2 0 油泵未服务过 auto 1 auto 2 1 if rear 1 MAX thenrear 1 elserear 1 time queue time queue dt 条件 s 2 m即dt g 2在模拟时间time内 每隔dt时间 监控并报告一次车排队的情况 油泵的工作状态 被服务的车 因此用一维整型数组Queue 存取车编号num的数据 量化后 数字信号 模拟信号 整个问题可分为三部分 1 汽车排队 已知一分钟来一辆车的概率为1 g 则每隔dt分钟来一辆车的概率为dt g 由于来车的问题是随机的 因此 实际处理时 每隔t分钟产生一个随机数rnd 0 1内 若它小于等于dt g 则认定有一辆车进站 应将它加入队列中 2 油泵工作状态 用pump i 表示第i i 1 2 每台油泵工作进程 用auto i 表示第i台油泵的服务对象 则当第i台油泵开始为一辆车工作时 置pump i d dt 以后每dt分钟 令pump i pump i dt 若pump i 0时 若pump i 0表示油泵i正在为auto i 加油 若pump i 0表示油泵i所余时间才能加完油 若pump i 0表示油泵i刚为auto i 加完油 若pump i 0表示油泵i已经为auto i 加完油 排队Queue rear front 尾指针将新元素插入队中 头指针将等待的元素对应服务油泵 1 2 3 4 5 6 MAX front rear 2 确定框架 第一步模拟概率 第二步模拟排队 第三步模拟加油 第四步采样报告 2 确定框架 3 实现程序 voidmain int Queue MAX front rear aut 2 FP 2 num 定义队列相关变量及2个加油泵数组及编号doubleTime dt t g d rnd r 1 0 s 模拟情况所用相关数据MAX 10 循环队列空间容量Queue malloc MAX sizeof int 分配循环队列顺序存储空间rear front MAX 初始化循环队列aut 0 aut 1 1 设置两台油泵还没有服务过FP 0 FP 1 0 设置两台油泵为空闲状态 注释 油泵FuelPump FP汽车auto aut 当aut i 1时 表示油泵i从未工作过 当aut i 0时 若FP i 0表示油泵i正在为aut i 加油 FP i 的值为到加完油还剩的时间 FP i 0为油泵可服务若FP i 0表示油泵i刚为aut i 加完油 若FP i 0表示油泵i已经为aut i 加完油 输入操作显示 printf 请输入到车率中g 分钟 scanf lf 这里时间用到的都是double型 提高模拟的准确度 num 0 t 0 srand unsigned time NULL while t Time 在模拟时间未结束 随机数0 1之间产生 rnd rand double RAND MAX 1 32767 范围不会超过 32768 32767 rnd rand 32767 00 simu aut Queue MAX 释放循环队列空间 模块函数 模拟汽车排队函数模拟加油泵1工作函数模拟加油泵2工作函数 模拟汽车排队 simu aut Queue MAX rear num dt g rnd intQueue MAX rear num 指针指向num front rear所占内存地址doubledt g rnd if rnd dt g 满足概率则给车编号加入循环队列 num 1 rear 1 if rear MAX 1 rear 1 如果rear从1达到max后再前进一个位置就自动到1 Queue rear 1 num 循环队列解决假溢出 从队列开始位置入队一个编号 用到了参数 概率rnd 采样时间dt到车率g确定概率范围 循环队列Queue尾指针rear将新元素插入队中容量MAX给车编号num 编号入队后一次判断油泵是否可以服务 判断队列中是否有车 有车就将排在队首的元素给空闲的泵服务 判断查询一次都要在时间上减去dt 以FP i 的大小可以参照还有多长时间可以加完油 模拟油泵i工作 simu pump Queue MAX front rear dt d FP aut i intQueue MAX rear front FP aut i doubledt d if FP i 1 0 加油泵可以服务 没车来或刚好有车来 if front rear rear 1和队空判断 FP i 1 0 没有车即空闲状态 else front front 1 if front MAX 1 front 1 解决假溢出aut i 1 Queue front 1 第i辆车被服务FP i 1 d dt elseFP i 1 FP i 1 dt 每隔dt时间报告一次经过前两个函数运行后 可以得到插入队列的编号 即排队的车数 被服务的车的编号加油泵1 2的工作状态front比rear小说明rear插入的多front服务的少从front开始遍历到rear找到正在排队的编号 模拟结果的输出 print out Queue MAX front rear FP aut intQueue MAX rear front FP aut intk k front while k rear 两台都在忙且rear插入的比服务front的多 k k 1 if k MAX 1 k 1 printf Queue d d n k Queue k 1 printf FP 1 d aut 1 d n FP 0 a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论