#define _CRT_SECURE_NO_WARNINGS #include #include #include #include int read_coef(const char* filename, double* a, double* b, double* c) { FILE* input = fopen(filename, "r"); if (input == NULL) { printf("Ошибка, не удалось открыть файл. \n"); return -1; } // Проверка на считывание трех вещественных чисел int count = fscanf(input, "%lf %lf %lf", a, b, c); if (count != 3) { printf("Ошибка, файл должен содержать три числовых значения\n"); fclose(input); return -2; } // Проверка на лишние символы char extra; if (fscanf(input, " %c", &extra) == 1) { printf("Ошибка! Файл содержит лишние символы\n"); fclose(input); return -3; } fclose(input); return 0; // Успешное чтение } int find_roots(double a, double b, double c, double* root1, double* root2) { if (a == 0) { printf("Коэффициент а не может быть равен нулю. Уравнение не является квадратным\n"); return -1; // Ошибка } // Проверка на случаи, когда b или c равны 0 if (b == 0 && c == 0) { printf("Уравнение имеет бесконечно много решений (0 = 0)\n"); return -2; // Бесконечно много решений } else if (b == 0) { printf("Уравнение не имеет действительных корней\n"); return 0; // Нет корней } else if (c == 0) { *root1 = 0; // Первый корень *root2 = -b / a; // Второй корень printf("Корни уравнения: x1 = 0 и x2 = %.2f\n", *root2); return 1; // Один корень (0) и второй корень } double D = b * b - 4 * a * c; // Вычисление дискриминанта if (D > 0) { *root1 = (-b + sqrt(D)) / (2 * a); *root2 = (-b - sqrt(D)) / (2 * a); printf("Два корня: %.2f и %.2f\n", *root1, *root2); printf("Данные успешно записаны в файл!\n"); return 2; // Два корня } else if (D == 0) { *root1 = -b / (2 * a); printf("Один корень: %.2f\n", *root1); printf("Данные успешно записаны в файл!\n"); return 1; // Один корень } else { printf("Корней нет\n"); printf("Данные успешно записаны в файл!\n"); return 0; // Нет корней } } void write_results(const char* filename, double a, double b, double c, double D, double root1, double root2, int num_roots) { FILE* output = fopen(filename, "w"); if (output == NULL) { printf("Ошибка записи файла\n"); return; } fprintf(output, "Коэффициенты уравнения: a = %.2f, b = %.2f, c = %.2f\n", a, b, c); fprintf(output, "Дискриминант D = %.2f\n", D); if (num_roots == 2) { fprintf(output, "Два корня: %.2f и %.2f\n", root1, root2); } else if (num_roots == 1) { fprintf(output, "Корни уравнения: x1 = %.2f и x2 = %.2f\n", root1, root2); } else { fprintf(output, "Корней нет\n"); } fclose(output); } int main() { system("chcp 1251>null"); double a, b, c; int result = read_coef("input.txt", &a, &b, &c); if (result == 0) { printf("Коэффициенты успешно считаны: a = %.2f, b = %.2f, c = %.2f\n", a, b, c); double root1, root2; double D = b * b - 4 * a * c; // Считаем дискриминант int num_roots = find_roots(a, b, c, &root1, &root2); // Получаем количество корней // Записываем результаты в файл write_results("output.txt", a, b, c, D, root1, root2, num_roots); } else { printf("Ошибка при чтении коэффициентов\n"); return -1; } return 0; }