Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовик Риня / Курсовик / Отчет по ОС.doc
Скачиваний:
57
Добавлен:
15.06.2014
Размер:
161.79 Кб
Скачать

Текст программы:

#include<windows.h>

#include<stdio.h>

#include<conio.h>

#include<time.h>

#include<process.h>

COORD Vlevo (COORD pk,int dx); //Движение человека влево на dx клеток

COORD VpravoE (COORD pk,int dx); //Движение человека вправо со случайной скоростью

COORD Vverh (COORD pk,int dy); //Движение человека вверх

COORD Vniz (COORD pk,int dy); //Движение человека вниз

COORD VverhL (COORD pk,int dx); //Движение человека вверх на лифте

COORD VnizL (COORD pk,int dx); //Движение человека вниз по лестнице

DWORD WINAPI Chel(); //подпрограмма для нитей-"людей"

HANDLE hout, //хэндл вывода на экран

hCheli[10], //хэндлы нитей-"людей"

hOch[15]; //хэндлы семафоров "стоячей очереди"

int par[3]={1,1,1}, //состояния трёх мест в лифте на 1-ом этаже(1-свободен, 0-занят)

ar[3]={1,1,1}, //состояния трёх мест в лифте на др этажах(1-свободен, 0-занят)

step=100; //шаг(скорость челов)

int S; //кол-во людей

int main ()

