Project 2 - Implement the Code for controlling the retraction and extension of Airplane’s landing gear
#include <stdio.h>
#include <stdlib.h>
enum states {GEAR_DOWN, CHECKING_BEFORE_TAKEOFF, RAISING_GEAR, GEAR_UP, CHECKING_BEFORE_LANDING, LOWERING_GEAR};
enum events {GEAR_UP_BUTTON_PRESSED, GEAR_DOWN_BUTTON_PRESSED, GEAR_LOCKED_DOWN, GEAR_LOCKED_UP, GEAR_NOT_LOCKED_DOWN, GEAR_NOT_LOCKED_UP};
static void Gear_Down(void) {
printf("Gear Down\n");
}
static void Checking_Before_Takeoff(void) {
printf("Checking Before Takeoff\n");
}
static void Raising_Gear(void) {
printf("Raising Gear\n");
}
static void Gear_Up(void) {
printf("Gear Up\n");
}
static void Checking_Before_Landing(void) {
printf("Checking Before Landing\n");
}
static void Lowering_Gear(void) {
printf("Lowering Gear\n");
}
static void (*state_table []) (void)= {Gear_Down,Checking_Before_Takeoff,Raising_Gear,Gear_Up,Checking_Before_Landing,Lowering_Gear};
int main() {
int event;
int state = GEAR_DOWN;
while (1) {
state_table[state]();
printf("Enter event: ");
scanf("%d", &event);
switch (state) {
case GEAR_DOWN:
if (event == GEAR_UP_BUTTON_PRESSED) state = CHECKING_BEFORE_TAKEOFF;
break;
case CHECKING_BEFORE_TAKEOFF:
if (event == GEAR_LOCKED_UP) state = RAISING_GEAR;
else if (event == GEAR_NOT_LOCKED_DOWN) state = GEAR_DOWN;
break;
case RAISING_GEAR:
if (event == GEAR_LOCKED_UP) state = GEAR_UP;
else if (event == GEAR_NOT_LOCKED_UP) state = LOWERING_GEAR;
break;
case GEAR_UP:
if (event == GEAR_DOWN_BUTTON_PRESSED) state = CHECKING_BEFORE_LANDING;
break;
case CHECKING_BEFORE_LANDING:
if (event == GEAR_LOCKED_DOWN) state = LOWERING_GEAR;
else if (event == GEAR_NOT_LOCKED_UP) state = GEAR_UP;
break;
case LOWERING_GEAR:
if (event == GEAR_LOCKED_DOWN) state = GEAR_DOWN;
else if (event == GEAR_NOT_LOCKED_DOWN) state = RAISING_GEAR;
break;
}
}
return 0;
}
OUTPUT:
