// dz41.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы. // #include #include #include #include #define _USE_MATH_DEFINES #include const double PI = 3.141592653589793238463; using namespace std; int sign(double x) { if (x > 0) { return 1; } else if (x == 0) { return 0; } else { return -1; } } double rectangleArea(double length, double width) { return length * width; } double triangleArea(double a, double b, double c) { // Проверка на существование треугольника if ((a + b > c) && (a + c > b) && (b + c > a)) { // Формула Герона double s = (a + b + c) / 2; return sqrt(s * (s - a) * (s - b) * (s - c)); } else { cout << "Треугольник с такими сторонами не существует." << endl; return 0; } } double circleArea(double radius) { const double PI = 3.14159; return PI * radius * radius; } void z3() { int choice; cout << "Выберите фигуру для расчета площади:\n"; cout << "1. Прямоугольник\n"; cout << "2. Треугольник\n"; cout << "3. Круг\n"; cout << "Ваш выбор: "; cin >> choice; switch (choice) { case 1: { double length, width; cout << "Введите длину и ширину прямоугольника: "; cin >> length >> width; cout << "Площадь прямоугольника: " << rectangleArea(length, width) << endl; break; } case 2: { double a, b, c; cout << "Введите три стороны треугольника: "; cin >> a >> b >> c; double area = triangleArea(a, b, c); if (area > 0) { cout << "Площадь треугольника: " << area << endl; } break; } case 3: { double radius; cout << "Введите радиус круга: "; cin >> radius; cout << "Площадь круга: " << circleArea(radius) << endl; break; } default: cout << "Неверный выбор!" << endl; } } void z4() { HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); const int width = 20; // Ширина флага const int height = 10; // Высота флага const int circleRadius = 3; // Радиус круга const int centerX = width / 2; const int centerY = height / 2; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { // Определяем, находится ли точка (x, y) внутри круга int dx = x - centerX; int dy = y - centerY; if (dx * dx + dy * dy <= circleRadius * circleRadius) { SetConsoleTextAttribute(hConsole, 4); // Красный цвет } else { SetConsoleTextAttribute(hConsole, 15); // Белый цвет } cout << " "; // Два пробела для более широкого изображения } cout << endl; } SetConsoleTextAttribute(hConsole, 15); // Сбрасываем цвет на белый } bool isValidRoman(const string& roman) { // Проверяем, соответствует ли строка правилам римских цифр for (size_t i = 0; i < roman.size(); ++i) { // Ограничиваем последовательности, которые могут предшествовать большим символам if (roman[i] == 'I' && i + 1 < roman.size() && roman[i + 1] != 'V' && roman[i + 1] != 'X' && roman[i + 1] != 'I') { return false; } if (roman[i] == 'X' && i + 1 < roman.size() && roman[i + 1] != 'L' && roman[i + 1] != 'C' && roman[i + 1] != 'X') { return false; } if (roman[i] == 'C' && i + 1 < roman.size() && roman[i + 1] != 'D' && roman[i + 1] != 'M' && roman[i + 1] != 'C') { return false; } } // Проверка на недопустимые повторения (например, IIII, VV, LL и т.д.) string invalidPatterns[] = { "IIII", "VV", "XXXX", "LL", "CCCC", "DD", "MMMM" }; for (const string& pattern : invalidPatterns) { if (roman.find(pattern) != string::npos) { return false; } } return true; } void z6() { string roman; cout << "Введите римское число: "; cin >> roman; // Проверка на корректность римского числа if (!isValidRoman(roman)) { cerr << "Некорректное римское число." << endl; return; } int result = 0; // Итоговое значение int prevValue = 0; // Предыдущее значение для сравнения // Проходим по римскому числу с конца for (int i = roman.size() - 1; i >= 0; --i) { int currentValue = 0; // Определяем значение текущего символа switch (roman[i]) { case 'I': currentValue = 1; break; case 'V': currentValue = 5; break; case 'X': currentValue = 10; break; case 'L': currentValue = 50; break; case 'C': currentValue = 100; break; case 'D': currentValue = 500; break; case 'M': currentValue = 1000; break; default: cerr << "Недопустимый символ: " << roman[i] << endl; return; // Прерываем выполнение при некорректном символе } // Добавляем или вычитаем значение в зависимости от предыдущего символа if (currentValue < prevValue) { result -= currentValue; // Вычитаем, если меньшая цифра перед большей (например, IV = 4) } else { result += currentValue; // Добавляем в остальных случаях } prevValue = currentValue; // Обновляем предыдущее значение } cout << "Арабское число: " << result << endl; } void z2() { double number; cout << "Введите число: "; cin >> number; int result = sign(number); // Вызов подпрограммы для определения знака числа cout << "Знак числа: " << result << endl; } void z1(){ ofstream myfile("numbers.txt"); if (!myfile.is_open()) { cout << "Ошибка при открытии файла для записи!" << endl; return 1; } float number; cout << "Введите 10 чисел:" << endl; for (int i = 0; i < 10; ++i) { cout << i + 1 << ": "; while (!(cin >> number)) { cin.clear(); cin.ignore(10000, '\n'); cout << "Неправильный ввод, введите число: "; } myfile << number << " "; } myfile.close(); ifstream alienfile("numbers.txt"); if (!alienfile.is_open()) { cout << "Ошибка при открытии файла для чтения!" << endl; return 1; } float sum = 0; while (alienfile >> number) { sum += number; } alienfile.close(); cout << "Сумма чисел: " << sum << endl; } void z7() { int S1 = 0; int S2 = 0; // Параметры для первого варианта int m1 = 37, i1 = 3, c1 = 64; // Параметры для второго варианта int m2 = 25173, i2 = 13849, c2 = 65537; // Количество итераций int iterations = 100; // Первый вариант cout << "Первый вариант (m = " << m1 << ", i = " << i1 << ", c = " << c1 << "):" << endl; for (int j = 0; j < iterations; ++j) { S1 = (m1 * S1 + i1) % c1; cout << S1 << " "; } cout << endl; // Второй вариант cout << "Второй вариант (m = " << m2 << ", i = " << i2 << ", c = " << c2 << "):" << endl; for (int j = 0; j < iterations; ++j) { S2 = (m2 * S2 + i2) % c2; cout << S2 << " "; } cout << endl; } void showMenu() { cout << "Меню задач:\n"; cout << "1. Файл\n"; cout << "2. Знак числа\n"; cout << "3. Геометрические фигуры\n"; cout << "4. СЛАВА РОССИИ\n"; cout << "6. Автоматный распознаватель\n"; cout << "7. Генератор случайных чисел\n"; cout << "0. Выход\n"; } void launchTasks() { int choice; do { showMenu(); cout << "Выберите номер задачи для запуска (или 0 для выхода): "; cin >> choice; switch (choice) { case 1: z1(); break; case 2: z2(); break; case 3: z3(); break; case 4: z4(); break; case 6: z6(); break; case 7: z7(); break; case 0: cout << "Выход из программы.\n"; break; default: cout << "Ошибка: неверный выбор. Пожалуйста, попробуйте снова.\n"; } cout << endl; } while (choice != 0); } int main() { setlocale(LC_ALL, ""); launchTasks(); return 0; }