/**
* @file 2Lab1No2.c
* @author Коваленко В.А, гр. 515-В
* @date 3 травня 2022
* @brief Лабораторна робота No 1
*
* Розгалуження та вибір. Завдання 2
*/
#include <stdio.h>
#include <locale.h>
#include "train.h"
int main()
{
//Подключаем русский язык
setlocale(LC_ALL, "rus");
int place, loc, coupeside, coupe, wc;
printf("Введите номер вашего места:");
scanf("%d", &place);
loc = up_down(place);
if (loc == ERR)
{
printf("Данного места не существует");
return ERR;
}
if (loc)
printf("У вас верхнее место\n");
else
printf("У вас нижнее место\n");
coupeside = coupe_side(place);
if (coupeside)
printf("У вас место в купе\n");
else
printf("У вас боковое место\n");
coupe = coupe_num(place);
coupe_num_print(coupe);
wc = wc_distance(place, coupe);
printf("\nБлижайший туалет находится в %d м от вас", wc);
return 0;
}
#ifndef TRAIN_H
#define TRAIN_H
#define PUBLIC
#define PRIVATE static
#define ERR -1
PUBLIC int coupe_side(int place);
PUBLIC int coupe_num(int place);
PUBLIC void coupe_num_print(int coupe);
PUBLIC int wc_distance(int place, int coupe);
#endif
#include "train.h"
#include <stdio.h>
#define SEAT_MIN 1
#define SEAT_MAX 54
const int COUPE_L = 2; //Константа с значением длины купе
//Функция для проверки корректности номера
PRIVATE int place_check(int place)
{
return SEAT_MIN <= place && place <= SEAT_MAX;
}
//Функция для проверки верхней/нижний полки
PUBLIC int up_down(int place)
{
return place_check(place) ? place % 2 == 0 : ERR;
}
//Функция для нахождения где находится место(купе / бокове)
PUBLIC int coupe_side(int place)
{
return place_check(place) ? place <= 36 : ERR;
}
//Функция для нахождения бокового места
PUBLIC int coupe_num(int place)
{
return place_check(place) ? coupe_side(place) ? (place + 3) / 4 : ((54 - place) / 2) + 1 : ERR;
}
//Функция для вывода номера купе римскими цифрами
PUBLIC void coupe_num_print(int coupe)
{
printf("Купе под номером:");
switch (coupe)
{
case 1: printf("I"); break;
case 2: printf("II"); break;
case 3: printf("III"); break;
case 4: printf("IV"); break;
case 5: printf("V"); break;
case 6: printf("VI"); break;
case 7: printf("VII"); break;
case 8: printf("VIII"); break;
case 9: printf("IX"); break;
}
}
//Функция для нахождения расстояния до туалета
PUBLIC int wc_distance(int place, int coupe)
{
return place_check(place) ? coupe <= 4 ? COUPE_L * coupe : (10 - coupe) * COUPE_L - 1 : ERR;
}