КодДляЛинукс.txt 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #include <unistd.h>
  2. #include <sys/stat.h>
  3. #include <fcntl.h>
  4. #include <string.h>
  5. #include <sys/types.h>
  6. #include <math.h>
  7. #ifndef BUF_SIZE
  8. #define BUF_SIZE 1024
  9. #endif
  10. int main()
  11. {
  12. double a, b, c, discriminant, x1, x2;
  13. char buffer[BUF_SIZE];
  14. char result[BUF_SIZE];
  15. int fd_in, fd_out;
  16. ssize_t num_read;
  17. // Открытие файла с коэффициентами для чтения
  18. fd_in = open("coefficients.txt", O_RDWR);
  19. if (fd_in == -1) {
  20. printf("Ошибка открытия файла coefficients.txt");
  21. return 1;
  22. }
  23. printf("Файл для чтения успешно открыт\n");
  24. // Чтение данных из файла
  25. num_read = read(fd_in, buffer, BUF_SIZE);
  26. if (num_read == -1) {
  27. printf("Ошибка чтения из файла");
  28. close(fd_in);
  29. return 1;
  30. }
  31. buffer[num_read] = '\0'; // Завершение строки нулевым символом
  32. printf("Прочитано\n");
  33. close(fd_in);
  34. printf("%s\n", buffer);
  35. if (sscanf(buffer, "%lf %lf %lf", &a, &b, &c) != 3) {
  36. printf("Некорректный формат входных данных\n");
  37. return 1;
  38. }
  39. printf("Коэффициенты: a=%.2f, b=%.2f, c=%.2f\n", a, b, c);
  40. if (a == 0 && b == 0) {
  41. printf("Невозможно решить уравнение, оба коэффициента a и b равны 0\n");
  42. strcpy(result, "Невозможно решить уравнение, оба коэффициента a и b равны 0\n");
  43. return 0;
  44. }
  45. discriminant = b * b - 4 * a * c;
  46. // Формирование результата
  47. if (discriminant > 0) {
  48. x1 = (-b + sqrt(discriminant)) / (2 * a);
  49. x2 = (-b - sqrt(discriminant)) / (2 * a);
  50. snprintf(result, BUF_SIZE, "Дискриминант: %.2f\nКоличество корней: 2\nКорень 1: %.2f\nКорень 2: %.2f\n",
  51. discriminant, x1, x2);
  52. } else if (discriminant == 0) {
  53. x1 = -b / (2 * a);
  54. snprintf(result, BUF_SIZE, "Дискриминант: %.2f\nКоличество корней: 1\nКорень: %.2f\n",
  55. discriminant, x1);
  56. } else {
  57. snprintf(result, BUF_SIZE, "Дискриминант: %.2f\nДействительных корней нет.\n",
  58. discriminant);
  59. }
  60. printf("%s",result);
  61. // Открытие файла для записи результата
  62. fd_out = open("results.txt", O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
  63. if (fd_out == -1) {
  64. printf("Ошибка создания файла results.txt");
  65. return 1;
  66. }
  67. printf("Файл для записи успешно создан\n");
  68. if (write(fd_out, result, strlen(result)) == -1) {
  69. printf("Ошибка записи в файл");
  70. close(fd_out);
  71. return 1;
  72. }
  73. close(fd_out);
  74. printf("Результат записан в файл results.txt\n");
  75. return 0;
  76. }