#include<stdio.h>
const char* PLANESTATES[] = {"Grounded", "TakeOff", "Airborne", "Land"};
const char* POSITIONSTATES[] = {"Falling", "Down", "Rising", "Up"};
const char* SWITCHSTATES[] = {"Opened", "Closed"};
const char* LIGHTSTATES[] = {"Off", "Green", "Red"};
typedef enum planeStates {
GROUNDED, TAKEOFF, AIRBORNE, LAND
} planeStates;
typedef enum positionStates {
FALLING, DOWN, RISING, UP
} positionStates;
typedef enum switchStates {
OPENED, CLOSED
} switchStates;
typedef enum lightStates {
OFF, GREEN, RED
} lightStates;
planeStates planeState;
positionStates leverState, valveState;
switchStates limitSwitchState, squatSwitchState;
lightStates lightState;
int endJourney;
void printStatus(planeStates, positionStates, positionStates, switchStates, switchStates, lightStates);
void takeOff();
void airborne();
void land();
void grounded();
void checTakeOffStatus();
void checkLandingStatus();
void gearUp();
void abortFlight();
int main() {
grounded();
return 0;
}
void printStatus(planeStates planeState, positionStates leverState, positionStates valveState, switchStates limitSwitchState, switchStates squatSwitchState, lightStates lightState) {
printf("Plane status: %s\n", PLANESTATES[planeState]);
printf("Lever status: %s\n", POSITIONSTATES[leverState]);
printf("Valve status: %s\n", POSITIONSTATES[valveState]);
printf("Limit Switch status: %s\n", SWITCHSTATES[limitSwitchState]);
printf("Squat Switch status: %s\n", SWITCHSTATES[squatSwitchState]);
printf("Light status: %s\n", LIGHTSTATES[lightState]);
}
void grounded() {
if (endJourney) return
printf("Plane is being grounded, ready for flight.\n");
planeState = GROUNDED;
leverState = DOWN;
valveState = DOWN;
limitSwitchState = OPENED;
squatSwitchState = CLOSED;
lightState = GREEN;
printStatus(planeState, leverState, valveState, limitSwitchState, squatSwitchState, lightState);
takeOff();
abortFlight();
}
void abortFlight() {
printf("Flight has been aborted...\n");
printStatus(planeState, leverState, valveState, limitSwitchState, squatSwitchState, lightState);
}
void takeOff() {
printf("Plane has taken off.\n");
planeState = TAKEOFF;
printStatus(planeState, leverState, valveState, limitSwitchState, squatSwitchState, lightState);
checkTakeOffStatus();
}
void checkTakeOffStatus() {
squatSwitchState = OPENED;
printf("Checking status of Squat Switch... It is open\n");
printStatus(planeState, leverState, valveState, limitSwitchState, squatSwitchState, lightState);
gearUp();
}
void gearUp() {
printf("Raising gears...\n");
leverState = RISING;
valveState = UP;
lightState = RED;
printStatus(planeState, leverState, valveState, limitSwitchState, squatSwitchState, lightState);
airborne();
}
void airborne() {
printf("Plane is airborne currently.\n");
planeState = AIRBORNE;
leverState = UP;
limitSwitchState = CLOSED;
lightState = OFF;
printStatus(planeState, leverState, valveState, limitSwitchState, squatSwitchState, lightState);
land();
}
void checkLandingStatus() {
printf("Preparing to land...\n");
planeState = LAND;
leverState = FALLING;
valveState = DOWN;
lightState = RED;
printStatus(planeState, leverState, valveState, limitSwitchState, squatSwitchState, lightState);
land();
}
void land() {
printf("Plane landed successfully!\n");
planeState = GROUNDED;
leverState = DOWN;
lightState = GREEN;
endJourney = 1;
printStatus(planeState, leverState, valveState, limitSwitchState, squatSwitchState, lightState);
grounded();
}