{

int y,i;

DWORD kl;

COORD k;

randomize();

clrscr(); //очистка экрана

hout=GetStdHandle(STD_OUTPUT_HANDLE); //хэндл экрана консоли

for (i=1;i<40;i++) //Рисуем стены

{k.X=i; k.Y=9;

WriteConsoleOutputCharacter(hout,"_",1,k,NULL);}

for (i=0;i<40;i++) //Рисуем стены

{k.X=i; k.Y=13;

WriteConsoleOutputCharacter(hout,"_",1,k,NULL);}

for (i=0;i<40;i++) //Рисуем стены

{k.X=i; k.Y=17;

WriteConsoleOutputCharacter(hout,"_",1,k,NULL);}

for (i=0;i<40;i++) //Рисуем стены

{k.X=i; k.Y=21;

WriteConsoleOutputCharacter(hout,"_",1,k,NULL);}

for (i=0;i<40;i++) //Рисуем стены

{k.X=i; k.Y=25;

WriteConsoleOutputCharacter(hout,"_",1,k,NULL);}

for (i=0;i<40;i++) //Рисуем стены

{k.X=i; k.Y=29;

WriteConsoleOutputCharacter(hout,"_",1,k,NULL);}

for (i=0;i<40;i++) //Рисуем стены

{k.X=i; k.Y=33;

WriteConsoleOutputCharacter(hout,"_",1,k,NULL);}

for (i=0;i<40;i++) //Рисуем стены

{k.X=i; k.Y=37;

WriteConsoleOutputCharacter(hout,"_",1,k,NULL);}

for (i=0;i<40;i++) //Рисуем стены

{k.X=i; k.Y=41;

WriteConsoleOutputCharacter(hout,"_",1,k,NULL);}

for (i=0;i<40;i++) //Рисуем стены

{k.X=i; k.Y=45;

WriteConsoleOutputCharacter(hout,"_",1,k,NULL);}

for (i=10;i<50;i++)

{k.X=0; k.Y=i; //Рисуем стены

WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}

for (i=10;i<50;i++)

{k.X=40; k.Y=i; //Рисуем стены

WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}

for (i=18;i<50;i++)

{k.X=32; k.Y=i; //Рисуем лестницу

WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}

for (i=19;i<48;i=i+4) //Рисуем лестницу

{k.X=33; k.Y=i;

WriteConsoleOutputCharacter(hout,"_______",7,k,NULL);}

for (i=24;i<26;i++)

{k.X=32; k.Y=i; //проход в лестнице

WriteConsoleOutputCharacter(hout," ",1,k,NULL);}

for (i=32;i<34;i++)

{k.X=32; k.Y=i; //проход в лестнице

WriteConsoleOutputCharacter(hout," ",1,k,NULL);}

for (i=40;i<42;i++)

{k.X=32; k.Y=i; //проход в лестнице

WriteConsoleOutputCharacter(hout," ",1,k,NULL);}

for (i=48;i<50;i++)

{k.X=32; k.Y=i; //проход в лестнице

WriteConsoleOutputCharacter(hout," ",1,k,NULL);}

for (i=1;i<40;i++) //Рисуем стены

{k.X=i; k.Y=49;

WriteConsoleOutputCharacter(hout,"_",1,k,NULL);}

for (i=26;i<30;i++)

{k.X=i; k.Y=49; //проход в стене

WriteConsoleOutputCharacter(hout," ",1,k,NULL);}

for (i=10;i<14;i++)

{k.X=3; k.Y=i; //Рисуем лифт

WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}

for (i=10;i<11;i++)

{k.X=6; k.Y=i; //Рисуем лифт

WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}

for (i=10;i<14;i++)

{k.X=9; k.Y=i; //Рисуем лифт

WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}

for (i=18;i<22;i++)

{k.X=3; k.Y=i; //Рисуем лифт

WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}

for (i=18;i<22;i++)

{k.X=6; k.Y=i; //Рисуем лифт

WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}

for (i=18;i<22;i++)

{k.X=9; k.Y=i; //Рисуем лифт

WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}

for (i=26;i<30;i++)

{k.X=3; k.Y=i; //Рисуем лифт

WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}

for (i=26;i<30;i++)

{k.X=6; k.Y=i; //Рисуем лифт

WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}

for (i=26;i<30;i++)

{k.X=9; k.Y=i; //Рисуем лифт

WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}

for (i=34;i<38;i++)

{k.X=3; k.Y=i; //Рисуем лифт

WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}

for (i=34;i<38;i++)

{k.X=6; k.Y=i; //Рисуем лифт

WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}

for (i=34;i<38;i++)

{k.X=9; k.Y=i; //Рисуем лифт

WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}

for (i=42;i<46;i++)

{k.X=3; k.Y=i; //Рисуем лифт

WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}

for (i=42;i<46;i++)

{k.X=6; k.Y=i; //Рисуем лифт

WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}

for (i=42;i<46;i++)

{k.X=9; k.Y=i; //Рисуем лифт

WriteConsoleOutputCharacter(hout,"|",1,k,NULL);}

k.X=4; k.Y=11; //Надпись закрыто на лифте этажа 5

WriteConsoleOutputCharacter(hout,"CLOSE",5,k,NULL);

k.X=6; k.Y=12; //Рисуем лифт

WriteConsoleOutputCharacter(hout," ",1,k,NULL);

k.X=4; k.Y=19; //Надпись закрыто на лифте этажа 4

WriteConsoleOutputCharacter(hout,"CLOSE",5,k,NULL);

k.X=6; k.Y=20; //Рисуем лифт

WriteConsoleOutputCharacter(hout," ",1,k,NULL);

k.X=4; k.Y=27; //Надпись закрыто на лифте этажа 3

WriteConsoleOutputCharacter(hout,"CLOSE",5,k,NULL);

k.X=6; k.Y=28; //Рисуем лифт

WriteConsoleOutputCharacter(hout," ",1,k,NULL);

k.X=4; k.Y=35; //Надпись закрыто на лифте этажа 3

WriteConsoleOutputCharacter(hout,"CLOSE",5,k,NULL);

k.X=6; k.Y=36; //Рисуем лифт

WriteConsoleOutputCharacter(hout," ",1,k,NULL);

k.X=4; k.Y=43; //Надпись закрыто на лифте этажа 1

WriteConsoleOutputCharacter(hout,"CLOSE",5,k,NULL);

k.X=6; k.Y=44; //Рисуем лифт

WriteConsoleOutputCharacter(hout," ",1,k,NULL);

do

{

k.X=40; k.Y=1; //усанавливаем позицию для

SetConsoleCursorPosition(hout,k) ; //надписи

printf (" Vvedite chislo lydey do 10 "); //Введите число людей

scanf("%d",&S); //сканируем число

for (i=0;i<15;i++) //создание семафора очереди

hOch[i]=CreateMutex(NULL,NULL,NULL);

for(i=0;i<S;i++) //запуск нитей-"людей"

{

hCheli[i]=CreateThread(NULL,4096,Chel,NULL,NULL,&kl);

Sleep(500);

}

}

while(S>0); //для бесконечной работы проги

for(i=0;i<15;i++)

CloseHandle(hOch[i]); //закрытие хэндла очереди

return 0;

}

