add: c library
This commit is contained in:
parent
0779292267
commit
a38c7c284f
5
.vscode/settings.json
vendored
Normal file
5
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"files.associations": {
|
||||
"stdio.h": "c"
|
||||
}
|
||||
}
|
50
C_library/calculating.c
Normal file
50
C_library/calculating.c
Normal 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
12
C_library/calculating.h
Normal 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
74
C_library/main.c
Normal 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;
|
||||
}
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user