From 8a578e5461850140ae3c25d44d0afd6fd30c9ffe Mon Sep 17 00:00:00 2001 From: oltnd Date: Fri, 1 Nov 2024 22:44:06 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20main.cpp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Не работает флаг, не сделана проверка буква в 1 --- main.cpp | 143 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 101 insertions(+), 42 deletions(-) diff --git a/main.cpp b/main.cpp index 31840e1..5436b4e 100644 --- a/main.cpp +++ b/main.cpp @@ -4,28 +4,13 @@ #include #include #include -#include +#include #define _USE_MATH_DEFINES -#include +#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) { +int sign(double x) { if (x > 0) { return 1; } @@ -36,6 +21,28 @@ int sign(int x) { 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"; @@ -47,7 +54,6 @@ void z3() { switch (choice) { case 1: { - //3 стороны double length, width; cout << "Введите длину и ширину прямоугольника: "; cin >> length >> width; @@ -55,10 +61,13 @@ void z3() { break; } case 2: { - double base, height; - cout << "Введите основание и высоту треугольника: "; - cin >> base >> height; - cout << "Площадь треугольника: " << triangleArea(base, height) << endl; + double a, b, c; + cout << "Введите три стороны треугольника: "; + cin >> a >> b >> c; + double area = triangleArea(a, b, c); + if (area > 0) { + cout << "Площадь треугольника: " << area << endl; + } break; } case 3: { @@ -72,27 +81,66 @@ void z3() { 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; + 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; // Предыдущее значение для сравнения @@ -128,8 +176,7 @@ void z6() { cout << "Арабское число: " << result << endl; } void z2() { - int number; - //0.9 + double number; cout << "Введите число: "; cin >> number; @@ -139,7 +186,7 @@ void z2() { } int z1() { - // проверка букав + // проверка букав не пашет ofstream outFile("numbers.txt"); // Открываем файл для записи if (!outFile) { @@ -148,12 +195,22 @@ int z1() { } int numbers[10]; // Массив для хранения 10 чисел - + int a; // Вводим 10 чисел и записываем их в файл через пробел cout << "Введите 10 чисел: "; for (int i = 0; i < 10; ++i) { - cin >> numbers[i]; - outFile << numbers[i] << " "; + cin >> a; + if (int(a)) { + a >> numbers[i]; + outFile << numbers[i] << " "; + } + else { + cout << "Давай тут без этого вот всего, нраписано 'числа'"<