Загрузка данных
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <clocale>
#include <cmath>
#include <ctime>
#include <cstdlib>
using namespace std;
// 1. Калькулятор базовых операций
void runCalculator() {
cout << "\n--- КАЛЬКУЛЯТОР ---" << endl;
double a = 0, b = 0;
char op = '+';
cout << "Введите первое число: ";
cin >> a;
cout << "Введите операцию (+, -, *, /): ";
cin >> op;
cout << "Введите второе число: ";
cin >> b;
if (op == '+') {
cout << "Результат: " << (a + b) << endl;
} else if (op == '-') {
cout << "Результат: " << (a - b) << endl;
} else if (op == '*') {
cout << "Результат: " << (a * b) << endl;
} else if (op == '/') {
if (b != 0) {
cout << "Результат: " << (a / b) << endl;
} else {
cout << "Ошибка: деление на ноль!" << endl;
}
} else {
cout << "Неизвестная операция!" << endl;
}
}
// 2. Работа с одномерным массивом (генерация, поиск мин/макс, сортировка, сумма)
void runArrayDemo() {
cout << "\n--- РАБОТА С МАССИВОМ ---" << endl;
int n = 0;
cout << "Введите размер массива (от 1 до 100): ";
cin >> n;
if (n <= 0 || n > 100) {
cout << "Некорректный размер, установлен размер по умолчанию: 10" << endl;
n = 10;
}
vector<int> arr(n);
srand(static_cast<unsigned int>(time(0)));
cout << "Сгенерированный массив: ";
int sum = 0;
for (int i = 0; i < n; i++) {
arr[i] = rand() % 100 - 20; // числа от -20 до 79
cout << arr[i] << " ";
sum += arr[i];
}
cout << endl;
int minVal = arr[0];
int maxVal = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] < minVal) minVal = arr[i];
if (arr[i] > maxVal) maxVal = arr[i];
}
double avg = static_cast<double>(sum) / n;
cout << "Сумма элементов: " << sum << endl;
cout << "Среднее арифметическое: " << avg << endl;
cout << "Минимум: " << minVal << ", Максимум: " << maxVal << endl;
// Сортировка пузырьком (классика для лаб)
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
cout << "Отсортированный массив: ";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
// 3. Работа с двумерным массивом (матрицей)
void runMatrixDemo() {
cout << "\n--- РАБОТА С МАТРИЦЕЙ ---" << endl;
int rows = 3, cols = 3;
cout << "Введите количество строк и столбцов (например, 3 3): ";
cin >> rows >> cols;
if (rows <= 0 || rows > 20 || cols <= 0 || cols > 20) {
cout << "Размер скорректирован до 3x3." << endl;
rows = 3;
cols = 3;
}
vector<vector<int>> matrix(rows, vector<int>(cols));
srand(static_cast<unsigned int>(time(0)));
cout << "\nИсходная матрица:\n";
int mainDiagSum = 0;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
matrix[i][j] = rand() % 50 + 1;
cout << matrix[i][j] << "\t";
if (i == j) {
mainDiagSum += matrix[i][j];
}
}
cout << endl;
}
if (rows == cols) {
cout << "Сумма элементов главной диагонали: " << mainDiagSum << endl;
}
}
// 4. Работа со строками
void runStringDemo() {
cout << "\n--- РАБОТА СО СТРОКОЙ ---" << endl;
cout << "Введите любую строку (на английском или русском): ";
string text;
cin >> ws; // Очистка пробелов и переводов строки из буфера
getline(cin, text);
cout << "Вы ввели: " << text << endl;
cout << "Длина строки (в байтах/символах): " << text.length() << endl;
string reversed = text;
reverse(reversed.begin(), reversed.end());
cout << "Строка наоборот: " << reversed << endl;
}
// 5. Решение квадратного уравнения ax^2 + bx + c = 0
void runQuadraticSolver() {
cout << "\n--- КВАДРАТНОЕ УРАВНЕНИЕ (ax^2 + bx + c = 0) ---" << endl;
double a = 0, b = 0, c = 0;
cout << "Введите коэффициенты a, b, c через пробел: ";
cin >> a >> b >> c;
if (a == 0) {
if (b != 0) {
cout << "Это линейное уравнение. Корень x = " << (-c / b) << endl;
} else {
cout << "Некорректное уравнение (a = 0 и b = 0)." << endl;
}
return;
}
double d = b * b - 4 * a * c;
cout << "Дискриминант D = " << d << endl;
if (d > 0) {
double x1 = (-b + sqrt(d)) / (2 * a);
double x2 = (-b - sqrt(d)) / (2 * a);
cout << "Два корня: x1 = " << x1 << ", x2 = " << x2 << endl;
} else if (d == 0) {
double x = -b / (2 * a);
cout << "Один корень: x = " << x << endl;
} else {
cout << "Действительных корней нет (D < 0)." << endl;
}
}
int main() {
// Включаем поддержку русского языка в консоли
setlocale(LC_ALL, "Russian");
int choice = -1;
while (choice != 0) {
cout << "\n==========================================" << endl;
cout << " УНИВЕРСАЛЬНАЯ ПРОГРАММА НА C++ " << endl;
cout << "==========================================" << endl;
cout << "1. Калькулятор (+, -, *, /)" << endl;
cout << "2. Одномерный массив (генерация, сортировка, сумма)" << endl;
cout << "3. Двумерный массив / Матрица" << endl;
cout << "4. Обработка строк" << endl;
cout << "5. Решение квадратного уравнения" << endl;
cout << "0. Выход из программы" << endl;
cout << "------------------------------------------" << endl;
cout << "Выберите пункт меню: ";
if (!(cin >> choice)) {
// Защита от ввода букв вместо цифр
cin.clear();
cin.ignore(10000, '\n');
cout << "Ошибка ввода! Пожалуйста, введите число от 0 до 5." << endl;
choice = -1;
continue;
}
switch (choice) {
case 1:
runCalculator();
break;
case 2:
runArrayDemo();
break;
case 3:
runMatrixDemo();
break;
case 4:
runStringDemo();
break;
case 5:
runQuadraticSolver();
break;
case 0:
cout << "Выход из программы..." << endl;
break;
default:
cout << "Неверный пункт меню! Попробуйте снова." << endl;
break;
}
}
cout << "\nНажмите Enter, чтобы закрыть окно...";
cin.ignore(10000, '\n');
cin.get();
return 0;
}