#include #include #include #include void vvod(int task, float* arguments) { if (task == 1) { printf_s("Введите коэффициенты a, b и c: "); while (scanf_s("%f %f %f", &arguments[0], &arguments[1], &arguments[2]) != 3) { printf("Ошибка ввода. Пожалуйста, введите три числа: "); while (getchar() != '\n'); } } else if (task == 2) { printf_s("Введите коэффициенты системы (a1, b1, c1, a2, b2, c2): "); while (scanf_s("%f %f %f %f %f %f", &arguments[0], &arguments[1], &arguments[2], &arguments[3], &arguments[4], &arguments[5]) != 6) { printf_s("Ошибка ввода. Пожалуйста, введите шесть чисел: "); while (getchar() != '\n'); } } else if (task == 3) { printf_s("Введите число для вычисления факториала: "); while (scanf_s("%f", &arguments[0]) != 1 || arguments[0] < 0 || arguments[0] != (float)arguments[0]) { printf_s("Ошибка ввода. Пожалуйста, введите неотрицательное целое число: "); while (getchar() != '\n'); } } } void vivod(int task, float* x, int numRoots) { if (task == 1) { if (numRoots == 1) { printf_s("Корень уравнения: %.2f\n", x[0]); } else if (numRoots == 2) { printf_s("Корни уравнения: %.2f\n%.2f\n", x[0], x[1]); } else if (numRoots == 3) { printf_s("Аргументы не могут быть отрицательными.\n"); } else { printf_s("Нет действительных корней.\n"); } } else if (task == 2) { if (numRoots == 0) { printf_s("Решение системы: x = %.2f, y = %.2f\n", x[0], x[1]); } else { printf_s("Система не имеет единственного решения.\n"); } } else if (task == 3) { printf_s("Факториал числа %.2f равен: %.20f\n", x[0], x[1]); } } int Task1(float* arguments, float* x) { float a = arguments[0]; float b = arguments[1]; float c = arguments[2]; float D = b * b - 4 * a * c; if (a == 0 || b == 0 || c == 0) { return 3; } else if (D > 0) { x[0] = (-b + sqrt(D)) / (2 * a); x[1] = (-b - sqrt(D)) / (2 * a); return 2; // Два корня } else if (D == 0) { x[0] = -b / (2 * a); return 1; // Один корень } else { return 0; // Нет действительных корней } } int Task2(float* arguments, float* x) { float a1 = arguments[0], b1 = arguments[1], c1 = arguments[2]; float a2 = arguments[3], b2 = arguments[4], c2 = arguments[5]; float D = a1 * b2 - a2 * b1; if (D != 0) { // Решение системы x[0] = (c1 * b2 - c2 * b1) / D; // x x[1] = (a1 * c2 - a2 * c1) / D; // y return 0; } else { return 1; } } double Task3(float n) { if (n == 0 || n == 1) { return 1; } double result = 1; for (int i = 2; i <= n; i++) { result *= i; } return result; } int main() { float arguments[6]; float roots[2]; // Массив для хранения корней int task; setlocale(LC_ALL, "Russian"); printf_s("Введите номер задания (1 - квадратное уравнение, 2 - система уравнений, 3 - факториал): "); scanf_s("%d", &task); vvod(task, arguments); if (task == 1) { int numRoots = Task1(arguments, roots); vivod(task, roots, numRoots); } else if (task == 2) { Task2(arguments, roots); int numRoots = Task2(arguments, roots); vivod(task, roots, numRoots); } else if (task == 3) { int n = (int)arguments[0]; roots[0] = n; // Сохраняем число для вывода roots[1] = Task3(n); // Вычисляем факториал vivod(task, roots, 0); } return 0; }