/*********************LUDI*********************/

DWORD WINAPI Chel()

{

COORD k,pk,p; //координаты для перемещения людей

byte qw;

int num=0,o,q,i;

int w,e,r,z,s,d,f,x,c,v,lo; //для проверки выхода из лифта

for (i=4;i<9;i++) //Открываем лифт на 1-ом

{p.X=i; p.Y=43;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

p.X=6; p.Y=42;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);

for (i=4;i<9;i++)

{p.X=i; p.Y=45;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

pk.X=26; pk.Y=50; //координаты появления челов

pk=Vverh(pk,4); //челы идут вверх

pk=Vlevo(pk,2);

for (i=13;i>=0;i--) //устанавливаем очередь перед лифтом

{

WaitForSingleObject(hOch[i],INFINITE); //попытка продвинуться по очереди

pk=Vlevo(pk,1);

ReleaseMutex(hOch[i+1]); //освобождение предыдущего места в очереди

}

while(!num) //чел ждет

{ //освобождения одного из 3 мест в лифте

if (par[0]==1) {num=3; par[0]--; ar[2]--;break;}

if (par[1]==1) {num=1; par[1]--; ar[0]--;break;}

if (par[2]==1) {num=2; par[2]--; ar[1]--;break;}

}

qw=2*num;

p.X=0; p.Y=0;

pk=Vlevo(pk,qw);

ReleaseMutex(hOch[0]); //освобождаем последнее место в очреди

pk=Vverh(pk,2); //заходим в лифт

Sleep(2000);

/*----------Закрываем лифт на 1-ом -----------*/

p.X=4; p.Y=42;

WriteConsoleOutputCharacter(hout," | ",5,p,NULL);

p.X=4; p.Y=43;

WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);

p.X=4; p.Y=44;

WriteConsoleOutputCharacter(hout," ",5,p,NULL);

p.X=4; p.Y=45;

WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);

/*-------------------------------------------*/

/*------------------2 этаж-------------------*/

Sleep(2000);

if (num==3) //описываем движения для человека занявшего 1-место

{

/*----------Открываем лифт на 2-ом-----------*/

for (i=4;i<9;i++)

{p.X=i; p.Y=35;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

p.X=6; p.Y=34;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);

for (i=4;i<9;i++)

{p.X=i; p.Y=37;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

/*-------------------------------------------*/

Sleep(1000);

pk=VverhL(pk,1); //vverh na 2-oy etaj

r=random(5); //proverka na vihod

if (r==1) //если выходит

{

pk=Vniz(pk,num+1); //выходим из лифта

ar[num-1]++; //освободаем место в лифте на др.этажах

pk=VpravoE(pk,qw+18); //далее выводи человека из здания

/*----------Закрываем лифт на 2-ом -----------*/ //закрываем лифт если выходим

p.X=4; p.Y=34;

WriteConsoleOutputCharacter(hout," | ",5,p,NULL);

p.X=4; p.Y=35;

WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);

p.X=4; p.Y=36;

WriteConsoleOutputCharacter(hout," ",5,p,NULL);

p.X=4; p.Y=37;

WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);

/*-------------------------------------------*/

pk=VpravoE(pk,6);

pk=VnizL(pk,4); //спуск по лестнице

pk=Vlevo(pk,6);

pk=Vniz(pk,6);

}

if (r!=1) //если человек не выходит из лифта то едим на 3-ий

{

Sleep(3000);

/*----------Закрываем лифт на 2-ом -----------*/ //т.к. мы не вышли то лифт нужно закрыть

p.X=4; p.Y=34;

WriteConsoleOutputCharacter(hout," | ",5,p,NULL);

p.X=4; p.Y=35;

WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);

