Files
dz4/main.cpp
2024-10-26 18:18:49 +03:00

244 lines
7.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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: {
//3 стороны
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;
//0.9
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 = 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;
}