#define _CRT_SECURE_NO_WARNINGS #define WIN32_LEAN_AND_MEAN #include #include #include #include #include int is_valid_double(const char* str) { char* endptr; strtod(str, &endptr); return *endptr == '\0' && endptr != str; } void write_results(const char* filename, double x1, double x2, double D, int root_count) { HANDLE hFile = CreateFile(filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { MessageBox(NULL, "Ошибка открытия файла для записи результатов.", "Ошибка", MB_OK | MB_ICONERROR); return; } char buffer[256]; if (root_count == 2) { sprintf(buffer, "Корни уравнения: %.2f и %.2f\n", x1, x2); } else if (root_count == 1) { sprintf(buffer, "Корень уравнения: %.2f\n", x1); } else { sprintf(buffer, "Нет действительных корней.\n"); } sprintf(buffer + strlen(buffer), "Дискриминант: %.2f\n", D); DWORD written; WriteFile(hFile, buffer, strlen(buffer), &written, NULL); CloseHandle(hFile); } int main() { double a, b, c; char line[256]; int count = 0; // Считываем коэффициенты из файла HANDLE hFile = CreateFile("test.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { MessageBox(NULL, "Ошибка открытия файла для чтения коэффициентов.", "Ошибка", MB_OK | MB_ICONERROR); return 1; } DWORD bytesRead; while (ReadFile(hFile, line, sizeof(line) - 1, &bytesRead, NULL) && bytesRead > 0) { line[bytesRead] = '\0'; 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 { MessageBox(NULL, "Ошибка: Введены некорректные данные.", "Ошибка", MB_OK | MB_ICONERROR); CloseHandle(hFile); return 1; } token = strtok(NULL, " \n"); } } CloseHandle(hFile); // Проверяем коэффициенты if (count < 3) { MessageBox(NULL, "Ошибка: Не достаточно коэффициентов.", "Ошибка", MB_OK | MB_ICONERROR); return 1; } if (a == 0) { MessageBox(NULL, "Ошибка: Коэффициент 'a' не может быть равен 0.", "Ошибка", MB_OK | MB_ICONERROR); return 1; } // Вычисляем дискриминант double D = b * b - 4 * a * c; double x1, x2; int root_count = 0; if (D > 0) { x1 = (-b + sqrt(D)) / (2 * a); x2 = (-b - sqrt(D)) / (2 * a); root_count = 2; } else if (D == 0) { x1 = -b / (2 * a); root_count = 1; } // Записываем результаты в файл write_results("otvet.txt", x1, x2, D, root_count); MessageBox(NULL, "Результаты записаны в файл 'otvet.txt'.", "Готово", MB_OK | MB_ICONINFORMATION); return 0; }