From a38c7c284f038e6e6fb073655d8b3830ae2e56b0 Mon Sep 17 00:00:00 2001 From: risen Date: Sat, 1 Mar 2025 18:51:32 +0300 Subject: [PATCH] add: c library --- .vscode/settings.json | 5 +++ C_library/calculating.c | 50 +++++++++++++++++++++++++++ C_library/calculating.h | 12 +++++++ C_library/main.c | 74 ++++++++++++++++++++++++++++++++++++++++ calc3d | Bin 16384 -> 16432 bytes calculating.py | 6 +++- 6 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 .vscode/settings.json create mode 100644 C_library/calculating.c create mode 100644 C_library/calculating.h create mode 100644 C_library/main.c mode change 100644 => 100755 calc3d 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 efd055667422da56d36a41ffde085bc5c0b3f90d..86b06f7911b86ee104bd99588ac334df871a4efb GIT binary patch literal 16432 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 literal 16384 zcmeI%O-sWt7zglV9aEIK-F6y0$CVXd*vXr978G`va|oVFtx?L>bZfKC9rfl%@)P)# zJeq8+;85^9{(&SUO`asb_7Zw?-HVi<$0UsdMIBaWoU=0`#u(SRtaFimYZuS{syREH zzg26W%sO~ywf)+Mu8<%A0SG_<0uX=z1Rwwb2tWV={}