#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include void writeToFile(HANDLE file, const char* data) { DWORD bytesWritten; WriteFile(file, data, strlen(data), &bytesWritten, NULL); } void readFromFile(HANDLE file, char* buffer, DWORD size) { DWORD bytesRead; ReadFile(file, buffer, size - 1, &bytesRead, NULL); buffer[bytesRead] = '\0'; // Завершение строки } int main() { setlocale(LC_ALL, "Russian"); HANDLE file1 = CreateFile(L"coefOUT.txt", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); HANDLE file = CreateFile(L"coef.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if (file == INVALID_HANDLE_VALUE) { fprintf(stderr, "Ошибка открытия файла coef.txt: %lu\n", GetLastError()); return EXIT_FAILURE; } if (file1 == INVALID_HANDLE_VALUE) { fprintf(stderr, "Ошибка открытия файла coefOUT.txt: %lu\n", GetLastError()); CloseHandle(file); return EXIT_FAILURE; } char line[256]; double coef[3]; int coefCount = 0; // Счетчик коэффициентов while (1) { readFromFile(file, line, sizeof(line)); // Чтение строки из файла // Проверка на конец файла if (strlen(line) == 0) { break; // Если строка пустая, выходим из цикла } char* token = strtok(line, " \n"); // Обработка коэффициентов while (token != NULL) { coef[coefCount] = atof(token); coefCount++; // Если прочитано ровно 3 коэффициента, вычисляем корни if (coefCount == 3) { double x1, x; double a = coef[0]; double b = coef[1]; double c = coef[2]; char output[256]; snprintf(output, sizeof(output), "Коэффициенты: %f %f %f\n", a, b, c); writeToFile(file1, output); double D = b * b - 4 * a * c; if (a == 0 && b == 0 && c == 0) { snprintf(output, sizeof(output), "Аргументы не могут быть отрицательными и равняться нулю\n"); writeToFile(file1, output); } else if (D > 0) { x1 = (-b + sqrt(D)) / (2 * a); x = (-b - sqrt(D)) / (2 * a); snprintf(output, sizeof(output), "Корни: x1 = %f, x2 = %f\n", x1, x); writeToFile(file1, output); } else if (D == 0) { x = -b / (2 * a); snprintf(output, sizeof(output), "Корень: %f\n", x); writeToFile(file1, output); } else { snprintf(output, sizeof(output), "Нет корней\n"); writeToFile(file1, output); } // Сброс счетчика коэффициентов для следующего уравнения coefCount = 0; } token = strtok(NULL, " \n"); } } // Если остались коэффициенты, которые не были обработаны if (coefCount > 0) { char output[256]; snprintf(output, sizeof(output), "Недостаточно коэффициентов для последнего уравнения\n"); writeToFile(file1, output); } CloseHandle(file); CloseHandle(file1); return EXIT_SUCCESS; }