資源簡介
比較簡易的版本,利用有限自動機原理做的 需要的朋友可以拿來參看參看!
代碼片段和文件信息
#include?????????????????//?程序所包含頭文件?
#include
#include
int?status?(int?*timeCulculate);?????????//?電梯運行狀態轉換函數??
void?Control?(int?*time_countint?*position);????????//?電梯運行控制函數??
void?GetInput(FILE?*);???????????//?電梯指令輸入函數??
void?Writemessage?();?????????????//?電梯指令輸出函數
//外部公共參數?
int?state?=?0;
int?time?=?0;
int?array_call[50]?=?{0};
int?CurrentFloor?=?1;???????
int?CurrentOrder?=?0;?
int?CurrentDirection?=?1;?????
int?time_count?=?0;???//?片斷計數器?
int?order_time=0;???//???GetInput函數的指令計時器?
main()
{??
???/*Initialize???初始化過程*/?
???int?position?=?0;???//?外置control參數?
???FILE?*fptr;
???char?list[5];
???
???printf(“\t\t??電梯控制程序\n“);
???if(?(fptr=fopen(“Order.txt““r“))==NULL?)
??????printf(“Warning:Can‘t?open?the?order?file!\n“);?
???else{
??????printf(“文件已經讀取\n“);
??????fgets(list5fptr);?
??????fgetc(fptr);
???????/*Initialize???初始化過程*/??
???????while?(1){
??????????
??????????Writemessage?();??
??????????printf(“\n“);
??????????GetInput(fptr);
??????????Control?(&time_count&position);????//控制函數Control調用有限狀態自動機函數?Status?
??????????time=time+1;???????????//?時間的推進模擬?
???????
??????????printf(“\n程序運行時間??第%d秒\n“time);
??????????Sleep(1000);?????
???????}?
???????fclose(fptr);?
???}??
?????
???return?0;
}
int?status(int?*timeCulculate)???????//?電梯運行狀態轉換函數??
{
???int?TimeLimit=20;?//????TimeLimit暫設定??5?+4?+5?+6?=?20為?開關門事件?及?等待命令總時間?
???//int?sign;/*表示是否到達目標樓層*并不需要/??
???
???switch(state)?{??????????????????//?電梯運行有限狀態自動機?
???????case?0:????//???開始?START?狀態?
????????????state?=?1;?????????????????//?開始?轉到?空閑?狀態?
????????????break;
???????case?1:????//???空閑?FREE?狀態
????????????if?(?CurrentOrder==0?)????//無指令時???
????????????{
???????????????state?=?1;???????????????????????//?狀態不變?
???????????????CurrentDirection?=?0;???????????//?方向初始化為零?
????????????}
????????????else?if?(CurrentOrder==CurrentFloor)??//?所在即為目標樓層?
???????????????state?=?3;?????????????//??空閑?轉到?停靠?狀態?
?????????????????else
???????????????state?=?2;?????????????//??空閑?轉到?運行?狀態?
????????????break;
???????case?2:????//???運行?RUN?狀態
????????????if(CurrentOrder==CurrentFloor)???//?到達目標樓層即停靠?
???????????????state?=?3;
????????????else?????????????????????????????//??未到達則繼續運行?
???????????????state?=?2;
????????????break;
???????case?3:????//???停靠?STOP?狀態
????????????if(*timeCulculate ????????????{
???????????????state?=?3;????????????????????????//?狀態不變?
???????????????if(*timeCulculate ??????????????????printf(“開門%d秒\n“*timeCulculate);
???????????????else?if(*timeCulculate ??????????????????printf(“等待%d秒\n“*timeCulculate-5);??
???????????????else
??????????????????printf(“關門%d秒\n“*timeCulculate-9);
????????????
????????????}
????????????else?????????????????????????????????//?停靠時間?結束??
????????????{
???????????????if(CurrentOrder==0)????????????????????//無指令時???
???????????????{
??????????????????if(*ti
- 上一篇:課程設計全國交通咨詢模擬系統C++實現
- 下一篇:MFC實時網絡連接裝狀況監測代碼
評論
共有 條評論