㈠ 急!!求電梯多線程調度演算法
20層樓,5部電梯的多線程電梯調度演算法,你小子才給20分。你逗我們玩呢...
㈡ 求3D MAX電梯建模教程
你可以先去【繪學霸】網站找「3d建模」板塊的【免費】視頻教程-【點擊進入】完整入門到精通視頻教程列表: www.huixueba.net/web/AppWebClient/AllCourseAndResourcePage?type=1&tagid=307&zdhhr-10y22r-475473661
想要系統的學習可以考慮報一個網路直播課,推薦CGWANG的網路課。老師講得細,上完還可以回看,還有同類型錄播課可以免費學(贈送終身VIP)。
自製能力相對較弱的話,建議還是去好點的培訓機構,實力和規模在國內排名前幾的大機構,推薦行業龍頭:王氏教育。
王氏教育全國直營校區面授課程試聽【復制後面鏈接在瀏覽器也可打開】: www.huixueba.com.cn/school/3dmodel?type=2&zdhhr-10y22r-475473661
在「3d建模」領域的培訓機構里,【王氏教育】是國內的老大,且沒有加盟分校,都是總部直營的連鎖校區。跟很多其它同類型大機構不一樣的是:王氏教育每個校區都是實體面授,老師是手把手教,而且有專門的班主任從早盯到晚,爆肝式的學習模式,提升會很快,特別適合基礎差的學生。
大家可以先把【繪學霸】APP下載到自己手機,方便碎片時間學習——繪學霸APP下載: www.huixueba.com.cn/Scripts/download.html
㈢ 操作系統模擬電梯調度演算法C語言程序
多級反饋隊列調度演算法 多級反饋隊列調度演算法是一種CPU處理機調度演算法,UNIX操作系統採取的便是這種調度演算法。 多級反饋隊列調度演算法即能使高優先順序的作業得到響應又能使短作業(進程)迅速完成。(對比一下FCFS與高優先響應比調度演算法的缺陷)。 多級(假設為N級)反饋隊列調度演算法可以如下原理: 1、設有N個隊列(Q1,Q2....QN),其中各個隊列對於處理機的優先順序是不一樣的,也就是說位於各個隊列中的作業(進程)的優先順序也是不一樣的。一般來說,優先順序Priority(Q1) > Priority(Q2) > ... > Priority(QN)。怎麼講,位於Q1中的任何一個作業(進程)都要比Q2中的任何一個作業(進程)相對於CPU的優先順序要高(也就是說,Q1中的作業一定要比Q2中的作業先被處理機調度),依次類推其它的隊列。 2、對於某個特定的隊列來說,裡面是遵循時間片輪轉法。也就是說,位於隊列Q2中有N個作業,它們的運行時間是通過Q2這個隊列所設定的時間片來確定的(為了便於理解,我們也可以認為特定隊列中的作業的優先順序是按照FCFS來調度的)。 3、各個隊列的時間片是一樣的嗎?不一樣,這就是該演算法設計的精妙之處。各個隊列的時間片是隨著優先順序的增加而減少的,也就是說,優先順序越高的隊列中它的時間片就越短。同時,為了便於那些超大作業的完成,最後一個隊列QN(優先順序最高的隊列)的時間片一般很大(不需要考慮這個問題)。 多級反饋隊列調度演算法描述: 1、進程在進入待調度的隊列等待時,首先進入優先順序最高的Q1等待。 2、首先調度優先順序高的隊列中的進程。若高優先順序中隊列中已沒有調度的進程,則調度次優先順序隊列中的進程。例如:Q1,Q2,Q3三個隊列,只有在Q1中沒有進程等待時才去調度Q2,同理,只有Q1,Q2都為空時才會去調度Q3。 3、對於同一個隊列中的各個進程,按照時間片輪轉法調度。比如Q1隊列的時間片為N,那麼Q1中的作業在經歷了N個時間片後若還沒有完成,則進入Q2隊列等待,若Q2的時間片用完後作業還不能完成,一直進入下一級隊列,直至完成。 4、在低優先順序的隊列中的進程在運行時,又有新到達的作業,那麼在運行完這個時間片後,CPU馬上分配給新到達的作業(搶占式)。 我們來看一下該演算法是如何運作的: 假設系統中有3個反饋隊列Q1,Q2,Q3,時間片分別為2,4,8。 現在有3個作業J1,J2,J3分別在時間 0 ,1,3時刻到達。而它們所需要的CPU時間分別是3,2,1個時間片。 1、時刻0 J1到達。於是進入到隊列1 , 運行1個時間片 , 時間片還未到,此時J2到達。 2、時刻1 J2到達。 由於時間片仍然由J1掌控,於是等待。 J1在運行了1個時間片後,已經完成了在Q1中的 2個時間片的限制,於是J1置於Q2等待被調度。現在處理機分配給J2。 3、時刻2 J1進入Q2等待調度,J2獲得CPU開始運行。 4、時刻3 J3到達,由於J2的時間片未到,故J3在Q1等待調度,J1也在Q2等待調度。 5、時刻4 J2處理完成,由於J3,J1都在等待調度,但是J3所在的隊列比J1所在的隊列的優先順序要高,於是J3被調度,J1繼續在Q2等待。 6、時刻5 J3經過1個時間片,完成。 7、時刻6 由於Q1已經空閑,於是開始調度Q2中的作業,則J1得到處理器開始運行。 8、時刻7 J1再經過一個時間片,完成了任務。於是整個調度過程結束。
㈣ 20分!求助大神,幫忙編個小程序。。。電梯調度演算法模擬(用c語言編寫)
可以做做看!
㈤ 演算法題 關於電梯的
如果到了頂層,是不是還要考慮別人往下爬?
記得採納啊
㈥ 求電梯演算法編程
2台電梯並聯控制,你是做設計工作的,是要計算交通流量嗎?我認為得根據你所在的地方,大樓功能,主要辦公樓層,電梯本身情況(比如開關門速度、電梯運行速度、平層爬行速度等等),計算一下,
㈦ 操作系統磁碟調度的電梯演算法是怎麼回事阿思想是什麼比如磁軌號從41開始,磁碟請求序列為:20
就是讀取時按找當前的移動方向讀取下一個,到頂後再反著讀,就跟坐電梯一樣,要不先上,要不先下。
下:41 20 12 4 上: 44 76 80
合起來就是: 41 20 12 4 44 76 80
這樣的話磁頭的總移動距離會相對減少
㈧ 電梯演算法是怎樣的
電梯演算法是通過操作系統學術名為SCAN演算法。磁臂僅移動到請求的最外道就回轉。反方向查找服務。
如果請求調度的磁軌為98, 183, 37, 122, 14, 124, 65, 67,磁頭從53號磁軌開始移動,磁頭就會按照65, 67, 98, 122, 124, 183, 37,14 的順序依次查找,並將數據輸入內存。
電梯(升降盒)上下來回地運動,電梯內部有一些按鈕,每一個按鈕代表一層樓,當按下按鈕時,按鈕的燈亮。
電梯沿某一方向運動,在將要到達某一層樓時,實時監控器 判斷電梯內是否有乘客要在此層樓下電梯,若有,則發送信號給電梯升降架。
電梯是指服務於建築物內若干特定的樓層,其轎廂運行在至少兩列垂直於水平面或與鉛垂線傾斜角小於15°的剛性軌道運動的永久運輸設備。
也有台階式,踏步板裝在履帶上連續運行,俗稱自動扶梯或自動人行道。服務於規定樓層的固定式升降設備。垂直升降電梯具有一個轎廂,運行在至少兩列垂直的或傾斜角小於15°的剛性導軌之間。
轎廂尺寸與結構形式便於乘客出入或裝卸貨物。習慣上不論其驅動方式如何,將電梯作為建築物內垂直交通運輸工具的總稱。
㈨ 請問誰有C語言的電梯模擬演算法
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
#include <winbase.h>
#include <string.h>
#include "egg.h"
#include "elevator.h"
#define START 0//定義初始狀態
#define UP 1//上行初始
#define DOWN 2//下行初始
#define PAUSE 3
#define N 100//記錄數組的容量
void getInput(void);//
void getInput0(void);//
void Status_trans(void);//顯示當前的狀態
void control(void);//控制主要的電梯過程
void control0(void);//在暫停後的控制
void time_count(void);
void Uper(void); //上行
void Downer(void); //下行
int Call[N]={0};
int Callup[10]={0}; //存放向上呼叫的整型數組
int Callin[10]={0}; //存放內部呼叫的整型數組
int Calldown[10]={0};//存放向下呼叫的整型數組
int time=0,state=0,prestate=0,flag=1,x=0;
int aimLayer=0,currentLayer=1;
float cl1=0.0,cl2=0.0;
main()
{
int service;
elevator();
system("color 3f");
printf("EVA 電梯竭誠為您服務,祝乘坐愉快\n");
printf("請選擇服務策略(1為先來先服務,2為順便服務):\n");
scanf("%d",&service);
if(service==1) {
DWORD ThreadID1 = 1;
HANDLE hRead1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)getInput0,NULL,0,&ThreadID1);
}
else {
DWORD ThreadID2 = 1;
HANDLE hRead2 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)getInput,NULL,0,&ThreadID2);
}
while (1){
if(service==1)
control0();
else
control();
Status_trans(); /*確定電梯此刻的狀態,包括運行方向、所在樓層等*/
}
system("pause");
return 0;
}
void Status_trans(void)//yang
{
int i;
switch (state) {
case START:
if(aimLayer>currentLayer)
state=UP;
if(aimLayer==currentLayer)
state=PAUSE,prestate=START;
if(aimLayer==0)
state=START;
break;
case UP:
flag=1;
Uper();
currentLayer++;
drawCurrentLayer1(currentLayer);
drawCurrentLayer2(currentLayer);
printf("當前電梯樓層 %d\n", currentLayer);
if(currentLayer==aimLayer) {
state=PAUSE,x=1,prestate=UP;
printf("當前電梯樓層 %d\n", currentLayer);
}
if(currentLayer<aimLayer)
state=UP,flag=1;
if(currentLayer>aimLayer)
state=DOWN,flag=-1;
break;
case DOWN:
flag=-1;
Downer();
currentLayer--;//?
drawCurrentLayer1(currentLayer);
drawCurrentLayer2(currentLayer);
printf("當前電梯樓層 %d\n", currentLayer);
if(currentLayer==aimLayer) {
state=PAUSE,x=1,prestate=DOWN;
printf("當前電梯樓層 %d\n", currentLayer);
}
if(currentLayer<aimLayer)
state=UP,flag=1;
if(currentLayer>aimLayer)
state=DOWN,flag=-1;//flag?
break;
case PAUSE:
drawCurrentLayer1(currentLayer);
drawCurrentLayer2(currentLayer);
for(i=1;i<=4;i++)
WaitFor(100);
if(aimLayer<currentLayer)
state=DOWN;
if(aimLayer>currentLayer)
state=UP;
if(aimLayer==0)
state=PAUSE,prestate=PAUSE;
break;
}
}
void control(void)
{
int i,mark=0,m=0;
if(flag==1) {
if(state==PAUSE && prestate!=PAUSE) {//上行中確定目標樓層
Callin[currentLayer]=Callup[currentLayer]=0;
for(i=currentLayer+1;i<=9;i++)
if(Callup[i]==1 || Callin[i]==1 || Calldown[i]==1)
m=1;
if(m!=1)//無上行需求直接將下行此樓層處理
Calldown[currentLayer]=0;
}
for(i=currentLayer;i<=9;i++)
if(Callup[i]==1 || Callin[i]==1) {
mark=i;
aimLayer=i;
break;
}//有上行需求 ,目標樓層被確定
if(mark==0)//無上行需求
for(i=9;i>=1;i--)
if(Calldown[i]==1 || Callin[i]==1) {
aimLayer=i;
mark=i;
break;
}//確定下行目標樓層
if(mark==0)
for(i=1;i<=8;i++)
if(Callup[i]==1) {
aimLayer=i;
mark=i;
break;
}
if(mark==0)
aimLayer=0;
}//無目標樓層
else if(flag==-1) {
if(state==PAUSE && prestate!=PAUSE) {//電梯運行中
Calldown[currentLayer]=Callin[currentLayer]=0;//此層已處理過
for(i=currentLayer-1;i>=1;i--)
if(Callup[i]==1 || Callin[i]==1 || Calldown[i]==1)
m=1;
if(m!=1)
Callup[currentLayer]=0;//無目標樓層暫時停靠 m??
}
for(i=currentLayer-1;i>=1;i--)
if(Calldown[i]==1 || Callin[i]==1) {
mark=i;
aimLayer=i;
break;
}//確定下行目標樓層
//???為何要向上運行開始呢?
if(mark==0) //順便無要求,開始新的一樓起的上升需求掃描
for(i=1;i<=9;i++)
if(Callup[i]==1 || Callin[i]==1) {
aimLayer=i;
mark=i;
break;
}
if(mark==0)
for(i=9;i>=2;i--)
if(Calldown[i]==1) {
aimLayer=i;
mark=i;
break;
}
if(mark==0)
aimLayer=0;
}
}
void control0(void)//yang
{
int i;
for(i=0;i<=N-1;i++) {
if(Call[i]!=0) {
aimLayer=Call[i];
if(state==PAUSE && prestate!=PAUSE)
Call[i]=0;
break;
}
}
}
void getInput(void)
{
char ch;
while(1){
ch=getchar();
switch(ch) {
case'I':
Callup[1]=1;
break;
case'U':
Callup[2]=1;
break;
case'Y':
Callup[3]=1;
break;
case'T':
Callup[4]=1;
break;
case'R':
Callup[5]=1;
break;
case'E':
Callup[6]=1;
break;
case'W':
Callup[7]=1;
break;
case'Q':
Callup[8]=1;
break;
case'K':
Calldown[2]=1;
break;
case'J':
Calldown[3]=1;
break;
case'H':
Calldown[4]=1;
break;
case'G':
Calldown[5]=1;
break;
case'F':
Calldown[6]=1;
break;
case'D':
Calldown[7]=1;
break;
case'S':
Calldown[8]=1;
break;
case'A':
Calldown[9]=1;
break;
case '1':
Callin[1]=1;
break;
case '2':
Callin[2]=1;
break;
case '3':
Callin[3]=1;
break;
case '4':
Callin[4]=1;
break;
case '5':
Callin[5]=1;
break;
case '6':
Callin[6]=1;
break;
case '7':
Callin[7]=1;
break;
case '8':
Callin[8]=1;
break;
case '9':
Callin[9]=1;
break;
}
fflush(stdin);//使回車不被讀取
}
}
void getInput0(void)//yangnan
{
int i=0;
char ch;
while(1){
ch=getchar();
switch(ch) {
case'I':
Call[i]=1;
break;
case'U':
Call[i]=2;
break;
case'Y':
Call[i]=3;
break;
case'T':
Call[i]=4;
break;
case'R':
Call[i]=5;
break;
case'E':
Call[i]=6;
break;
case'W':
Call[i]=7;
break;
case'Q':
Call[i]=8;
break;
case'K':
Call[i]=2;
break;
case'J':
Call[i]=3;
break;
case'H':
Call[i]=4;
break;
case'G':
Call[i]=5;
break;
case'F':
Call[i]=6;
break;
case'D':
Call[i]=7;
break;
case'S':
Call[i]=8;
break;
case'A':
Call[i]=9;
break;
case '1':
Call[i]=1;
break;
case '2':
Call[i]=2;
break;
case '3':
Call[i]=3;
break;
case '4':
Call[i]=4;
break;
case '5':
Call[i]=5;
break;
case '6':
Call[i]=6;
break;
case '7':
Call[i]=7;
break;
case '8':
Call[i]=8;
break;
case '9':
Call[i]=9;
break;
}
i++;
fflush(stdin);//使回車不被讀取
}
}
void Uper(void)
{
int step;
for(step=1;step<=20;step++){
WaitFor(50);/*等待50毫秒*/
move(0.075);
}
}
void Downer(void)
{
int step;
for(step=1;step<=20;step++){
WaitFor(50);/*等待50毫秒*/
move(-0.075);
}
}
但是這個演算法可能會有點小問題,你研究一下看看,多多少少有幫助的