#include #include #include #include #include // Для работы с графикой на Windows // Функция для расчета значения y = (x + 4)^2(x + 3) - 6 double func(double x) { return pow((x + 4), 2) * (x + 3) - 6; } int main() { // Инициализация графического режима int gd = DETECT, gm; initgraph(&gd, &gm, ""); // Условие задачи setcolor(WHITE); outtextxy(10, 10, "Найдите наибольшее значение функции y = (x+4)^2(x+3) - 6"); outtextxy(10, 30, "на отрезке [-5, -3.5]."); // Найдем значения функции в граничных точках и критических точках double x1 = -5, x2 = -3.5; double x_critical1 = -4, x_critical2 = -10.0 / 3.0; double y1 = func(x1); double y2 = func(x2); double y_critical1 = func(x_critical1); double y_critical2 = func(x_critical2); // Найдем наибольшее значение double max_value = y1; double max_x = x1; if (y2 > max_value) { max_value = y2; max_x = x2; } if (y_critical1 > max_value) { max_value = y_critical1; max_x = x_critical1; } if (y_critical2 > max_value) { max_value = y_critical2; max_x = x_critical2; } // Вывод решения на экран char solutionText[500]; sprintf(solutionText, "Наибольшее значение функции = %.2f при x = %.2f", max_value, max_x); outtextxy(10, 50, solutionText); // Построение графика функции на интервале [-5, -3.5] setcolor(YELLOW); // Найдем размеры графического окна int width = getmaxx(); int height = getmaxy(); int graph_x_start = 50; // Левый край графика int graph_y_start = height / 2; // Средняя линия для оси y int graph_width = width - 100; // Ширина графика // Установим масштаб по оси X и Y double x_scale = graph_width / (x2 - x1); // Масштаб по X double y_scale = 30; // Масштаб по Y (зависит от функции) // Отображаем оси setcolor(WHITE); line(graph_x_start, 0, graph_x_start, height); // Ось Y line(0, graph_y_start, width, graph_y_start); // Ось X // Разметка (сетка) setcolor(LIGHTGRAY); // Горизонтальные линии (по Y) for (int i = -5; i <= 5; i++) { int y_line_pos = graph_y_start - i * y_scale; line(0, y_line_pos, width, y_line_pos); char label[10]; sprintf(label, "%d", i); outtextxy(graph_x_start - 30, y_line_pos - 5, label); } // Вертикальные линии (по X) for (double i = x1; i <= x2; i += 0.5) { int x_line_pos = graph_x_start + (int)((i - x1) * x_scale); line(x_line_pos, 0, x_line_pos, height); char label[10]; sprintf(label, "%.1f", i); outtextxy(x_line_pos - 10, graph_y_start + 10, label); } // Отрисовка функции setcolor(YELLOW); for (int i = graph_x_start; i < graph_x_start + graph_width; i++) { double x = x1 + (i - graph_x_start) / x_scale; double y = func(x); int graph_y = graph_y_start - (int)(y * y_scale); putpixel(i, graph_y, YELLOW); } // Отмечаем точку максимума int max_graph_x = graph_x_start + (int)((max_x - x1) * x_scale); int max_graph_y = graph_y_start - (int)(max_value * y_scale); setcolor(RED); circle(max_graph_x, max_graph_y, 5); outtextxy(max_graph_x + 10, max_graph_y - 10, "Max"); // Запись решения в файл FILE *file = fopen("Решение_задачи.txt", "w"); if (file == NULL) { printf("Ошибка при открытии файла!\n"); return 1; } fprintf(file, "Наибольшее значение функции на отрезке [-5, -3.5]:\n"); fprintf(file, "Максимум = %.2f при x = %.2f\n", max_value, max_x); fclose(file); printf("Ответ записан в файл 'Решение_задачи.txt'.\n"); // Ожидание ввода для закрытия графического окна getch(); closegraph(); return 0; }