Распечатать начальную конфигурацию расстановку, занятость и направление движения лифтов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите решить задачу: В доме N этажей и три лифта. Каждый лифт может быть свободным или занятым. Человек стоит на одном из этажей и собирается вызвать либо ближайший свободный лифт, либо ближайший занятый, направляющийся в сторону этажа, где находится человек. Распечатать начальную конфигурацию (расстановку, занятость и направление движения лифтов, местоположение человека), а также номер лифта, который будет вызван. Использовать функции ВВОД, ВЫВОД, ВЫБОР ЛИФТА.
 #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();

 }
Проблема в том, что я не могу сообразить как определить какой из лифтов будет вызван... Если бы не надо было учитывать их направление, то всё было бы просто ( вычислил бы через if какой ближе всего к человеку и вывел бы результат на экран и расстановку соотвественно ).

Решение задачи: «Распечатать начальную конфигурацию расстановку, занятость и направление движения лифтов»

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;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5
Похожие ответы