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