withC.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #include "Header.h"
  2. void writeFile(char* path, char* answer)
  3. {
  4. FILE* file = fopen(path, "w");//открытие файла на запись
  5. if (!file) //проверка открылся ли файл
  6. {
  7. printf("Не удалось найти файл\n");//вывод ошибки в консоль
  8. exit(1);//код ошибки
  9. }
  10. fprintf(file, answer);//запись в файл
  11. fclose(file);
  12. }
  13. void withC()
  14. {
  15. printf("\nВведите коэфициенты уравнения:");
  16. char* str = calloc(1000, sizeof(char));
  17. gets(str);
  18. writeFile(PATH, str);
  19. FILE* file = fopen(PATH, "r");//открытие файла на чтение
  20. if (!file) //проверка открылся ли файл
  21. {
  22. printf("Не удалось найти файл\n");//вывод ошибки в консоль
  23. exit(1);//код ошибки
  24. }
  25. float a;
  26. float b;
  27. float c;
  28. int CODE_PARAM = fscanf(file, "%f%f%f", &a, &b, &c);//считывание значений переменной
  29. countArg(CODE_PARAM);//проверка на количество параметров
  30. fclose(file);//закрытие файла
  31. char* answer = calloc(1000,sizeof(char));//открытие файла на запись
  32. float Discriminant = b * b - 4 * c * a;//нахождение дискриминанта
  33. if (Discriminant < 0)//если дискриминант отрицательный
  34. {
  35. printf("Дискриминант меньше 0. Решения нет\n");//вывод ошибки в консоль
  36. sprintf(answer, "Решение вида (%5.3f)*x^2 + (%5.3f)*x + (%5.3f) = 0\nРешения не имеет, поскольку имеет отрицательный дискриминант = %5.3f", a, b, c, Discriminant);//запись информации в новый файл
  37. writeFile(PATH_ANSWER, answer);
  38. exit(3);//код ошибки
  39. }
  40. //проверка первого аргумента на плешивость
  41. if (a == 0)
  42. {
  43. printf("Попытка деления на 0\n");
  44. sprintf(answer, "%s %5.3f %s %5.3f %s %5.3f %s", "Решение вида (", a, ")*x^2 + (", b, ")*x + (", c, ") = 0\n Попытка деления на 0");//запись строки
  45. writeFile(PATH_ANSWER, answer);
  46. exit(4);
  47. }
  48. //решение квадратного уравнения
  49. if (Discriminant == 0)
  50. {
  51. float x = -b / (2 * a);//нахождение корней уравнения
  52. sprintf(answer, "Решение вида (%5.3f)*x^2 + (%5.3f)*x + (%5.3f) = 0 имеет 1 решение \nx = %5.3f\nДискриминант = %5.3f", a, b, c, x, Discriminant);//запись информации в новый файл
  53. writeFile(PATH_ANSWER, answer);
  54. printf("Решение вида (%5.3f)*x^2 + (%5.3f)*x + (%5.3f) = 0 имеет 1 решение \nx = %5.3f\nДискриминант = %5.3f\n", a, b, c, x, Discriminant);
  55. }
  56. else
  57. {
  58. //нахождение корней уравнения
  59. float x1 = (-b + sqrt(Discriminant)) / (2 * a);
  60. float x2 = (-b - sqrt(Discriminant)) / (2 * a);
  61. sprintf(answer, "Решение вида (%5.3f)*x^2 + (%5.3f)*x + (%5.3f) = 0 имеет 2 решения \nx1 = %5.3f, x2 = %5.3f\nДискриминант = %5.3f", a, b, c, x1, x2, Discriminant);//запись информации в новый файл
  62. writeFile(PATH_ANSWER, answer);
  63. printf("Решение вида (%5.3f)*x^2 + (%5.3f)*x + (%5.3f) = 0 имеет 2 решения \nx1 = %5.3f, x2 = %5.3f\nДискриминант = %5.3f\n", a, b, c, x1, x2, Discriminant);
  64. }
  65. }