icp/oer/courses/c-newcomers/sections/03-lift/08-complete-lift/program.c

75 lines
1.3 KiB
C

#include <stdio.h>
#include <stdbool.h>
int main()
{
int CurrentFloor = 8;
int TargetFloor = 2;
int RequestOverTime[15] = {2,6,1,8,10,5,3,2,10,7,8,4,5,1,7};
int PendingFloors[10] = {};
bool reachedAllPendingFloors = false;
bool isDone = false;
for(int Timestep = 0; Timestep < 15 && !isDone; Timestep++)
{
printf("I'm currently at floor %d\n", CurrentFloor);
PendingFloors[RequestOverTime[Timestep]] = true;
if(CurrentFloor < TargetFloor)
{
CurrentFloor++;
}
else
{
CurrentFloor--;
}
bool foundFloor = false;
if(!reachedAllPendingFloors)
{
if(CurrentFloor == PendingFloors[CurrentFloor])
{
foundFloor = true;
PendingFloors[CurrentFloor] = false;
printf("I waited in floor %d.\n", CurrentFloor);
}
}
reachedAllPendingFloors = true;
for(int i = 0; i < 15; i++)
{
if(PendingFloors[i] != false)
{
reachedAllPendingFloors = false;
break;
}
}
if(CurrentFloor == TargetFloor)
{
if(!foundFloor)
printf("I waited in floor %d.\n", CurrentFloor);
if(!reachedAllPendingFloors)
{
for(int i = 0; i < 15; i++)
{
if(PendingFloors[i] != false)
{
TargetFloor = PendingFloors[i];
PendingFloors[i] = false;
break;
}
}
}
else
{
isDone = true;
}
}
}
}