diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..0f06797 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "stdio.h": "c" + } +} \ No newline at end of file diff --git a/C_library/calculating.c b/C_library/calculating.c new file mode 100644 index 0000000..e0c0776 --- /dev/null +++ b/C_library/calculating.c @@ -0,0 +1,50 @@ +#include "calculating.h" + +// Функция cost_prise +double cost_prise(double p, double t, double h, double md, double d, double st, double mk, double am, double post, int x) { + p = fabs(p); // номинальная мощность принтера + t = fabs(t); // время печати, в минутах + h = fabs(h); // тариф электроэнергии + md = fabs(md); // вес детали + d = (d < 1) ? 1 : fabs(d); // коэффициент выбраковки + st = fabs(st); // стоимость катушки + mk = fabs(mk); // вес катушки + am = fabs(am); // амортизация + post = fabs(post); // постобработка (обязательно проверить значение) + x = abs(x); // количество экземпляров + + double result = ((p / 1000) * (t / 60) * h + (md * d * (st / mk)) + (am + post)) * x; + return round(result * 100) / 100; // округление до 2 знаков после запятой +} + +// Функция calculating +double calculating(double cost, double mod, double marg) { + mod = fabs(mod); // моделирование + double margin = fabs(marg); // процент наценки + + double result = (margin / 100 * cost + cost) + mod; + return round(result * 100) / 100; // округление до 2 знаков после запятой +} + +// Функция amortization +double amortization(double a, double t, double spi, int year) { + + // количество минут в году + double minutes_in_year = 525600; + + // Если СПИ установлен на 0, то присваеваем 1 (год) + double year_norm; + if (spi == 0) { + year_norm = 100 / 1; + } else { + year_norm = 100 / spi; + } + + //Считаем годовую амортизациюcost + double year_am = a * year_norm / 100; + + //Считаем амортизацию за минуту и умножаем на время печати + double am_per_minute = year_am / minutes_in_year * t; + + return am_per_minute; // округление до 2 знаков после запятой +} \ No newline at end of file diff --git a/C_library/calculating.h b/C_library/calculating.h new file mode 100644 index 0000000..80bdc02 --- /dev/null +++ b/C_library/calculating.h @@ -0,0 +1,12 @@ +#ifndef CALCULATING_H +#define CALCULATING_H + +#include +#include + +// Объявления функций +double cost_prise(double p, double t, double h, double md, double d, double st, double mk, double am, double post, int x); +double calculating(double cost, double mod, double marg); +double amortization(double a, double t, double spi, int year); + +#endif // CALCULATING_H \ No newline at end of file diff --git a/C_library/main.c b/C_library/main.c new file mode 100644 index 0000000..f8e4405 --- /dev/null +++ b/C_library/main.c @@ -0,0 +1,74 @@ +#include +#include +#include +#include "calculating.h" // Подключаем заголовочный файл + +// Загрузка настроек (заглушка, нужно заменить на чтение из БД) +void load_settings(double *p, double *h, double *d, double *st, double *mk, double *a, double *spi, double *marge) { + *p = 270; // номинальная мощность принтера + *h = 3; // тариф электроэнергии + *d = 1.5; // коэффициент выбраковки + *st = 1500; // стоимость катушки + *mk = 1000; // вес катушки + *a = 15000; // амортизация + *spi = 3; // срок полезного использования + *marge = 150; // наценка +} + +int main() { + // Загрузка настроек + double p, h, d, st, mk, a, spi, marge; + load_settings(&p, &h, &d, &st, &mk, &a, &spi, &marge); + + // Ввод данных от пользователя + printf("Введите параметры для расчета:\n"); + + double hours, minutes; + printf("Время печати (часы): "); + scanf("%lf", &hours); + printf("Время печати (минуты): "); + scanf("%lf", &minutes); + + if (minutes > 60) { + hours += (int)(minutes / 60); + minutes = fmod(minutes, 60); // Используем fmod для остатка от деления + } + double t = hours * 60 + minutes; // Общее время в минутах + + double md; + printf("Масса детали (г): "); + scanf("%lf", &md); + + int x; + printf("Количество экземпляров (шт): "); + scanf("%d", &x); + + double mod; + printf("Моделирование (руб): "); + scanf("%lf", &mod); + + double post; + printf("Постобработка (руб): "); + scanf("%lf", &post); + + // Получение текущего года + time_t now = time(NULL); + struct tm *local = localtime(&now); + int year = local->tm_year + 1900; + + // Расчет амортизации + double am = amortization(a, t, spi, year); + + // Расчет себестоимости + double cost = cost_prise(p, t, h, md, d, st, mk, am, post, x); + + // Расчет итоговой стоимости + double result = calculating(cost, mod, marge); + + // Вывод результатов + printf("\nРезультаты расчета:\n"); + printf("Себестоимость: %.2f руб.\n", cost); + printf("Итоговая стоимость: %.2f руб.\n", result); + + return 0; +} \ No newline at end of file diff --git a/calc3d b/calc3d old mode 100644 new mode 100755 index efd0556..86b06f7 Binary files a/calc3d and b/calc3d differ diff --git a/calculating.py b/calculating.py index 877fd0f..5f968ee 100644 --- a/calculating.py +++ b/calculating.py @@ -18,7 +18,7 @@ def cost_prise(p, t, h, md, d, st, mk, am, post, x): x = int(x) # количество экземпляров except ValueError: x = 1 - result = ((abs(p) / 1000) * (abs(t) / 60) * abs(h) * abs(x)) + (abs(md) * abs(d) * (abs(st) / abs(mk) * abs(x)) + abs(am) + abs(post) * abs(x)) + result = ((abs(p) / 1000) * (abs(t) / 60) * abs(h) * abs(x)) + (abs(md) * abs(d) * (abs(st) / abs(mk) * abs(x)) + (abs(am) + abs(post)) * abs(x)) return round(result, 2) @@ -40,10 +40,14 @@ def amortization(a, t, spi, year): minutes_in_year = 527040 / 2 else: minutes_in_year = 525600 / 2 + try: year_norm = 100 / float(spi) except ZeroDivisionError: year_norm = 100 / 1 + year_am = float(a) / 100 * round(year_norm, 1) + am_per_minute = year_am / minutes_in_year * t + return round(am_per_minute, 2)