/*
Файл: main_apartments.c
Лабораторна робота № 1
Автор : Хоменко К.О.
Завдання : Квартири.
Дата створення : 12.02.2022
*/
//подключение библиотек
#include "apartments.h"
#include <stdio.h>
int main()
{
//объявление переменных
float number; //номер квартиры
float floor = 0; //этаж
float num_of_entrance = 0; //номер подъезда
float a = 0; //номер квартиры на этаже
//приглашение ко вводу номера квартиры
printf("Please, enter a number of the apartment : ");
//ввод данных
scanf("%f", &number);
//если введённый номер не корректен >> вывод сообщения об ошибке
if (checking_a_number(number) == false)
printf("\nThere is no apartment with this number !\nError!\n");
//если введённый номер корректен >> обращение к функциям
else
{
num_of_entrance = finding_entrance(number, num_of_entrance);
floor = finding_floor(number, num_of_entrance, floor);
quantity_of_rooms_and_balconies(number, num_of_entrance, floor, a);
}
//завершение работы
return 0;
}
#ifndef APARTMENTS_H
#define APARTMENTS_H
#include <stdbool.h> //чтобы можно было использовать bool
#include <math.h> //чтобы работало округление ceil
#define PRIVATE static
#define PUBLIC
//объявление функций
PUBLIC bool checking_a_number(float number);
PUBLIC int finding_entrance(float number, float num_of_entrance);
PUBLIC int finding_floor(float number, float num_of_entrance, float floor);
PUBLIC void quantity_of_rooms_and_balconies(float number, float num_of_entrance, float floor, float a);
#endif
//подключение библиотек
#include "apartments.h"
#include <stdio.h>
//булевая функция, которая проверяет корректность введённых данных
PUBLIC bool checking_a_number(float number)
{
//при помощи тернарных операторов происходит проверка и возвращается значение
return number >= 1 && number <= 180 ? true : false;
}
//функция, которая ищет номер подъезда
PUBLIC int finding_entrance(float number, float num_of_entrance)
{
//расчёт по формуле : №_подъезда = №_кв / кол-во_кв_в_подъезде >> округляю результат в правую сторону
num_of_entrance = ceil(number / 60);
printf("\nThe apartment is located in the %.f entrance.\n", num_of_entrance);
return num_of_entrance;
}
//функция, которая ищет этаж
PUBLIC int finding_floor(float number, float num_of_entrance, float floor)
{
//расчёт по формуле : этаж = (№_кв - №_подъезда - 1) * кол-во_кв_в_подъезде) / кол - во_кв_на_этаже >> результат округляю в правую сторону
floor = ceil((number - (num_of_entrance - 1) * 60) / 5);
printf("The apartment is located on %.f floor.\n", floor);
return floor;
}
//функция, которая определяет количество комнат и балконов в квартире
PUBLIC void quantity_of_rooms_and_balconies(float number, float num_of_entrance, float floor, float a)
{
//расчет по формуле : №_кв_на_этаже = №_кв - кол-во_кв_на_этаже * (этаж - 1) - кол-во_кв_на_этаже * кол-во_этажей * (№_подъезда - 1)
a = number - 5 * (floor - 1) - 5 * 12 * (num_of_entrance - 1);
if (a == 1 || a == 5)
printf("This apartment has 7 rooms and 3 balconies.\n");
else if (a == 2 || a == 4)
printf("This apartment has 6 rooms and 1 balcon.\n");
else if (a == 3)
printf("This apartment has 5 rooms and 2 balconies.\n");
}