//решить задачу для нахождения корней квадратного уравнения средствами языка си. // //коэффициенты находятся в текстовом файле(разделителями могут быть как знак пробела, так и перенос строки) // //коэффициенты могут быть вещественными(но если вы претендуете на оценку "Удовлетворительно", то достаточно решить эту задачу для целочисленных коэффициентов) // //сама программа должна учитывать и корректно обрабатывать все возможные исключительные ситуации, связанны с коэффициентами(например, если некоторые из коэффициентов равны 0).а также осуществлять проверку на корректный ввод(введены неполные данные или нечисловые символы) // //корни уравнения должны быть записаны в другой текстовый файл.помимо самих корней должна быть записана и справочная информация(например о количестве корней, дискриминанте).если действительных корней нет, то это также должно быть отражено в файле с результатом. // //все пути к используемым файлам должны быть относительными. // //в качестве ответа прислать текстовый файл с программным кодом решенной задачи. #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include int is_valid_double(const char* str) { char* endptr; // Проверяем, можно ли преобразовать строку в число типа double strtod(str, &endptr); // Если endptr указывает на начало строки или не на конец строки, значит, это не число return *endptr == '\0' && endptr != str; } int main() { system("chcp 1251>nul"); // С помощью переменной file будем осуществлять доступ к файлу FILE* file; // Открываем текстовый файл с правами на чтение file = fopen("test.txt", "r"); double a, b, c; if (file == NULL) { fprintf(stderr, "Ошибка открытия файла для чтения коэффициентов.\n"); return 1; } char line[256]; int count = 0; // Считываем значения из файла по строкам while (fgets(line, sizeof(line), file) != NULL) { char* token = strtok(line, " \n"); while (token != NULL) { if (is_valid_double(token)) { if (count == 0) { a = strtod(token, NULL); } else if (count == 1) { b = strtod(token, NULL); } else if (count == 2) { c = strtod(token, NULL); } count++; } else { fprintf(stderr, "Ошибка: '%s' не является допустимым числом.\n", token); fclose(file); return 1; } token = strtok(NULL, " \n"); } } // Закрываем файл fclose(file); printf("Коэффициенты: a = %lf, b = %lf, c = %lf\n", a, b, c); double D = b * b - 4 * a * c; // Открываем файл для записи результатов FILE* file1 = fopen("otvet.txt", "w"); if (file1 == NULL) { fprintf(stderr, "Ошибка открытия файла для записи результатов.\n"); return 1; } if (D > 0) { double x1 = (-b + sqrt(D)) / (2 * a); double x2 = (-b - sqrt(D)) / (2 * a); fprintf(file1, "Корни уравнения: %.2f и %.2f\n", x1, x2); } else if (D == 0) { double x = -b / (2 * a); fprintf(file1, "Корень уравнения: %.2f\n", x); } else { fprintf(file1, "Нет действительных корней\n"); } fprintf(file1, "Дискриминант: %.2f\n", D); fclose(file1); _getch(); return 0; }