p.X=4; p.Y=36;

WriteConsoleOutputCharacter(hout," ",5,p,NULL);

p.X=4; p.Y=37;

WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);

/*-------------------------------------------*/

/*----------Открываем лифт на 3-eм-----------*/

for (i=4;i<9;i++)

{p.X=i; p.Y=27;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

p.X=6; p.Y=26;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);

for (i=4;i<9;i++)

{p.X=i; p.Y=29;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

/*-------------------------------------------*/

Sleep(1000); //всё тоже самое только для 3-го этажа

pk=VverhL(pk,1); //vverh na 3-iy etaj

w=random(4); //proverka na vihod

if (w==1)

{

pk=Vniz(pk,num+1);

ar[num-1]++;

pk=VpravoE(pk,qw+18);

/*----------Закрываем лифт на 3-ом -----------*/

p.X=4; p.Y=26;

WriteConsoleOutputCharacter(hout," | ",5,p,NULL);

p.X=4; p.Y=27;

WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);

p.X=4; p.Y=28;

WriteConsoleOutputCharacter(hout," ",5,p,NULL);

p.X=4; p.Y=29;

WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);

/*-------------------------------------------*/

pk=VpravoE(pk,6);

pk=VnizL(pk,8);

pk=Vlevo(pk,6);

pk=Vniz(pk,6);

}

if (w!=1)

{

Sleep(3000);

/*----------Закрываем лифт на 3-ом -----------*/

p.X=4; p.Y=26;

WriteConsoleOutputCharacter(hout," | ",5,p,NULL);

p.X=4; p.Y=27;

WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);

p.X=4; p.Y=28;

WriteConsoleOutputCharacter(hout," ",5,p,NULL);

p.X=4; p.Y=29;

WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);

/*-------------------------------------------*/

/*----------Открываем лифт на 4-oм-----------*/

for (i=4;i<9;i++)

{p.X=i; p.Y=19;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

p.X=6; p.Y=18;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);

for (i=4;i<9;i++)

{p.X=i; p.Y=21;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

/*-------------------------------------------*/

Sleep(1000);

pk=VverhL(pk,1); //vverh na 4-iy etaj

e=random(3); //proverka na vihod

if (e==1)

{

pk=Vniz(pk,num+1);

ar[num-1]++;

pk=VpravoE(pk,qw+18);

/*----------Закрываем лифт на 4-ом -----------*/

p.X=4; p.Y=18;

WriteConsoleOutputCharacter(hout," | ",5,p,NULL);

p.X=4; p.Y=19;

WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);

p.X=4; p.Y=20;

WriteConsoleOutputCharacter(hout," ",5,p,NULL);

p.X=4; p.Y=21;

WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);

/*-------------------------------------------*/

pk=VpravoE(pk,6);

pk=VnizL(pk,12);

pk=Vlevo(pk,6);

pk=Vniz(pk,6);

}

if (e!=1)

{

Sleep(3000);

/*----------Закрываем лифт на 4-ом -----------*/

p.X=4; p.Y=18;

WriteConsoleOutputCharacter(hout," | ",5,p,NULL);

p.X=4; p.Y=19;

WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);

p.X=4; p.Y=20;

WriteConsoleOutputCharacter(hout," ",5,p,NULL);

p.X=4; p.Y=21;

WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);

/*-------------------------------------------*/

/*----------Открываем лифт на 5-oм-----------*/

for (i=4;i<9;i++) //на 5-ом проверки на выход нет, т.к. чел должен всяко выйти

{p.X=i; p.Y=11;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

p.X=6; p.Y=10;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);

for (i=4;i<9;i++)

{p.X=i; p.Y=13;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

/*-------------------------------------------*/

Sleep(1000);

pk=VverhL(pk,1); //vverh na 5-iy etaj

pk=Vniz(pk,num+1);

ar[num-1]++;

pk=VpravoE(pk,qw+18);

/*----------Закрываем лифт на 5-ом -----------*/

p.X=4; p.Y=10;

WriteConsoleOutputCharacter(hout," | ",5,p,NULL);

p.X=4; p.Y=11;

WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);

