12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <sys/stat.h>
- #include <sys/types.h>
- #include <errno.h>
- #include <string.h>
- #include <math.h>
- #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;
- }
|