Загрузка данных


#pragma once

double add(double a, double b);
double subtract(double a, double b);
double multiply(double a, double b);
double divide(double a, double b);

int bitAnd(int a, int b);
int bitOr(int a, int b);
int bitXor(int a, int b);

long long factorial(int n);
double power(double a, int n);

int getPlan();
int getFact(int &count);
void checkFood(int plan, int fact, int count);

void calculateSalary();
void analyzeTemperature();
void calculateExpenses();

#include <iostream>
#include <vector>
#include <cmath>
#include "functions.h"
using namespace std;

// Задание 1

double add(double a, double b) {
    return a + b;
}

double subtract(double a, double b) {
    return a - b;
}

double multiply(double a, double b) {
    return a * b;
}

double divide(double a, double b) {
    return a / b;
}

int bitAnd(int a, int b) {
    return a & b;
}

int bitOr(int a, int b) {
    return a | b;
}

int bitXor(int a, int b) {
    return a ^ b;
}

long long factorial(int n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}

double power(double a, int n) {
    if (n == 0) return 1;
    if (n < 0) return 1.0 / power(a, -n);
    return a * power(a, n - 1);
}

// Задание 2

int getPlan() {
    int sum = 0;
    int calories;

    for (int i = 0; i < 5; i++) {
        cout << "Калории блюда " << i + 1 << ": ";
        cin >> calories;
        sum += calories;
    }

    return sum;
}

int getFact(int &count) {
    int sum = 0;
    int calories;

    cout << "Количество съеденных блюд: ";
    cin >> count;

    for (int i = 0; i < count; i++) {
        cout << "Калории блюда " << i + 1 << ": ";
        cin >> calories;
        sum += calories;
    }

    return sum;
}

void checkFood(int plan, int fact, int count) {
    if (fact == plan) {
        cout << "План выполнен\n";
    } else if (fact < plan) {
        cout << "Не хватает " << plan - fact << " калорий\n";
    } else {
        cout << "Превышение на " << fact - plan << " калорий\n";
    }

    if (fact <= plan / 2.0)
        cout << "Потребление в два раза меньше плана\n";

    if (fact >= plan * 2.0)
        cout << "Потребление в два раза больше плана\n";

    if (count <= 2)
        cout << "Слишком мало приемов пищи\n";
}

// Задание 3

void calculateSalary() {
    vector<double> fixed(15);
    vector<double> hourly;

    double sumFixed = 0;
    double sumHourly = 0;

    for (int i = 0; i < 15; i++) {
        cout << "Зарплата сотрудника " << i + 1 << ": ";
        cin >> fixed[i];
        sumFixed += fixed[i];
    }

    int n;
    cout << "Количество почасовых сотрудников: ";
    cin >> n;

    for (int i = 0; i < n; i++) {
        double rate, hours;

        cout << "Ставка за час и часы работы: ";
        cin >> rate >> hours;

        hourly.push_back(rate * hours);
        sumHourly += rate * hours;
    }

    double total = sumFixed + sumHourly;
    double average = total / (15 + n);

    cout << "Общий фонд зарплаты: " << total << endl;
    cout << "Фиксированная оплата: " << sumFixed << endl;
    cout << "Почасовая оплата: " << sumHourly << endl;

    if (sumFixed > sumHourly)
        cout << "Больше расходов на фиксированную оплату\n";
    else if (sumHourly > sumFixed)
        cout << "Больше расходов на почасовую оплату\n";
    else
        cout << "Расходы одинаковые\n";

    int count = 0;

    for (int i = 0; i < 15; i++) {
        if (fixed[i] > average) count++;
    }

    for (int i = 0; i < n; i++) {
        if (hourly[i] > average) count++;
    }

    cout << "Сотрудников выше средней зарплаты: "
         << count << endl;

    double minFixed = fixed[0];

    for (int i = 1; i < 15; i++) {
        if (fixed[i] < minFixed) minFixed = fixed[i];
    }

    count = 0;

    for (int i = 0; i < n; i++) {
        if (hourly[i] < minFixed) count++;
    }

    cout << "Почасовых сотрудников ниже минимальной фиксированной ставки: "
         << count << endl;
}

// Задание 4

