Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите написать программу на си пожалуйста

Addk Знаток (255), открыт 1 неделю назад
написать программу на си через int main которая определяет, пересекаются ли кривые \( y = px^3 + ox^2 + nx + m \) и \( y = lx^3 + wx + v \). Если пересекаются, программа находит точки пересечения с использованием тригонометрической формулы Виета.
3 ответа
Verbi Профи (783) 1 неделю назад
#include <stdio.h>
#include <math.h>

// Функция для вычисления значения кубического уравнения
double cubic(double a, double b, double c, double d, double x) {
return a * x * x * x + b * x * x + c * x + d;
}

// Функция для нахождения корней методом Ньютона
double newton_method(double a, double b, double c, double d, double x0) {
double epsilon = 1e-6; // Точность
double x = x0;
double fx, dfx;

do {
fx = cubic(a, b, c, d, x);
dfx = 3 * a * x * x + 2 * b * x + c; // Производная кубической функции

if (fabs(dfx) < 1e-6) {
printf("Производная слишком мала, метод Ньютона может не сработать.\n");
break;
}

x = x - fx / dfx;
} while (fabs(fx) > epsilon);

return x;
}

int main() {
double p, o, n, m, l, w, v;

printf("Введите коэффициенты для кривой y = px^3 + ox^2 + nx + m (p, o, n, m): ");
scanf("%lf %lf %lf %lf", &p, &o, &n, &m);

printf("Введите коэффициенты для кривой y = lx^3 + wx + v (l, w, v): ");
scanf("%lf %lf %lf", &l, &w, &v);

// Преобразуем уравнение в форму Ax^3 + Bx^2 + Cx + D = 0
double A = p - l;
double B = o;
double C = n - w;
double D = m - v;

if (A == 0) {
printf("Это не кубическое уравнение!\n");
return 0;
}

// Пробуем найти корни с помощью метода Ньютона
double x0 = 0; // Начальная точка для метода Ньютона
double root = newton_method(A, B, C, D, x0);

// Проверим, что корень действительно решает уравнение
if (fabs(cubic(A, B, C, D, root)) < 1e-6) {
printf("Точка пересечения: x = %lf\n", root);
} else {
printf("Корень не найден.\n");
}

return 0;
}
Андрей Поляков Профи (651) 1 неделю назад
 #include <iostream> 
#include <cmath>
#include <vector>

const double EPSILON = 1e-7; // Точность для сравнения вещественных чисел

// Функция для вычисления корней кубического уравнения по формуле Виета
std::vector<double> solveCubic(double a, double b, double c, double d) {
std::vector<double> roots;

// Приведём уравнение к виду x^3 + Ax^2 + Bx + C = 0
double A = b / a;
double B = c / a;
double C = d / a;

// Вычислим вспомогательные значения
double Q = (3 * B - A * A) / 9;
double R = (9 * A * B - 27 * C - 2 * A * A * A) / 54;
double D = Q * Q * Q + R * R; // Дискриминант

if (D > EPSILON) { // Один действительный корень
double S = std::cbrt(R + std::sqrt(D));
double T = std::cbrt(R - std::sqrt(D));
roots.push_back(-A / 3 + S + T);
} else if (std::abs(D) < EPSILON) { // Все корни действительны, по крайней мере два из них равны
double S = std::cbrt(R);
roots.push_back(-A / 3 + 2 * S);
roots.push_back(-A / 3 - S);
} else { // Три различных действительных корня
double theta = std::acos(R / std::sqrt(-Q * Q * Q));
roots.push_back(2 * std::sqrt(-Q) * std::cos(theta / 3) - A / 3);
roots.push_back(2 * std::sqrt(-Q) * std::cos((theta + 2 * M_PI) / 3) - A / 3);
roots.push_back(2 * std::sqrt(-Q) * std::cos((theta + 4 * M_PI) / 3) - A / 3);
}

return roots;
}

int main() {
// Коэффициенты первой кривой y = px^3 + ox^2 + nx + m
double p, o, n, m;
std::cout << "Введите коэффициенты первой кривой (p, o, n, m): ";
std::cin >> p >> o >> n >> m;

// Коэффициенты второй кривой y = lx^3 + wx + v
double l, w, v;
std::cout << "Введите коэффициенты второй кривой (l, w, v): ";
std::cin >> l >> w >> v;

// Составим кубическое уравнение для нахождения точек пересечения
double a = p - l;
double b = o;
double c = n - w;
double d = m - v;

// Решим кубическое уравнение
std::vector<double> xRoots = solveCubic(a, b, c, d);

if (xRoots.empty()) {
std::cout << "Кривые не пересекаются.\n";
} else {
std::cout << "Точки пересечения:\n";
for (double x : xRoots) {
double y = p * x * x * x + o * x * x + n * x + m;
std::cout << "x = " << x << ", y = " << y << "\n";
}
}

return 0;
}
Похожие вопросы