用C++模拟电梯运行

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

⽤C++模拟电梯运⾏⾸先假设有6个楼层。

最初,电梯在顶层,先实现电梯从顶层到第⼀层的过程:
#include <iostream>#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
using namespace std;
struct node{int x,y;int color;};
HANDLE Output=GetStdHandle(STD_OUTPUT_HANDLE);
HANDLE Input=GetStdHandle(STD_INPUT_HANDLE);
void SetCursor(int x,int y){
COORD cd={x,y};
SetConsoleCursorPosition(Output,cd);
}
int main()
{
int floor = 6;
for(int i=1; i<17; i++)
{
if( i%3 == 1)
{
SetCursor(1,i);
cout << floor;
floor--;
}
}
bool bot = true;
int position = 1;
while(bot)
{
SetCursor(3,position);
cout << "■" << endl;
Sleep(500);
SetCursor(3,position);
cout << " " << endl;
if(position == 16)
{
bot = false;
SetCursor(3,position);
cout << "■" << endl;
}
position++;
}
//cout << "■" << endl;
return 0;
}
这时还没有加⼊⼈。

下⾯实现单⼈电梯模型,⼈和电梯在的楼层都是随机的,⼈想到达的楼层也是随机的。

单⼈电梯模型:
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
#include <cstdlib>
using namespace std;
struct node{int x,y;int color;};
HANDLE Output=GetStdHandle(STD_OUTPUT_HANDLE); HANDLE Input=GetStdHandle(STD_INPUT_HANDLE); void SetCursor(int x,int y){
COORD cd={x,y};
SetConsoleCursorPosition(Output,cd);
}
int main()
{
int floor = 6;
for(int i=1; i<17; i++)
{
if( i%3 == 1)
{
SetCursor(1,i);
cout << floor;
floor--;
}
}
srand(time(0));
int prompt = 17;
const int nort = 500;
const int slowt = 1000;
int elevator = (rand()%6) + 1;
int perx = (rand()%6) + 1;
int pery = (rand()%6) + 1;
while(perx == pery)
{
int perx = (rand()%6) + 1;
int pery = (rand()%6) + 1;
}
int position = 19 - 3*elevator;
int elex = 19 - 3*perx;
int eley = 19 - 3*pery;
bool reachx = false;
bool reachy = false;
int state = 0;
SetCursor(3,prompt);
cout << "elevator is on " << elevator << " floor";
prompt++;
SetCursor(3,prompt);
cout << perx << " floor wants to go to " << pery << " floor"; prompt++;
while(!reachx)
{
if(position < elex)
state = 1;
else
state = 2;
SetCursor(3,position);
cout << "■" << endl;
Sleep(nort);
SetCursor(3,position);
cout << " " << endl;
if(state == 1)
position++;
else
position--;
if(position == elex)
{
reachx = true;
SetCursor(3,position);
cout << "■" << endl;
Sleep(slowt);
SetCursor(3,position);
cout << " " << endl;
}
}
SetCursor(3,prompt);
cout << "has reached " << perx << " floor";
prompt++;
while(!reachy)
{
if(position < eley)
state = 1;
else
state = 2;
SetCursor(3,position);
cout << "■" << endl;
Sleep(nort);
SetCursor(3,position);
cout << " " << endl;
if(state == 1)
position++;
else
position--;
if(position == eley)
{
reachy = true;
SetCursor(3,position);
cout << "■" << endl;
}
}
SetCursor(3,prompt);
cout << "has reached " << pery << " floor";
prompt++;
SetCursor(1,20);
return 0;
}
下⾯是多⼈电梯模型(多⼈是同时在等待电梯的):
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
#include <cstdlib>
using namespace std;
struct node{int x,y;int color;};
HANDLE Output=GetStdHandle(STD_OUTPUT_HANDLE); HANDLE Input=GetStdHandle(STD_INPUT_HANDLE); void SetCursor(int x,int y){
COORD cd={x,y};
SetConsoleCursorPosition(Output,cd);
}
int main()
{
int floor = 6; //有6层楼
for(int i=1; i<17; i++)
{
if( i%3 == 1)
{
SetCursor(1,i);
cout << floor;
floor--;
}
}
srand(time(0));
int prompt = 17;
const int nort = 500; //决定正常情况电梯运⾏速度
const int slowt = 1000; //决定电梯停留时间
const int nump = 3; //坐电梯的⼈数
int elevator = (rand()%6) + 1; //随机产⽣电梯所在的层数
int perx[nump]; //⼈所在的层数
int pery[nump]; //⼈想到达的层数
for (int i=0; i<nump; i++)
{
perx[i] = (rand()%6)+1;
pery[i] = (rand()%6)+1;
while(perx[i] == pery[i])
{
perx[i] = (rand()%6) + 1;
pery[i] = (rand()%6) + 1;
}
}
int position = 19 - 3*elevator; //将电梯初始所在的层数换为位置
int elex[nump]; //将⼈所在的层数换为位置
int eley[nump]; //将⼈想到达的层数换为位置
bool reachx[nump]; //是否到达⼈初始的位置
bool reachy[nump]; //是否到达⼈想去的位置
int distance[nump];
int mini = abs(elex[0]-position);
int minix = 0;
for(int i=0; i<nump; i++)
{
elex[i] = 19 - 3*perx[i];
eley[i] = 19 - 3*pery[i];
reachx[i] = false;
reachy[i] = false;
}
bool state;
SetCursor(3,prompt);
cout << "elevator is on " << elevator << " floor";
prompt++;
int countW = 0; //⽤于统计⼀次性上电梯的⼈的数⽬,很多循环共⽤这⼀个变量,⽤完⼀次后要记得清零int countQ = 0; //⽤于统计⼀次性下电梯的⼈的数⽬
for(int i=0; i<nump; i++)
{
SetCursor(3,prompt);
cout << perx[i] << " floor wants to go to " << pery[i] << " floor";
prompt++;
distance[i] = abs(elex[i]-position);
if (distance[i] == 0)
{
reachx[i] = true;
countW++;
}
if(distance[i] < mini && i != 0 && !reachx[i])
{
mini = distance[i];
minix = i;
}
if (reachx[i] && abs(eley[i]-position)<mini)
{
mini = abs(eley[i]-position);
minix = i;
}
}
if (countW != 0)
{
SetCursor(3,prompt);
cout << countW << " people get in the elevator";
prompt++;
countW = 0;
}
bool reachAll = reachy[0];
for(int i=1; i<nump; i++)
{
reachAll = reachAll && reachy[i];
}
while(!reachAll)
{
//if(position != elex[minix])
//{
if(position < elex[minix])
state = false;
else
state = true;
SetCursor(3,position);
cout << "*" << endl;
Sleep(nort);
SetCursor(3,position);
cout << " " << endl;
if(!state)
position++;
else
position--;
for(int i=0; i<nump; i++)
{
if(position == elex[i] && !reachx[i])
{
reachx[i] = true;
if(countW<1)
{
SetCursor(3,prompt);
cout <<"elevator has reached " << perx[i] << " floor"; prompt++;
SetCursor(3,position);
cout << "*" << endl;
Sleep(slowt);
SetCursor(3,position);
cout << " " << endl;
}
countW++;
}
}
if(countW != 0)
{
SetCursor(3,prompt);
cout << countW << " people get in the elevator"; prompt++;
countW = 0;
}
if(state)
{
mini = elex[0];
for(int i=0; i<nump; i++)
{
if(elex[i] < mini && !reachx[i])
mini = elex[i];
if(eley[i] < mini && reachx[i] && !reachy[i])
mini = eley[i];
}
}
else
{
mini = elex[0];
for(int i=0; i<nump; i++)
{
if(elex[i] > mini && !reachx[i])
mini = elex[i];
if(eley[i] > mini && reachx[i] && !reachy[i])
mini = eley[i];
}
}
while(position != mini)
{
if(position < mini)
state = false;
else if(position > mini)
state = true;
SetCursor(3,position);
cout << "*" << endl;
Sleep(nort);
SetCursor(3,position);
cout << " " << endl;
if(!state)
position++;
else if(state)
position--;
for(int i=0; i<nump; i++)
{
if(position == elex[i] && !reachx[i])
{
reachx[i] = true;
if(countW < 1)
{
SetCursor(3,prompt);
cout <<"elevator has reached " << perx[i] << " floor"; prompt++;
}
countW++;
}
if(position == eley[i] && reachx[i] && !reachy[i])
{
reachy[i] = true;
if(countQ < 1 && countW == 0)
{
SetCursor(3,prompt);
cout <<"elevator has reached " << pery[i] << " floor"; prompt++;
}
countQ++;
}
}
if (countW != 0)
{
SetCursor(3,prompt);
cout << countW << " people get in the elevator"; prompt++;
countW = 0;
}
if (countQ != 0)
{
SetCursor(3,prompt);
cout << countQ << " people get out of the elevator"; prompt++;
countQ = 0;
}
}
//}
reachAll = reachy[0];
for(int i=1; i<nump; i++)
{
reachAll = reachAll && reachy[i];
}
}
SetCursor(3,position); cout << "*" << endl; SetCursor(1,30); return 0;
}。

相关文档
最新文档