/**
* @file Ex2.cpp
* @author Лєонов В.В, гр. 515і2
* @date 15 лютого 2024
* @brief Лабороторна робота N 1, Варіант 11
*
* Розгалуження та вибір завдання 2
*/
// підключення заголовних файлів стандартних бібліотек мови C
#include <stdio.h>
#include <locale.h>
#include "Train_info.h"
#include "Train_func.cpp"
int main()
{
//Оголошення змінних
int place, which_sit,com_side_sit, which_com, toilet;
setlocale(LC_ALL, "rus");//Підключення російської мови
//Введеня даних
printf("Введите номер места: ");
scanf("%d", &place);
which_sit = downup_sit(place);
//Виведення помикли
if (which_sit == ERR)
{
printf("Информация введена не правильно\n");
return ERR;
}
//Виведення покли
if (which_sit == 0)
{
printf("\nВаше место: Верхнее\n");
}
else printf("\nВаше место: Нижнее\n");
com_side_sit = compart_r_side(place);
//Виведення положення місця
if (com_side_sit == 0)
{
printf("\nРасположение места: Боковое\n");
}
else printf("\nРасположение места: Купе\n");
which_com = which_compart(place);
//Виведення номеру купе
switch (which_com)
{
default: printf("\nВаше место не находиться в купе\n"); break;
case 1: printf("\nВаше место находиться в купе №: I\n");
break;
case 2: printf("\nВаше место находиться в купе №: II\n");
break;
case 3: printf("\nВаше место находиться в купе №: III\n");
break;
case 4: printf("\nВаше место находиться в купе №: IV\n");
break;
case 5: printf("\nВаше место находиться в купе №: V\n");
break;
case 6: printf("\nВаше место находиться в купе №: VI\n");
break;
case 7: printf("\nВаше место находиться в купе №: VII\n");
break;
case 8: printf("\nВаше место находиться в купе №: VIII\n");
break;
case 9: printf("\nВаше место находиться в купе №: IX\n");
break;
}
toilet = walk_to_toilet(place);
//Виведення відстані до найближчого туалета
printf("\nРасстояние от купе до ближайшего туалета: %d м\n", toilet);
//Завершення роботи
return 0;
}
#ifndef TRAIN_INFO_H
#include <stdio.h>
#include <locale.h>
#define ERR -1
#define MAX_PLACE 54
#define MIN_PLACE 1
#define PUBLIC
#define PRIVATE static
#define metres_of_compart 2
PRIVATE int after_place_check(int place);
PUBLIC int downup_sit(int place);
PUBLIC int compart_r_side(int place);
PUBLIC int which_compart(int place);
PUBLIC int walk_to_toilet(int place);
#endif
#include "Train_info.h"
PRIVATE int after_place_check(int place)//Функція для перевірки коректності введеного
{
return place <= MAX_PLACE && place >= MIN_PLACE;
}
PUBLIC int downup_sit(int place)//Функція знаходження полки і виведення помикли
{
return after_place_check(place) ? place % 2 != 0 : ERR;
}
PUBLIC int compart_r_side(int place)//Функція знаходження чи місце знаходиться в купе чи бокове
{
return place > 36 ? 0 : 1;
}
PUBLIC int which_compart(int place)//Функція знаходження номеру купе
{
return place <= 36 ? (place + 3) / 4 : ERR;
}
PUBLIC int walk_to_toilet(int place)//Функція знаходження відстані до найближчого туалету
{
if (compart_r_side(place) == 1)
{
return which_compart(place) <= 4 ? which_compart(place) * metres_of_compart + 1 : (9 - which_compart(place)) * metres_of_compart + 1;
}
else return place >= 47 ? (((MAX_PLACE - place) / 2) + 1) * metres_of_compart + 1 : place == 37 ? 1 : place % 2 == 0 ? place - 37: place - 37 + 1;
}