main.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <malloc.h>
  4. #include <stdlib.h>
  5. #include <math.h>
  6. int read_coefficients(double* a, double* b, double* c) {
  7. FILE* file;
  8. file = fopen("/home/alex/Рабочий стол/project/koef.txt", "r");
  9. if (file == NULL) {
  10. perror("Ошибка открытия файла koef.txt");
  11. return 1;
  12. }
  13. if (fscanf(file, "%lf %lf %lf", a, b, c) != 3) {
  14. fprintf(stderr, "Ошибка чтения коэффициентов из файла.\n");
  15. fclose(file);
  16. return 1;
  17. }
  18. fclose(file);
  19. return 0;
  20. }
  21. int solve_quadratic_equation(double a, double b, double c, double* x1, double* x2) {
  22. double D = (b * b - 4 * a * c);
  23. if (a == 0) {
  24. if (b == 0) {
  25. if (c == 0) {
  26. return -1;
  27. }
  28. else {
  29. return 0;
  30. }
  31. }
  32. else {
  33. *x1 = -c / b;
  34. return 1;
  35. }
  36. }
  37. else {
  38. if (D > 0) {
  39. *x1 = (-b / (2 * a));
  40. *x2 = (-b / (2 * a));
  41. return 2;
  42. }
  43. else if (D == 0) {
  44. *x1 = -b / (2 * a);
  45. return 1;
  46. }
  47. else {
  48. return 0;
  49. }
  50. }
  51. }
  52. void write_results(double a, double b, double c, double x1, double x2, int kol_kor, double D) {
  53. FILE* file;
  54. file = fopen("/home/alex/Рабочий стол/project/rez.txt", "w");
  55. if (file == NULL) {
  56. perror("Ошибка открытия файла output.txt");
  57. return;
  58. }
  59. fprintf(file, "Коэффициенты уравнения: a = %.2lf, b = %.2lf, c = %.2lf\n", a, b, c);
  60. switch (kol_kor) {
  61. case 0:
  62. fprintf(file, "Действительных корней нет.\n");
  63. break;
  64. case 1:
  65. fprintf(file, "Один корень: x = %.2lf\n", x1);
  66. fprintf(file, "Дискриминант: %.2lf\n", D);
  67. break;
  68. case 2:
  69. fprintf(file, "Два корня: x1 = %.2lf, x2 = %.2lf\n", x1, x2);
  70. fprintf(file, "Дискриминант: %.2lf\n", D);
  71. break;
  72. case -1:
  73. fprintf(file, "Бесконечно много корней.\n");
  74. break;
  75. }
  76. fclose(file);
  77. }
  78. int main() {
  79. double a, b, c, x1, x2;
  80. int kol_kor;
  81. double D;
  82. if (read_coefficients(&a, &b, &c)) {
  83. return 1;
  84. }
  85. kol_kor = solve_quadratic_equation(a, b, c, &x1, &x2);
  86. D = b * b - 4 * a * c;
  87. write_results(a, b, c, x1, x2, kol_kor, D);
  88. return 0;
  89. }