p.X=4; p.Y=12;

WriteConsoleOutputCharacter(hout," ",5,p,NULL);

p.X=4; p.Y=13;

WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);

/*-------------------------------------------*/

// Sleep(1000);

pk=VpravoE(pk,6);

pk=VnizL(pk,16);

pk=Vlevo(pk,6);

pk=Vniz(pk,6);

}

}

}

}

if (num==1) //всё тоже самое только для 2-ого места в лифте

{

/*----------Открываем лифт на 2-ом-----------*/

for (i=4;i<9;i++)

{k.X=i; k.Y=35;

WriteConsoleOutputCharacter(hout," ",1,k,NULL);}

k.X=6; k.Y=34;

WriteConsoleOutputCharacter(hout," ",1,k,NULL);

for (i=4;i<9;i++)

{k.X=i; k.Y=37;

WriteConsoleOutputCharacter(hout," ",1,k,NULL);}

/*-------------------------------------------*/

Sleep(1000);

pk=VverhL(pk,1); //vverh na 2-oy etaj

s=random(5); //proverka na vihod

//s=1;

if (s==1)

{

pk=Vniz(pk,num+1);

ar[num-1]++;

pk=VpravoE(pk,qw+18);

/*----------Закрываем лифт на 2-ом -----------*/

p.X=4; p.Y=34;

WriteConsoleOutputCharacter(hout," | ",5,p,NULL);

p.X=4; p.Y=35;

WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);

p.X=4; p.Y=36;

WriteConsoleOutputCharacter(hout," ",5,p,NULL);

p.X=4; p.Y=37;

WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);

/*-------------------------------------------*/

Sleep(500);

pk=Vniz(pk,2);

pk=VpravoE(pk,6);

pk=VnizL(pk,4);

pk=Vlevo(pk,6);

pk=Vniz(pk,6);

}

if (s!=1)

{

Sleep(3000);

/*----------Закрываем лифт на 2-ом -----------*/

p.X=4; p.Y=34;

WriteConsoleOutputCharacter(hout," | ",5,p,NULL);

p.X=4; p.Y=35;

WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);

p.X=4; p.Y=36;

WriteConsoleOutputCharacter(hout," ",5,p,NULL);

p.X=4; p.Y=37;

WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);

/*-------------------------------------------*/

/*----------Открываем лифт на 3-eм-----------*/

for (i=4;i<9;i++)

{p.X=i; p.Y=27;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

p.X=6; p.Y=26;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);

for (i=4;i<9;i++)

{p.X=i; p.Y=29;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

/*-------------------------------------------*/

Sleep(1000);

pk=VverhL(pk,1); //vverh na 3-iy etaj

d=random(4); //proverka na vihod

if (d==1)

{

pk=Vniz(pk,num+1);

ar[num-1]++;

pk=VpravoE(pk,qw+18);

/*----------Закрываем лифт на 3-ом -----------*/

p.X=4; p.Y=26;

WriteConsoleOutputCharacter(hout," | ",5,p,NULL);

p.X=4; p.Y=27;

WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);

p.X=4; p.Y=28;

WriteConsoleOutputCharacter(hout," ",5,p,NULL);

p.X=4; p.Y=29;

WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);

/*-------------------------------------------*/

Sleep(500);

pk=Vniz(pk,2);

pk=VpravoE(pk,6);

pk=VnizL(pk,8);

pk=Vlevo(pk,6);

pk=Vniz(pk,6);

}

if (d!=1)

{

Sleep(3000);

/*----------Закрываем лифт на 3-ом -----------*/

p.X=4; p.Y=26;

WriteConsoleOutputCharacter(hout," | ",5,p,NULL);

p.X=4; p.Y=27;

WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);

p.X=4; p.Y=28;

WriteConsoleOutputCharacter(hout," ",5,p,NULL);

p.X=4; p.Y=29;

WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);

/*-------------------------------------------*/

/*----------Открываем лифт на 4-oм-----------*/

