// dz41.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы. // #include #include #include #include #define _USE_MATH_DEFINES #include #include #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; if (length > 0 and width > 0) { cout << "Площадь прямоугольника: " << rectangleArea(length, width) << endl; } else { cout << "отрицательное число"; } 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; if (radius > 0) { cout << "Площдь круга: " << circleArea(radius) << endl; } else { cout << "отрицательное число"; } 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, 0x40); // Красный цвет } else { SetConsoleTextAttribute(hConsole, 0xf0); // Белый цвет } cout << " "; // Два пробела для более широкого изображения } cout << endl; } SetConsoleTextAttribute(hConsole, 15); // Сбрасываем цвет на белый } int romanToArabic(char ch) { switch (ch) { case 'I': return 1; case 'V': return 5; case 'X': return 10; case 'L': return 50; case 'C': return 100; case 'D': return 500; case 'M': return 1000; default: return -1; } } bool isValidRoman(const string& roman) { unordered_map validSubtractive = { {"IV", true}, {"IX", true}, {"XL", true}, {"XC", true}, {"CD", true}, {"CM", true} }; for (int i = 0; i < roman.length() - 1; ++i) { int currValue = romanToArabic(roman[i]); int nextValue = romanToArabic(roman[i + 1]); if (!(roman[i] == 'I' || roman[i] == 'V' || roman[i] == 'X' || roman[i] == 'L' || roman[i] == 'C' || roman[i] == 'D' || roman[i] == 'M')) return false; if (currValue < nextValue) { string combo = string(1, roman[i]) + string(1, roman[i + 1]); if (validSubtractive.find(combo) == validSubtractive.end()) { return false; } if (i + 2 < roman.length() && roman[i + 2] == roman[i]) { return false; } } } return true; } int decodeRoman(const string& roman) { int total = 0; int prevValue = 0; for (int i = roman.length() - 1; i >= 0; --i) { int currValue = romanToArabic(roman[i]); if (currValue < prevValue) { total -= currValue; } else { total += currValue; } prevValue = currValue; } return total; } void z6() { string roman; cout << "Введите римское число: "; bool check; do { cin >> roman; check = isValidRoman(roman); if (!check) cout << "Число невалидное" << endl; } while (!isValidRoman(roman)); int result = decodeRoman(roman); cout << "Арабское значение: " << result << endl; } void z2() { double number; cout << "Введите число: "; cin >> number; int result = sign(number); // Вызов подпрограммы для определения знака числа cout << "Знак числа: " << result << endl; } int z1() { // проверка букав не пашет ofstream outFile("numbers.txt"); // Открываем файл для записи if (!outFile) { cerr << "Не удалось открыть файл для записи." << endl; return 1; } double a; // Вводим 10 чисел и записываем их в файл через пробел cout << "Введите 10 чисел: "; for (int i = 0; i < 10; ++i) { if (cin >> a) { outFile << a; outFile << " "; } else { cout << "Давай тут без этого вот всего, нраписано 'числа'"<> a; sum += a; } inFile.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; }