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

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

Addk Знаток (255), открыт 2 дня назад
Написать программу на си Определить,пересекаютсялилинииy=ax2+bx+cиy=kx+m. Если пересекаются, найти точки пересечения.
Реализация квадратного уравнения в этой программе должна быть вот такая
Пример
#include <math.h>
using namespace std;
int main()
{         double a,b,c,d,x1,x2;
                                                                         //Ввод значений коэффициентов
                                                                         //квадратного уравнения.
                   printf("a="); scanf("%lf",&a);
                          printf("b=");      scanf("%lf",&b);
                   printf("c="); scanf("%lf",&c);
          d=b*b-4*a*c;                                //Вычисление дискриминанта.
          if (d<0)                              //Если дискриминант отрицательный,
                                                             //то вывод сообщения, о том
                                                             //что корней нет,
                   cout<<"Действительных корней нет";
          else
          {//иначе вычисление корней
                   x1=(-b+sqrt(d))/2/a;
                   x2=(-b-sqrt(d))/(2*a);
                                                                         //и вывод их значений.
                   printf("X1=%lf,\tX2=%lf\n",x1,x2);
          }
return 0;}
2 ответа
Снежный Ветер Мастер (1367) 2 дня назад
#include <stdio.h>
#include <math.h>

int main() {
double a, b, c, k, m, d, x1, x2, y1, y2;

// Ввод значений коэффициентов
printf("Введите коэффициенты квадратного уравнения:\n");
printf("a = "); scanf("%lf", &a);
printf("b = "); scanf("%lf", &b);
printf("c = "); scanf("%lf", &c);
printf("Введите коэффициенты линейного уравнения:\n");
printf("k = "); scanf("%lf", &k);
printf("m = "); scanf("%lf", &m);

// Приведение уравнений к квадратному виду: ax^2 + bx + c = kx + m => ax^2 + (b-k)x + (c-m) = 0
double a_new = a;
double b_new = b - k;
double c_new = c - m;

// Вычисление дискриминанта
d = b_new * b_new - 4 * a_new * c_new;

if (d < 0) {
printf("Линии не пересекаются (дискриминант отрицательный).\n");
} else if (d == 0) {
// Одна точка пересечения
x1 = -b_new / (2 * a_new);
y1 = k * x1 + m;
printf("Линии пересекаются в одной точке: (%.2lf; %.2lf)\n", x1, y1);
} else {
// Две точки пересечения
x1 = (-b_new + sqrt(d)) / (2 * a_new);
x2 = (-b_new - sqrt(d)) / (2 * a_new);
y1 = k * x1 + m;
y2 = k * x2 + m;
printf("Линии пересекаются в двух точках:\n");
printf("Точка 1: (%.2lf; %.2lf)\n", x1, y1);
printf("Точка 2: (%.2lf; %.2lf)\n", x2, y2);
}

return 0;
}
Пояснения:

Ввод данных: программа запрашивает у пользователя коэффициенты a, b, c для параболы и k, m для прямой.
Приведение к квадратному уравнению: уравнения y = ax² + bx + c и y = kx + m решаются путем приравнивания правых частей: ax² + bx + c = kx + m. Это уравнение преобразуется в стандартный вид квадратного уравнения: ax² + (b - k)x + (c - m) = 0.
Вычисление дискриминанта: Дискриминант (d) определяет количество точек пересечения.
Обработка результатов:
Если d < 0, линии не пересекаются.
Если d = 0, линии касаются друг друга в одной точке.
Если d > 0, линии пересекаются в двух точках.
Вывод результатов: программа выводит координаты точек пересечения с точностью до двух знаков после запятой.
Скомпилируйте и запустите этот код с помощью компилятора C (например, GCC). Введите значения коэффициентов, и программа выведет результаты. Обратите внимание на обработку случая, когда a равно нулю (в этом случае уравнение вырождается в линейное). В данной версии программы нулевой коэффициент a не обрабатывается отдельно — программа просто попытается решить квадратное уравнение, что может привести к ошибке деления на ноль. Для полного решения следует добавить проверку на a == 0.
Похожие вопросы