for (i=4;i<9;i++)

{p.X=i; p.Y=19;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

p.X=6; p.Y=18;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);

for (i=4;i<9;i++)

{p.X=i; p.Y=21;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

/*-------------------------------------------*/

Sleep(1000);

pk=VverhL(pk,1); //vverh na 4-iy etaj

f=random(3); //proverka na vihod

if (f==1)

{

pk=Vniz(pk,num+1);

ar[num-1]++;

pk=VpravoE(pk,qw+18);

/*----------Закрываем лифт на 4-ом -----------*/

p.X=4; p.Y=18;

WriteConsoleOutputCharacter(hout," | ",5,p,NULL);

p.X=4; p.Y=19;

WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);

p.X=4; p.Y=20;

WriteConsoleOutputCharacter(hout," ",5,p,NULL);

p.X=4; p.Y=21;

WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);

/*-------------------------------------------*/

Sleep(500);

pk=Vniz(pk,2);

pk=VpravoE(pk,6);

pk=VnizL(pk,12);

pk=Vlevo(pk,6);

pk=Vniz(pk,6);

}

if (f!=1)

{

Sleep(3000);

/*----------Закрываем лифт на 4-ом -----------*/

p.X=4; p.Y=18;

WriteConsoleOutputCharacter(hout," | ",5,p,NULL);

p.X=4; p.Y=19;

WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);

p.X=4; p.Y=20;

WriteConsoleOutputCharacter(hout," ",5,p,NULL);

p.X=4; p.Y=21;

WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);

/*-------------------------------------------*/

/*----------Открываем лифт на 5-oм-----------*/

for (i=4;i<9;i++)

{p.X=i; p.Y=11;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

p.X=6; p.Y=10;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);

for (i=4;i<9;i++)

{p.X=i; p.Y=13;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

/*-------------------------------------------*/

Sleep(1000);

pk=VverhL(pk,1); //vverh na 5-iy etaj

pk=Vniz(pk,num+1);

ar[num-1]++;

pk=VpravoE(pk,qw+18);

/*----------Закрываем лифт на 5-ом -----------*/

p.X=4; p.Y=10;

WriteConsoleOutputCharacter(hout," | ",5,p,NULL);

p.X=4; p.Y=11;

WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);

p.X=4; p.Y=12;

WriteConsoleOutputCharacter(hout," ",5,p,NULL);

p.X=4; p.Y=13;

WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);

/*-------------------------------------------*/

Sleep(500);

pk=Vniz(pk,2);

pk=VpravoE(pk,6);

pk=VnizL(pk,16);

pk=Vlevo(pk,6);

pk=Vniz(pk,6);

}

}

}

}

if (num==2) //всё тоже самое только для 3-го места в лифте

{

/*----------Открываем лифт на 2-ом-----------*/

for (i=4;i<9;i++)

{k.X=i; k.Y=35;

WriteConsoleOutputCharacter(hout," ",1,k,NULL);}

k.X=6; k.Y=34;

WriteConsoleOutputCharacter(hout," ",1,k,NULL);

for (i=4;i<9;i++)

{k.X=i; k.Y=37;

WriteConsoleOutputCharacter(hout," ",1,k,NULL);}

/*-------------------------------------------*/

Sleep(1000);

pk=VverhL(pk,1); //vverh na 2-oy etaj

z=random(5); //proverka na vihod

//z=1;

if (z==1)

{

pk=Vniz(pk,num+1);

ar[num-1]++;

pk=VpravoE(pk,qw+18);

/*----------Закрываем лифт на 2-ом -----------*/

p.X=4; p.Y=34;

WriteConsoleOutputCharacter(hout," | ",5,p,NULL);

p.X=4; p.Y=35;

WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);

p.X=4; p.Y=36;

WriteConsoleOutputCharacter(hout," ",5,p,NULL);

p.X=4; p.Y=37;

WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);

/*-------------------------------------------*/

Sleep(1000);

pk=Vniz(pk,1);

pk=VpravoE(pk,6);

pk=VnizL(pk,4);

pk=Vlevo(pk,6);

