#include #include #include #include int main() { // Координаты точек A(-6, 4), B(-2, -2), C(-1, -4), D(2, 3) int ax = -6, ay = 4, bx = -2, by = -2; int cx = -1, cy = -4, dx = 2, dy = 3; // Вектор a с координатами (B-A) и вектор b с координатами (D-C) int vecA_x = bx - ax; int vecA_y = by - ay; int vecB_x = dx - cx; int vecB_y = dy - cy; // Умножаем вектор a на 2 int vec2A_x = 2 * vecA_x; int vec2A_y = 2 * vecA_y; // Скалярное произведение int scalarProduct = vec2A_x * vecB_x + vec2A_y * vecB_y; // Открываем файл для записи FILE *file = fopen("Ответ.txt", "w"); if (file != NULL) { fprintf(file, "Solution to the scalar product task:\n"); fprintf(file, "Vector A: (%d, %d)\n", ax, ay); fprintf(file, "Vector B: (%d, %d)\n", bx, by); fprintf(file, "Vector C: (%d, %d)\n", cx, cy); fprintf(file, "Vector D: (%d, %d)\n", dx, dy); fprintf(file, "Scalar product of 2a and b: %d\n", scalarProduct); fclose(file); // Закрываем файл } else { printf("Error opening file!\n"); } // Инициализация графики int gd = DETECT, gm; initgraph(&gd, &gm, ""); // Масштабирование int scale = 30; // Шаг сетки // Смещаем начало координат в ближайшую клеточку int origin_x = (getmaxx() / 2) / scale * scale; // Ближайшая клетка по x int origin_y = (getmaxy() / 2) / scale * scale; // Ближайшая клетка по y // Рисуем клеточную сетку setcolor(12); // Цвет для сетки for (int i = 0; i < getmaxx(); i += scale) { line(i, 0, i, getmaxy()); // Вертикальные линии } for (int i = 0; i < getmaxy(); i += scale) { line(0, i, getmaxx(), i); // Горизонтальные линии } // Рисуем оси координат, смещенные к ближайшей клетке setcolor(5); line(0, origin_y, getmaxx(), origin_y); // Ось X line(origin_x, 0, origin_x, getmaxy()); // Ось Y // Рисуем вектор AB из точки A setcolor(RED); // Цвет для вектора AB line(origin_x + ax * scale, origin_y - ay * scale, origin_x + bx * scale, origin_y - by * scale); // Рисуем вектор CD из точки C setcolor(BLUE); // Цвет для вектора CD line(origin_x + cx * scale, origin_y - cy * scale, origin_x + dx * scale, origin_y - dy * scale); // Подписи точек A, B, C, D (как на примере) setcolor(WHITE); // Вернуть белый цвет для подписей outtextxy(origin_x + ax * scale - 20, origin_y - ay * scale, "A"); outtextxy(origin_x + bx * scale + 10, origin_y - by * scale + 5, "B"); outtextxy(origin_x + cx * scale - 20, origin_y - cy * scale, "C"); outtextxy(origin_x + dx * scale + 10, origin_y - dy * scale + 5, "D"); // Формируем полное решение в виде текста char solutionText[500]; sprintf(solutionText, "Решение:\n" "A(%d, %d), B(%d, %d)\n" "C(%d, %d), D(%d, %d)\n" "2a = (2*(%d, %d))\n" "b = (%d, %d)\n" "Ответ = %d", ax, ay, bx, by, cx, cy, dx, dy, vecA_x, vecA_y, vecB_x, vecB_y, scalarProduct); // Вывод решения в правом верхнем углу int screen_width = getmaxx(); // Получаем ширину экрана int line_height = 15; // Высота строки int y_offset = 10; // Начальная позиция по Y char *line = strtok(solutionText, "\n"); while (line != NULL) { outtextxy(screen_width - 300, y_offset, line); // Выводим строку y_offset += line_height; // Смещаемся по Y line = strtok(NULL, "\n"); } // Ожидание нажатия клавиши getch(); closegraph(); return 0; }