Добавил:
Рад, если кому-то помог Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
01.11.2025
Размер:
1.77 Кб
Скачать
#include <iostream>
#include <stdexcept>
#include <string>
#include <locale>
using namespace std;

class MagicFlower {
    int petals;
    string color;
    static int whiteCount, pinkCount;
    
    bool isPerfectNumber(int n) {
        int sum = 0;
        for (int i = 1; i <= n/2; i++) {
            if (n % i == 0) sum += i;
        }
        return sum == n;
    }
    
public:
    MagicFlower(int p, const string& c) {
        if (!isPerfectNumber(p)) {
            throw invalid_argument("Число лепестков должно быть совершенным");
        }
        
        petals = p;
        
        if (c == "white" || c == "pink") {
            color = c;
        } else {
            // Выбираем цвет, объектов которого создано меньше
            color = (whiteCount <= pinkCount) ? "white" : "pink";
        }
        
        if (color == "white") whiteCount++;
        else pinkCount++;
    }
    
    void print() const {
        cout << "Цветок с " << petals << " лепестками, цвет: " << color << endl;
    }
};

int MagicFlower::whiteCount = 0;
int MagicFlower::pinkCount = 0;

int main() {
    setlocale(LC_ALL, "ru_RU.UTF-8");
    
    try {
        MagicFlower f1(6, "white");    // 6 - совершенное число
        f1.print();
        
        MagicFlower f2(28, "pink");    // 28 - совершенное число  
        f2.print();
        
        MagicFlower f3(12, "blue");    // 12 - не совершенное, выберет white
        f3.print();
        
    } catch (const exception& e) {
        cout << "Ошибка: " << e.what() << endl;
    }
    
    return 0;
}
Соседние файлы в папке Лаба7