pk=Vniz(pk,6);

}

if (z!=1)

{

Sleep(3000);

/*----------Закрываем лифт на 2-ом -----------*/

p.X=4; p.Y=34;

WriteConsoleOutputCharacter(hout," | ",5,p,NULL);

p.X=4; p.Y=35;

WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);

p.X=4; p.Y=36;

WriteConsoleOutputCharacter(hout," ",5,p,NULL);

p.X=4; p.Y=37;

WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);

/*-------------------------------------------*/

/*----------Открываем лифт на 3-eм-----------*/

for (i=4;i<9;i++)

{p.X=i; p.Y=27;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

p.X=6; p.Y=26;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);

for (i=4;i<9;i++)

{p.X=i; p.Y=29;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

/*-------------------------------------------*/

Sleep(1000);

pk=VverhL(pk,1); //vverh na 3-iy etaj

x=random(4); //proverka na vihod

if (x==1)

{

pk=Vniz(pk,num+1);

ar[num-1]++;

pk=VpravoE(pk,qw+18);

/*----------Закрываем лифт на 3-ом -----------*/

p.X=4; p.Y=26;

WriteConsoleOutputCharacter(hout," | ",5,p,NULL);

p.X=4; p.Y=27;

WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);

p.X=4; p.Y=28;

WriteConsoleOutputCharacter(hout," ",5,p,NULL);

p.X=4; p.Y=29;

WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);

/*-------------------------------------------*/

Sleep(1000);

pk=Vniz(pk,1);

pk=VpravoE(pk,6);

pk=VnizL(pk,8);

pk=Vlevo(pk,6);

pk=Vniz(pk,6);

}

if (x!=1)

{

Sleep(3000);

/*----------Закрываем лифт на 3-ом -----------*/

p.X=4; p.Y=26;

WriteConsoleOutputCharacter(hout," | ",5,p,NULL);

p.X=4; p.Y=27;

WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);

p.X=4; p.Y=28;

WriteConsoleOutputCharacter(hout," ",5,p,NULL);

p.X=4; p.Y=29;

WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);

/*-------------------------------------------*/

/*----------Открываем лифт на 4-oм-----------*/

for (i=4;i<9;i++)

{p.X=i; p.Y=19;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

p.X=6; p.Y=18;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);

for (i=4;i<9;i++)

{p.X=i; p.Y=21;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

/*-------------------------------------------*/

Sleep(1000);

pk=VverhL(pk,1); //vverh na 4-iy etaj

c=random(3); //proverka na vihod

if (c==1)

{

pk=Vniz(pk,num+1);

ar[num-1]++;

pk=VpravoE(pk,qw+18);

/*----------Закрываем лифт на 4-ом -----------*/

p.X=4; p.Y=18;

WriteConsoleOutputCharacter(hout," | ",5,p,NULL);

p.X=4; p.Y=19;

WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);

p.X=4; p.Y=20;

WriteConsoleOutputCharacter(hout," ",5,p,NULL);

p.X=4; p.Y=21;

WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);

/*-------------------------------------------*/

Sleep(1000);

pk=Vniz(pk,1);

pk=VpravoE(pk,6);

pk=VnizL(pk,12);

pk=Vlevo(pk,6);

pk=Vniz(pk,6);

}

if (c!=1)

{

Sleep(3000);

/*----------Закрываем лифт на 4-ом -----------*/

p.X=4; p.Y=18;

WriteConsoleOutputCharacter(hout," | ",5,p,NULL);

p.X=4; p.Y=19;

WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);

p.X=4; p.Y=20;

WriteConsoleOutputCharacter(hout," ",5,p,NULL);

p.X=4; p.Y=21;

WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);

/*-------------------------------------------*/

/*----------Открываем лифт на 5-oм-----------*/

for (i=4;i<9;i++)

{p.X=i; p.Y=11;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

p.X=6; p.Y=10;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);

for (i=4;i<9;i++)

