Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <conio.h>
- #include <Windows.h>
- using namespace std;
- //Лилия здесь много вариантов решения задачи. Получается вы запрашиваете параметры комнат и задаете параметры обоев.
- //Теперь не помешало бы определиться какими обоями вы будете обклеивать какую комнату.
- //Как вариант, можно добавить в классе Room поле wallpaper_ и запрашивать данные обоев для комнаты вместе с другими параметрами(в этом случае класс Wallpaper должен быть объявлен до класса Room).
- //Тогда метод для расчета количества и стоимости обоев можно сделать в классе Flat.Он будет просто последовательно перебирать все комнаты, считать площадь, подлежащую оклеиванию, и делить на площадь рулона обоев.
- //Примерный вариант решения задачи:
- class Wallpaper {
- public:
- Wallpaper() : wallpaper_art_(""), wallpaper_length_(0), wallpaper_width_(0), price_roll_(0) {}; // конструктор по умолчанию
- Wallpaper(string wallpaper_name, const double wallpaper_length, const double wallpaper_width, double price_roll) :
- wallpaper_art_(wallpaper_name), wallpaper_length_(wallpaper_length), wallpaper_width_(wallpaper_width), price_roll_(price_roll) {};
- double WallpaperSquare() {
- return wallpaper_length_ * wallpaper_width_;
- }
- string wallpaper_art_; // название обоев
- double wallpaper_length_; //длинна обоев в рулоне
- double wallpaper_width_; //ширина обоев в рулоне
- double price_roll_; // стоимость рулона обоев
- };
- class Room {
- public:
- Room() : name_(""), room_length_(0), room_width_(0), room_height_(0), ceiling_(0), wpaper_({}) {};
- 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_({}) {};
- double RoomSquare() {
- double Square_room = (2 * room_length_ + 2 * room_width_) * room_height_;
- if (ceiling_ == 1) {
- Square_room += room_length_ * room_width_;
- }
- return Square_room;
- }
- string name_; // название комнаты
- double room_length_; // длинна
- double room_width_; // ширина
- double room_height_; // высота
- bool ceiling_; // здесь подойдет bool (0 - не оклеивать, 1 - оклеивать)
- Wallpaper wpaper_;// здесь не массив обоев а конкретный тип обоев
- };
- class Flat {
- public:
- Flat(const int new_rooms_count) : rooms_count_(new_rooms_count), rooms_(new Room[new_rooms_count]) {
- for (int i = 0; i < rooms_count_; i++)
- {
- cin >> rooms_[i].name_;
- cin >> rooms_[i].room_length_;
- cin >> rooms_[i].room_width_;
- cin >> rooms_[i].room_height_;
- cin >> rooms_[i].ceiling_;
- // запрашиваем дополнительно параметры обоев для комнаты
- cin >> rooms_[i].wpaper_.wallpaper_art_;
- cin >> rooms_[i].wpaper_.wallpaper_length_;
- cin >> rooms_[i].wpaper_.wallpaper_width_;
- cin >> rooms_[i].wpaper_.price_roll_;
- }
- }; // параметризованный конструктор, параметр - количество комнат в квартире
- void show_rooms() {
- for (int i = 0; i < rooms_count_; i++) {
- cout << "Название комнаты: " << rooms_[i].name_ << ": длинна: " << rooms_[i].room_length_ <<
- " м ширина : " << rooms_[i].room_width_ << " м высота : " << rooms_[i].room_height_ << " м, оклеивать потолок? "
- << rooms_[i].ceiling_ << endl;
- }
- cout << endl;
- }
- void get_calculation() {
- for (int i = 0; i < rooms_count_; i++) {
- int wallpaper_count = rooms_[i].RoomSquare() / rooms_[i].wpaper_.WallpaperSquare() + 1; // прибавляем 1 и преобразуем к типу int для получения целого количества рулонов
- cout << "Для оклейки комнаты " << rooms_[i].name_ << " необходимо " << wallpaper_count << " рулонов обоев " << rooms_[i].wpaper_.wallpaper_art_ << " стоимостью " << rooms_[i].wpaper_.price_roll_ * wallpaper_count << " рублей" << endl;
- }
- }
- int rooms_count_;// количество комнат в квартире
- Room* rooms_; // массив комнат
- ~Flat() {
- delete[] rooms_;
- }
- };
- int main() {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- int count;
- // здесь запрашиваем количество комнат, создаем Flat под заданное количество комнат, потом циклом запрашиваем параметры комнат и записываем эти параметры в каждую комнату с помощью SetRoom
- cout << "Введите количество комнат в квартире: " << endl;
- cin >> count;
- cout << "Введите последовательно название комнат, длину, ширину, высоту каждой, 1, если нужно оклеивать потолок или 0, если потолок не нужно, название обоев, длину обоев, ширину обоев, стоимость обоев" << endl;
- Flat my_flat(count);
- my_flat.show_rooms();
- my_flat.get_calculation();
- }
Advertisement
Add Comment
Please, Sign In to add comment