add: c library

This commit is contained in:
Иван 2025-03-01 18:51:32 +03:00
parent 0779292267
commit a38c7c284f
6 changed files with 146 additions and 1 deletions

5
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,5 @@
{
"files.associations": {
"stdio.h": "c"
}
}

50
C_library/calculating.c Normal file
View File

@ -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 знаков после запятой
}

12
C_library/calculating.h Normal file
View File

@ -0,0 +1,12 @@
#ifndef CALCULATING_H
#define CALCULATING_H
#include <math.h>
#include <stdlib.h>
// Объявления функций
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

74
C_library/main.c Normal file
View File

@ -0,0 +1,74 @@
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#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;
}

BIN
calc3d Normal file → Executable file

Binary file not shown.

View File

@ -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)