{p.X=i; p.Y=13;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

/*-------------------------------------------*/

Sleep(1000);

pk=VverhL(pk,1); //vverh na 5-iy etaj

pk=Vniz(pk,num+1);

ar[num-1]++;

pk=VpravoE(pk,qw+18);

/*----------Закрываем лифт на 5-ом -----------*/

p.X=4; p.Y=10;

WriteConsoleOutputCharacter(hout," | ",5,p,NULL);

p.X=4; p.Y=11;

WriteConsoleOutputCharacter(hout,"CLOSE",5,p,NULL);

p.X=4; p.Y=12;

WriteConsoleOutputCharacter(hout," ",5,p,NULL);

p.X=4; p.Y=13;

WriteConsoleOutputCharacter(hout,"__|__",5,p,NULL);

/*-------------------------------------------*/

Sleep(1000);

pk=Vniz(pk,1);

pk=VpravoE(pk,6);

pk=VnizL(pk,16);

pk=Vlevo(pk,6);

pk=Vniz(pk,6);

}

}

}

}

if ((ar[0]==1) && (ar[1]==1) && (ar[2]==1)) //если лифт пустой, то ...

{

/*----------Открываем лифт на 1-ом-----------*/

for (i=4;i<9;i++)

{p.X=i; p.Y=43;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

p.X=6; p.Y=42;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);

for (i=4;i<9;i++)

{p.X=i; p.Y=45;

WriteConsoleOutputCharacter(hout," ",1,p,NULL);}

/*-------------------------------------------*/

par[0]=1; //освобождаем все 3 места в лифте на 1этаже

par[1]=1;

par[2]=1;

step=100; //устанавливаем изначальную скорость

}

return(0);

}

/*********************VLEVO*********************/

//Процедура рисования движущегося влево К

//pk-текущие координаты, dx-кол-во шагов

COORD Vlevo(COORD pk,int dx)

{int d=0;

while (d!=dx)

{d++;

WriteConsoleOutputCharacter(hout," ",1,pk,NULL);

pk.X--;

WriteConsoleOutputCharacter(hout,"*",1,pk,NULL);

Sleep(step);

}

return pk; //возврат новых координат студента

}

/*********************VPRAVOE*********************/

//движение со случ. скоростью

COORD VpravoE(COORD pk,int dx)

{int d=0;

while (d!=dx)

{d++;

step=random(50)+100;

WriteConsoleOutputCharacter(hout," ",1,pk,NULL);

pk.X++;

WriteConsoleOutputCharacter(hout,"*",1,pk,NULL);

Sleep(step);

}

return pk;

}

/*********************VVERH*********************/

COORD Vverh(COORD pk,int dy)

{int d=0;

while (d!=dy)

{d++;

WriteConsoleOutputCharacter(hout," ",1,pk,NULL);

pk.Y--;

WriteConsoleOutputCharacter(hout,"*",1,pk,NULL);

Sleep(step);

}

return pk;

}

/*********************VVERHL*********************/

//движение вверх по лифту

COORD VverhL(COORD pk,int dy)

{int d=0;

while (d!=dy)

{d++;

pk.Y=pk.Y-8;

WriteConsoleOutputCharacter(hout,"*",1,pk,NULL);

//Sleep(step);

}

return pk;

}

/*********************VNIZ*********************/

COORD Vniz(COORD pk,int dy)

{int d=0;

while (d!=dy)

{

d++;

WriteConsoleOutputCharacter(hout," ",1,pk,NULL);

pk.Y++;

WriteConsoleOutputCharacter(hout,"*",1,pk,NULL);

Sleep(step);

}

return pk;

}

/*********************VNIZL*********************/

//движение вниз по лестнице

COORD VnizL(COORD pk,int dy)

{int d=0;

while (d!=dy)

{

d++;

WriteConsoleOutputCharacter(hout," ",1,pk,NULL);

pk.Y=pk.Y+2;

WriteConsoleOutputCharacter(hout,"*",1,pk,NULL);

Sleep(step);

}

return pk;

}

Литература

  1. Флоренсов А.Н. Операционные системы для программиста: Учеб. пособие. Омск: Изд-во ОмГТУ, 2005. 240 с.

Соседние файлы в папке Курсовик