Распечатать начальную конфигурацию расстановку, занятость и направление движения лифтов - C (СИ)
Формулировка задачи:
Помогите решить задачу:
В доме N этажей и три лифта. Каждый лифт может быть свободным или занятым. Человек стоит на одном из этажей и собирается вызвать либо ближайший свободный лифт, либо ближайший занятый, направляющийся в сторону этажа, где находится человек.
Распечатать начальную конфигурацию (расстановку, занятость и направление движения лифтов, местоположение человека), а также номер лифта, который будет вызван.
Использовать функции ВВОД, ВЫВОД, ВЫБОР ЛИФТА.
Проблема в том, что я не могу сообразить как определить какой из лифтов будет вызван... Если бы не надо было учитывать их направление, то всё было бы просто ( вычислил бы через if какой ближе всего к человеку и вывел бы результат на экран и расстановку соотвественно ).
#include <stdio.h> #include <string.h> #include <math.h> struct lift { int situate; char sost[10]; char way[3]; } lift1, lift2, lift3; main() { int flour; int man; int l1,l2,l3; int min; clrscr(); printf("\nVvedite kolichestvo etajei v zdanii -> "); scanf("%i",&flour); printf("\nVvedite nomer etaja na kotorom nahoditsya chelovek -> "); scanf("%i",&man); printf("\nVvod informacii o lifte #1:\n"); printf("Nomer etaja na kotorom nahodtsya lift (ot 1 do %i -> ",flour); scanf("%i",&lift1.situate); printf("\nLifr zanyat ili svoboden? -> "); scanf("%s",lift1.sost); printf("\nNapravlenie dvijeniya lifta: up or down -> "); scanf("%s",lift1.way); printf("\nVvod informacii o lifte #2:\n"); printf("Nomer etaja na kotorom nahodtsya lift (ot 1 do %i -> ",flour); scanf("%i",&lift2.situate); printf("\nLifr zanyat ili svoboden? -> "); scanf("%s",lift2.sost); printf("\nNapravlenie dvijeniya lifta: up or down -> "); scanf("%s",lift2.way); printf("\nVvod informacii o lifte #3:\n"); printf("Nomer etaja na kotorom nahodtsya lift (ot 1 do %i -> ",flour); scanf("%i",&lift3.situate); printf("\nLifr zanyat ili svoboden? -> "); scanf("%s",lift3.sost); printf("\nNapravlenie dvijeniya lifta: up or down -> "); scanf("%s",lift3.way); getch(); }
Решение задачи: «Распечатать начальную конфигурацию расстановку, занятость и направление движения лифтов»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #define SIZE 3 //количество лифтов #define FLOORS 10 //количество этажей struct lift { char name[10]; int state; //состояние лифта 0 - если свободный, 1 - если занятой int floor; // этаж на котором находится лифт }arrayLift[SIZE]; void input() { int i; srand(time(NULL)); printf("Input name :\n"); for (i=0; i<SIZE; i++) { scanf("%s",arrayLift[i].name); } for (i=0; i<SIZE; i++) { arrayLift[i].state = rand() % 2; arrayLift[i].floor = rand() % FLOORS; } } void output() { int i; printf("Output data: \n"); for (i=0; i<SIZE; i++) { printf("%s : %d %d \n",arrayLift[i].name,arrayLift[i].state,arrayLift[i].floor); } } void choiceLift(int man,struct lift *mystruct) { int i, min = 1000; for (i=0; i<SIZE; i++) { if (abs(man - arrayLift[i].floor) < min) { min = abs(man - arrayLift[i].floor); memcpy(mystruct->name , arrayLift[i].name, strlen(mystruct->name)+1); mystruct->floor = arrayLift[i].floor; mystruct->state = arrayLift[i].state; } } } int main() { struct lift *a; int manFloor; input(); output(); printf("Input floor with the man :\n"); scanf("%d", &manFloor); choiceLift(manFloor,a); printf("%s : \n", a->name); if (a->state == 0) printf("empty lift "); else printf("occupied lift "); printf("from the %d \n",a->floor); return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д