forLinux.txt 3.3 KB

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