diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..49857c5 --- /dev/null +++ b/main.cpp @@ -0,0 +1,242 @@ +// dz41.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы. +// + +#include +#include +#include +#include +#define _USE_MATH_DEFINES +#include +const double PI = 3.141592653589793238463; +// Функция для вычисления площади прямоугольника +double rectangleArea(double length, double width) { + return length * width; +} + +// Функция для вычисления площади треугольника +double triangleArea(double base, double height) { + return 0.5 * base * height; +} + +// Функция для вычисления площади круга +double circleArea(double radius) { + return PI * radius * radius; +} + +using namespace std; + +int sign(int x) { + if (x > 0) { + return 1; + } + else if (x == 0) { + return 0; + } + else { + return -1; + } +} +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 base, height; + cout << "Введите основание и высоту треугольника: "; + cin >> base >> height; + cout << "Площадь треугольника: " << triangleArea(base, height) << 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); + + SetConsoleTextAttribute(hConsole, 240); + cout << " " << endl; + SetConsoleTextAttribute(hConsole, 16); + cout << " " << endl; + SetConsoleTextAttribute(hConsole, 64); + cout << " " << endl; + + SetConsoleTextAttribute(hConsole, 0); + cout << endl; + SetConsoleTextAttribute(hConsole, 15); + cout << endl; +} +void z6() { + string roman; + cout << "Введите римское число: "; + cin >> roman; + + 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() { + int number; + + cout << "Введите число: "; + cin >> number; + + int result = sign(number); // Вызов подпрограммы для определения знака числа + + cout << "Знак числа: " << result << endl; +} + +int z1() { + + + ofstream outFile("numbers.txt"); // Открываем файл для записи + if (!outFile) { + cerr << "Не удалось открыть файл для записи." << endl; + return 1; + } + + int numbers[10]; // Массив для хранения 10 чисел + + // Вводим 10 чисел и записываем их в файл через пробел + cout << "Введите 10 чисел: "; + for (int i = 0; i < 10; ++i) { + cin >> numbers[i]; + outFile << numbers[i] << " "; + } + outFile.close(); // Закрываем файл после записи + + // Открываем файл для чтения + ifstream inFile("numbers.txt"); + if (!inFile) { + cerr << "Не удалось открыть файл для чтения." << endl; + return 1; + } + + // Считываем числа и суммируем их + int sum = 0; + for (int i = 0; i < 10; ++i) { + inFile >> numbers[i]; + sum += numbers[i]; + } + inFile.close(); // Закрываем файл после чтения + + cout << "Сумма чисел: " << sum << endl; +} +void z7() { + int S1 = 1; + int S2 = 1; + + // Параметры для первого варианта + int m1 = 37, i1 = 3, c1 = 64; + + // Параметры для второго варианта + int m2 = 25173, i2 = 13849, c2 = 65537; + + // Количество итераций + int iterations = 10; + + // Первый вариант + 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; +} + +