35657

Untitled

Nov 13th, 2023
724
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.13 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <conio.h>
  4. #include <Windows.h>
  5.  
  6. using namespace std;
  7.  
  8.  
  9. //Лилия здесь много вариантов решения задачи. Получается вы запрашиваете параметры комнат и задаете параметры обоев.
  10.  
  11. //Теперь не помешало бы определиться какими обоями вы будете обклеивать какую комнату.
  12.  
  13. //Как вариант, можно добавить в классе Room поле wallpaper_ и запрашивать данные обоев для комнаты вместе с другими параметрами(в этом случае класс Wallpaper должен быть объявлен до класса Room).
  14.  
  15. //Тогда метод для расчета количества и стоимости обоев можно сделать в классе Flat.Он будет просто последовательно перебирать все комнаты, считать площадь, подлежащую оклеиванию, и делить на площадь рулона обоев.
  16.  
  17. //Примерный вариант решения задачи:
  18.  
  19.  
  20. class Wallpaper {
  21. public:
  22.     Wallpaper() : wallpaper_art_(""), wallpaper_length_(0), wallpaper_width_(0), price_roll_(0) {}; // конструктор по умолчанию
  23.  
  24.     Wallpaper(string wallpaper_name, const double wallpaper_length, const double wallpaper_width, double price_roll) :
  25.         wallpaper_art_(wallpaper_name), wallpaper_length_(wallpaper_length), wallpaper_width_(wallpaper_width), price_roll_(price_roll) {};
  26.  
  27.     double WallpaperSquare() {
  28.         return wallpaper_length_ * wallpaper_width_;
  29.     }
  30.  
  31.     string wallpaper_art_; // название обоев
  32.     double wallpaper_length_; //длинна обоев в рулоне
  33.     double wallpaper_width_; //ширина обоев в рулоне
  34.     double price_roll_; // стоимость рулона обоев
  35. };
  36.  
  37.  
  38. class Room {
  39. public:
  40.  
  41.     Room() : name_(""), room_length_(0), room_width_(0), room_height_(0), ceiling_(0), wpaper_({}) {};
  42.  
  43.     Room(string name, double lenght, double width, double height, bool ceiling) : name_(name), room_length_(lenght), room_width_(width), room_height_(height), ceiling_(ceiling), wpaper_({}) {};
  44.  
  45.     double RoomSquare() {
  46.         double Square_room = (2 * room_length_ + 2 * room_width_) * room_height_;
  47.         if (ceiling_ == 1) {
  48.             Square_room += room_length_ * room_width_;
  49.         }
  50.         return Square_room;
  51.     }
  52.  
  53.  
  54.  
  55.     string name_; // название комнаты
  56.     double room_length_; // длинна
  57.     double room_width_; // ширина
  58.     double room_height_; // высота
  59.     bool ceiling_; // здесь подойдет bool (0 - не оклеивать, 1 - оклеивать)
  60.     Wallpaper wpaper_;// здесь не массив обоев а конкретный тип обоев
  61. };
  62.  
  63.  
  64. class Flat {
  65. public:
  66.  
  67.     Flat(const int new_rooms_count) : rooms_count_(new_rooms_count), rooms_(new Room[new_rooms_count]) {
  68.         for (int i = 0; i < rooms_count_; i++)
  69.         {
  70.             cin >> rooms_[i].name_;
  71.             cin >> rooms_[i].room_length_;
  72.             cin >> rooms_[i].room_width_;
  73.             cin >> rooms_[i].room_height_;
  74.             cin >> rooms_[i].ceiling_;
  75.             // запрашиваем дополнительно параметры обоев для комнаты
  76.             cin >> rooms_[i].wpaper_.wallpaper_art_;
  77.             cin >> rooms_[i].wpaper_.wallpaper_length_;
  78.             cin >> rooms_[i].wpaper_.wallpaper_width_;
  79.             cin >> rooms_[i].wpaper_.price_roll_;
  80.         }
  81.     }; // параметризованный конструктор, параметр - количество комнат в квартире
  82.  
  83.     void show_rooms() {
  84.         for (int i = 0; i < rooms_count_; i++) {
  85.             cout << "Название комнаты: " << rooms_[i].name_ << ": длинна: " << rooms_[i].room_length_ <<
  86.                 " м ширина : " << rooms_[i].room_width_ << " м высота : " << rooms_[i].room_height_ << " м, оклеивать потолок? "
  87.                 << rooms_[i].ceiling_ << endl;
  88.         }
  89.         cout << endl;
  90.     }
  91.  
  92.     void get_calculation() {
  93.         for (int i = 0; i < rooms_count_; i++) {
  94.             int wallpaper_count = rooms_[i].RoomSquare() / rooms_[i].wpaper_.WallpaperSquare() + 1; // прибавляем 1 и преобразуем к типу int для получения целого количества рулонов
  95.             cout << "Для оклейки комнаты " << rooms_[i].name_ << " необходимо " << wallpaper_count << " рулонов обоев " << rooms_[i].wpaper_.wallpaper_art_ << " стоимостью " << rooms_[i].wpaper_.price_roll_ * wallpaper_count << " рублей" << endl;
  96.         }
  97.     }
  98.  
  99.     int rooms_count_;// количество комнат в квартире
  100.     Room* rooms_; // массив комнат
  101.  
  102.  
  103.     ~Flat() {
  104.         delete[]  rooms_;
  105.     }
  106.  
  107. };
  108.  
  109. int main() {
  110.  
  111.     SetConsoleCP(1251);
  112.     SetConsoleOutputCP(1251);
  113.     int count;
  114.     // здесь запрашиваем количество комнат, создаем Flat под заданное количество комнат, потом циклом запрашиваем параметры комнат и записываем эти параметры в каждую комнату с помощью SetRoom
  115.     cout << "Введите количество комнат в квартире: " << endl;
  116.     cin >> count;
  117.     cout << "Введите последовательно название комнат, длину, ширину, высоту каждой, 1, если нужно оклеивать потолок или 0, если потолок не нужно, название обоев, длину обоев, ширину обоев, стоимость обоев" << endl;
  118.     Flat my_flat(count);
  119.  
  120.     my_flat.show_rooms();
  121.  
  122.  
  123.     my_flat.get_calculation();
  124. }
Advertisement
Add Comment
Please, Sign In to add comment