void analyzeTemperature() {
    double oldTemp[31] = {
        8, 7, 9, 10, 6, 5, 4, 7, 8, 9,
        11, 10, 8, 6, 5, 4, 3, 6, 7, 8,
        9, 10, 7, 6, 5, 4, 3, 2, 5, 6, 7
    };

    int n;
    cout << "Количество дней текущего октября (1-31): ";
    cin >> n;

    if (n < 1 || n > 31) {
        cout << "Неверное количество дней\n";
        return;
    }

    double newTemp[31];
    double oldSum = 0, newSum = 0;
    int oldBelow = 0, newBelow = 0;

    for (int i = 0; i < n; i++) {
        cout << "Температура за день " << i + 1 << ": ";
        cin >> newTemp[i];
    }

    double oldMin = oldTemp[0], oldMax = oldTemp[0];
    double newMin = newTemp[0], newMax = newTemp[0];

    for (int i = 0; i < 31; i++) {
        oldSum += oldTemp[i];

        if (oldTemp[i] < oldMin) oldMin = oldTemp[i];
        if (oldTemp[i] > oldMax) oldMax = oldTemp[i];
        if (oldTemp[i] < 0) oldBelow++;
    }

    for (int i = 0; i < n; i++) {
        newSum += newTemp[i];

        if (newTemp[i] < newMin) newMin = newTemp[i];
        if (newTemp[i] > newMax) newMax = newTemp[i];
        if (newTemp[i] < 0) newBelow++;
    }

    double oldAverage = oldSum / 31;
    double newAverage = newSum / n;

    cout << "Средняя температура прошлого года: "
         << oldAverage << endl;
    cout << "Средняя температура текущего года: "
         << newAverage << endl;

    if (oldAverage > newAverage)
        cout << "Прошлый октябрь был теплее\n";
    else if (newAverage > oldAverage)
        cout << "Текущий октябрь был теплее\n";
    else
        cout << "Средние температуры одинаковые\n";

    if (abs(oldAverage - newAverage) > 5)
        cout << "Предупреждение: большой перепад температур\n";

    if (oldMax > newMax)
        cout << "Максимум выше в прошлом году\n";
    else if (newMax > oldMax)
        cout << "Максимум выше в текущем году\n";
    else
        cout << "Максимумы одинаковые\n";

    if (oldMin < newMin)
        cout << "Минимум ниже в прошлом году\n";
    else if (newMin < oldMin)
        cout << "Минимум ниже в текущем году\n";
    else
        cout << "Минимумы одинаковые\n";

    cout << "Дней ниже нуля в прошлом году: " << oldBelow << endl;
    cout << "Дней ниже нуля в текущем году: " << newBelow << endl;
}

// Задание 5

void calculateExpenses() {
    double income;

    cout << "Доход семьи: ";
    cin >> income;

    double required = 5800 + 6200 + 4700 + 10500
                    + 5000 + 3600 + 23700;

    int n;
    cout << "Количество незапланированных расходов: ";
    cin >> n;

    double extra = 0;
    double expense;

    for (int i = 0; i < n; i++) {
        cout << "Введите расход: ";
        cin >> expense;
        extra += expense;
    }

    double averageRequired = required / 7;
    double averageExtra = 0;

    if (n > 0) averageExtra = extra / n;

    double balance = income - required - extra;

    cout << "Обязательные расходы: " << required << endl;
    cout << "Незапланированные расходы: " << extra << endl;
    cout << "Средние обязательные расходы: "
         << averageRequired << endl;
    cout << "Средние незапланированные расходы: "
         << averageExtra << endl;

    if (extra > required && n > 0) {
        double percent = (averageExtra - averageRequired)
                       / averageRequired * 100;

        cout << "Превышение средних расходов: "
             << percent << "%\n";
    }

    cout << "Остаток на счету: " << balance << endl;

    double limit = income * 0.9 - required;

    if (limit < 0) {
        cout << "10% дохода не останется даже без дополнительных расходов\n";
    } else {
        cout << "Максимальные незапланированные расходы: "
             << limit << endl;
    }
}

#include <iostream>
#include "functions.h"
using namespace std;

int main() {
    int choice;

    do {
        cout << "\nВыберите задание:\n";
        cout << "1. Калькулятор\n";
        cout << "2. Отслеживание питания\n";
        cout << "3. Расчет зарплаты\n";
        cout << "4. Анализ температуры\n";
        cout << "5. Финансовые расходы\n";
        cout << "0. Выход\n";
        cout << "Ваш выбор: ";

        cin >> choice;

        switch (choice) {
        case 1: {
            int operation;

            do {
                cout << "\n1. Сложение\n";
                cout << "2. Вычитание\n";
                cout << "3. Умножение\n";
                cout << "4. Деление\n";
                cout << "5. Побитовое И\n";
                cout << "6. Побитовое ИЛИ\n";
                cout << "7. Исключающее ИЛИ\n";
                cout << "8. Факториал\n";
                cout << "9. Степень\n";
                cout << "0. Назад\n";
                cin >> operation;

                double a, b;
                int x, y, n;

                switch (operation) {
                case 1:
                    cin >> a >> b;
                    cout << add(a, b) << endl;
                    break;
                case 2:
                    cin >> a >> b;
                    cout << subtract(a, b) << endl;
                    break;
                case 3:
                    cin >> a >> b;
                    cout << multiply(a, b) << endl;
                    break;
                case 4:
                    cin >> a >> b;
                    if (b != 0) cout << divide(a, b) << endl;
                    else cout << "На ноль делить нельзя\n";
                    break;
                case 5:
                    cin >> x >> y;
                    cout << bitAnd(x, y) << endl;
                    break;
                case 6:
                    cin >> x >> y;
                    cout << bitOr(x, y) << endl;
                    break;
                case 7:
                    cin >> x >> y;
                    cout << bitXor(x, y) << endl;
                    break;
                case 8:
                    cin >> n;
                    if (n >= 0 && n <= 20) cout << factorial(n) << endl;
                    else cout << "Введите число от 0 до 20\n";
                    break;
                case 9:
                    cin >> a >> n;
                    if (a == 0 && n < 0) cout << "Ошибка\n";
                    else cout << power(a, n) << endl;
                    break;
                }
            } while (operation != 0);

            break;
        }

        case 2: {
            int plan = getPlan();
            int count;
            int fact = getFact(count);
            checkFood(plan, fact, count);
            break;
        }

        case 3:
            calculateSalary();
            break;

        case 4:
            analyzeTemperature();
            break;

        case 5:
            calculateExpenses();
            break;

        case 0:
            cout << "Выход\n";
            break;

        default:
            cout << "Неверный выбор\n";
        }

    } while (choice != 0);

    return 0;
}