#include #include #include #include #include #include #include #include #include #define BUFFER_SIZE 1024 int main() { double a, b, c, discriminant, x1, x2; char buffer[BUFFER_SIZE]; char result[BUFFER_SIZE]; int fd_in, fd_out; ssize_t num_read; // Открытие файла с коэффициентами для чтения fd_in = open("coefficients.txt", O_RDONLY); if (fd_in == -1) { perror("Ошибка открытия файла coefficients.txt"); return 1; } printf("Файл для чтения успешно открыт\n"); // Чтение данных из файла num_read = read(fd_in, buffer, BUFFER_SIZE); if (num_read == -1) { perror("Ошибка чтения из файла"); close(fd_in); return 1; } buffer[num_read] = '\0'; // Завершение строки нулевым символом close(fd_in); printf("%s\n", buffer); // Парсинг коэффициентов if (sscanf(buffer, "%lf %lf %lf", &a, &b, &c) != 3) { fprintf(stderr, "Некорректный формат входных данных\n"); return 1; } printf("Коэффициенты: a=%.2f, b=%.2f, c=%.2f\n", a, b, c); // Проверка корректности коэффициентов if (a == 0 && b == 0) { fprintf(stderr, "Невозможно решить уравнение, оба коэффициента a и b равны 0\n"); strcpy(result, "Невозможно решить уравнение, оба коэффициента a и b равны 0\n"); goto write_result; } // Вычисление дискриминанта discriminant = b * b - 4 * a * c; // Формирование результата if (discriminant > 0) { x1 = (-b + sqrt(discriminant)) / (2 * a); x2 = (-b - sqrt(discriminant)) / (2 * a); snprintf(result, BUFFER_SIZE, "Дискриминант: %.2f\nКоличество корней: 2\nКорень 1: %.2f\nКорень 2: %.2f\n", discriminant, x1, x2); } else if (discriminant == 0) { x1 = -b / (2 * a); snprintf(result, BUFFER_SIZE, "Дискриминант: %.2f\nКоличество корней: 1\nКорень: %.2f\n", discriminant, x1); } else { snprintf(result, BUFFER_SIZE, "Дискриминант: %.2f\nДействительных корней нет.\n", discriminant); } // Открытие файла для записи результата write_result: fd_out = open("results.txt", O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR); if (fd_out == -1) { perror("Ошибка создания файла results.txt"); return 1; } printf("Файл для записи успешно создан\n"); // Запись результата в файл if (write(fd_out, result, strlen(result)) == -1) { perror("Ошибка записи в файл"); close(fd_out); return 1; } close(fd_out); printf("Результат записан в файл results.txt\n"); return 0; }