6 Задание теперь работает
This commit is contained in:
185
main.cpp
185
main.cpp
@@ -7,6 +7,8 @@
|
||||
#include <windows.h>
|
||||
#define _USE_MATH_DEFINES
|
||||
#include <cmath>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
const double PI = 3.141592653589793238463;
|
||||
using namespace std;
|
||||
|
||||
@@ -57,7 +59,12 @@ void z3() {
|
||||
double length, width;
|
||||
cout << "Введите длину и ширину прямоугольника: ";
|
||||
cin >> length >> width;
|
||||
if (length > 0 and width > 0) {
|
||||
cout << "Площадь прямоугольника: " << rectangleArea(length, width) << endl;
|
||||
}
|
||||
else {
|
||||
cout << "отрицательное число";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
@@ -74,7 +81,12 @@ void z3() {
|
||||
double radius;
|
||||
cout << "Введите радиус круга: ";
|
||||
cin >> radius;
|
||||
cout << "Площадь круга: " << circleArea(radius) << endl;
|
||||
if (radius > 0) {
|
||||
cout << "Площдь круга: " << circleArea(radius) << endl;
|
||||
}
|
||||
else {
|
||||
cout << "отрицательное число";
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@@ -96,10 +108,10 @@ void z4() {
|
||||
int dx = x - centerX;
|
||||
int dy = y - centerY;
|
||||
if (dx * dx + dy * dy <= circleRadius * circleRadius) {
|
||||
SetConsoleTextAttribute(hConsole, 4); // Красный цвет
|
||||
SetConsoleTextAttribute(hConsole, 0x40); // Красный цвет
|
||||
}
|
||||
else {
|
||||
SetConsoleTextAttribute(hConsole, 15); // Белый цвет
|
||||
SetConsoleTextAttribute(hConsole, 0xf0); // Белый цвет
|
||||
}
|
||||
cout << " "; // Два пробела для более широкого изображения
|
||||
}
|
||||
@@ -107,73 +119,84 @@ void z4() {
|
||||
}
|
||||
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) {
|
||||
// Проверяем, соответствует ли строка правилам римских цифр
|
||||
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') {
|
||||
unordered_map<string, bool> 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 (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') {
|
||||
|
||||
|
||||
if (i + 2 < roman.length() && roman[i + 2] == roman[i]) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
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));
|
||||
|
||||
// Проверка на корректность римского числа
|
||||
if (!isValidRoman(roman)) {
|
||||
cerr << "Некорректное римское число." << endl;
|
||||
return;
|
||||
}
|
||||
|
||||
int result = 0; // Итоговое значение
|
||||
int prevValue = 0; // Предыдущее значение для сравнения
|
||||
int result = decodeRoman(roman);
|
||||
cout << "Арабское значение: " << result << endl;
|
||||
|
||||
// Проходим по римскому числу с конца
|
||||
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;
|
||||
@@ -184,42 +207,50 @@ void z2() {
|
||||
|
||||
cout << "Знак числа: " << result << endl;
|
||||
}
|
||||
void z1(){
|
||||
ofstream myfile("numbers.txt");
|
||||
if (!myfile.is_open()) {
|
||||
cout << "Ошибка при открытии файла для записи!" << endl;
|
||||
|
||||
int z1() {
|
||||
// проверка букав не пашет
|
||||
|
||||
ofstream outFile("numbers.txt"); // Открываем файл для записи
|
||||
if (!outFile) {
|
||||
cerr << "Не удалось открыть файл для записи." << endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
float number;
|
||||
cout << "Введите 10 чисел:" << endl;
|
||||
|
||||
|
||||
double a;
|
||||
// Вводим 10 чисел и записываем их в файл через пробел
|
||||
cout << "Введите 10 чисел: ";
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
cout << i + 1 << ": ";
|
||||
while (!(cin >> number)) {
|
||||
|
||||
if (cin >> a) {
|
||||
outFile << a;
|
||||
outFile << " ";
|
||||
}
|
||||
else {
|
||||
cout << "Давай тут без этого вот всего, нраписано 'числа'"<<endl;
|
||||
cin.clear();
|
||||
cin.ignore(10000, '\n');
|
||||
cout << "Неправильный ввод, введите число: ";
|
||||
}
|
||||
myfile << number << " ";
|
||||
cin.ignore();
|
||||
z1();
|
||||
}
|
||||
|
||||
myfile.close();
|
||||
}
|
||||
outFile.close(); // Закрываем файл после записи
|
||||
|
||||
ifstream alienfile("numbers.txt");
|
||||
if (!alienfile.is_open()) {
|
||||
cout << "Ошибка при открытии файла для чтения!" << endl;
|
||||
// Открываем файл для чтения
|
||||
ifstream inFile("numbers.txt");
|
||||
if (!inFile) {
|
||||
cerr << "Не удалось открыть файл для чтения." << endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
float sum = 0;
|
||||
|
||||
while (alienfile >> number) {
|
||||
sum += number;
|
||||
// Считываем числа и суммируем их
|
||||
double sum = 0;
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
inFile >> a;
|
||||
sum += a;
|
||||
}
|
||||
|
||||
alienfile.close();
|
||||
inFile.close(); // Закрываем файл после чтения
|
||||
|
||||
cout << "Сумма чисел: " << sum << endl;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user