Добавить main.cpp

This commit is contained in:
oltnd
2024-10-26 17:48:46 +03:00
parent bdbcb51ea4
commit 3b083458e2

242
main.cpp Normal file
View File

@@ -0,0 +1,242 @@
// dz41.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
//
#include <iostream>
#include <fstream>
#include <numeric>
#include <Windows.h>
#define _USE_MATH_DEFINES
#include<cmath>
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;
}