Загрузка данных
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <iomanip>
#include <cmath>
#include <limits>
using namespace std;
// Функция для округления (для C++98)
double myRound(double x) {
if (x >= 0) return floor(x + 0.5);
else return ceil(x - 0.5);
}
// Функция для очистки экрана
void clearScreen() {
system("cls");
}
// Функция для паузы
void pause() {
cout << "\n------------------------------------------¬\n";
cout << "¦ Нажмите Enter для продолжения... ¦\n";
cout << "L------------------------------------------";
cin.ignore();
cin.get();
}
// Функция для проверки диапазона
void checkRange(int &minVal, int &maxVal) {
if (minVal > maxVal) {
cout << "\n? Ошибка: минимум не может быть больше максимума!\n";
cout << "Меняю их местами.\n";
int temp = minVal;
minVal = maxVal;
maxVal = temp;
}
}
void checkRange(double &minVal, double &maxVal) {
if (minVal > maxVal) {
cout << "\n? Ошибка: минимум не может быть больше максимума!\n";
cout << "Меняю их местами.\n";
double temp = minVal;
minVal = maxVal;
maxVal = temp;
}
}
void checkRange(char &minVal, char &maxVal) {
if (minVal > maxVal) {
cout << "\n? Ошибка: минимум не может быть больше максимума!\n";
cout << "Меняю их местами.\n";
char temp = minVal;
minVal = maxVal;
maxVal = temp;
}
}
// ====================== ЦЕЛЫЕ ЧИСЛА ======================
void processIntegerArray() {
int dimType;
cout << "\n------------------------------------------¬\n";
cout << "¦ РАБОТА С ЦЕЛЫМИ ЧИСЛАМИ ¦\n";
cout << "+-----------------------------------------+\n";
cout << "¦ 1. Одномерный массив ¦\n";
cout << "¦ 2. Двумерный массив ¦\n";
cout << "L------------------------------------------\n";
cout << "Ваш выбор: ";
cin >> dimType;
if (dimType == 1) {
int size;
cout << "\n> Введите размер одномерного массива: ";
cin >> size;
int minVal, maxVal;
cout << "> Введите диапазон случайных значений\n";
cout << " Минимум: ";
cin >> minVal;
cout << " Максимум: ";
cin >> maxVal;
checkRange(minVal, maxVal);
vector<int> arr(size);
cout << "\n---------- СГЕНЕРИРОВАННЫЙ МАССИВ ---------¬\n";
cout << "¦ ";
for (int i = 0; i < size; i++) {
arr[i] = minVal + rand() % (maxVal - minVal + 1);
cout << setw(4) << arr[i] << " ";
}
cout << "¦\n";
cout << "L------------------------------------------\n";
int choice;
do {
cout << "\n---------------- МЕНЮ (1D массив) ---------------¬\n";
cout << "¦ 1. Найти максимум и его позиции ¦\n";
cout << "¦ 2. Найти минимум и его позиции ¦\n";
cout << "¦ 3. Найти среднее значение (округлённое) ¦\n";
cout << "¦ 0. Вернуться в главное меню ¦\n";
cout << "L----------------------------------------------\n";
cout << "Ваш выбор: ";
cin >> choice;
if (choice == 1) {
int maxValArr = arr[0];
for (int i = 0; i < size; i++) {
if (arr[i] > maxValArr) maxValArr = arr[i];
}
cout << "\n----------- РЕЗУЛЬТАТ ----------¬\n";
cout << "¦ Максимум: " << setw(6) << maxValArr << " ¦\n";
cout << "¦ Позиции (по порядку): ";
for (int i = 0; i < size; i++) {
if (arr[i] == maxValArr) cout << i + 1 << " ";
}
cout << " ¦\n";
cout << "L----------------------------------\n";
}
else if (choice == 2) {
int minValArr = arr[0];
for (int i = 0; i < size; i++) {
if (arr[i] < minValArr) minValArr = arr[i];
}
cout << "\n----------- РЕЗУЛЬТАТ ----------¬\n";
cout << "¦ Минимум: " << setw(6) << minValArr << " ¦\n";
cout << "¦ Позиции (по порядку): ";
for (int i = 0; i < size; i++) {
if (arr[i] == minValArr) cout << i + 1 << " ";
}
cout << " ¦\n";
cout << "L----------------------------------\n";
}
else if (choice == 3) {
double sum = 0;
for (int i = 0; i < size; i++) sum += arr[i];
int avg = (int)myRound(sum / size);
int count = 0;
for (int i = 0; i < size; i++) if (arr[i] == avg) count++;
cout << "\n----------- РЕЗУЛЬТАТ ----------¬\n";
cout << "¦ Среднее (округл.): " << setw(5) << avg << " ¦\n";
cout << "¦ Повторяется: " << setw(5) << count << " раз(а) ¦\n";
cout << "L----------------------------------\n";
}
} while (choice != 0);
}
else if (dimType == 2) {
int rows, cols;
cout << "\n> Введите количество строк: ";
cin >> rows;
cout << "> Введите количество столбцов: ";
cin >> cols;
int minVal, maxVal;
cout << "> Введите диапазон случайных значений\n";
cout << " Минимум: ";
cin >> minVal;
cout << " Максимум: ";
cin >> maxVal;
checkRange(minVal, maxVal);
vector<vector<int> > matrix(rows, vector<int>(cols));
cout << "\n---------- СГЕНЕРИРОВАННАЯ МАТРИЦА ---------¬\n";
for (int i = 0; i < rows; i++) {
cout << "¦ ";
for (int j = 0; j < cols; j++) {
matrix[i][j] = minVal + rand() % (maxVal - minVal + 1);
cout << setw(5) << matrix[i][j];
}
cout << " ¦\n";
}
cout << "L------------------------------------------\n";
int choice;
do {
cout << "\n---------------- МЕНЮ (2D массив) ---------------¬\n";
cout << "¦ 1. Найти максимум и его позиции ¦\n";
cout << "¦ 2. Найти минимум и его позиции ¦\n";
cout << "¦ 3. Среднее арифметическое по строкам/столбцам¦\n";
cout << "¦ 4. Среднее значение (округлённое) ¦\n";
cout << "¦ 0. Вернуться в главное меню ¦\n";
cout << "L----------------------------------------------\n";
cout << "Ваш выбор: ";
cin >> choice;
if (choice == 1) {
int maxValArr = matrix[0][0];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (matrix[i][j] > maxValArr) maxValArr = matrix[i][j];
}
}
cout << "\n----------- РЕЗУЛЬТАТ ----------¬\n";
cout << "¦ Максимум: " << setw(5) << maxValArr << " ¦\n";
cout << "¦ Позиции (строка,столбец): ";
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (matrix[i][j] == maxValArr) cout << "(" << i + 1 << "," << j + 1 << ") ";
}
}
cout << "¦\n";
cout << "L----------------------------------\n";
}
else if (choice == 2) {
int minValArr = matrix[0][0];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (matrix[i][j] < minValArr) minValArr = matrix[i][j];
}
}
cout << "\n----------- РЕЗУЛЬТАТ ----------¬\n";
cout << "¦ Минимум: " << setw(5) << minValArr << " ¦\n";
cout << "¦ Позиции (строка,столбец): ";
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (matrix[i][j] == minValArr) cout << "(" << i + 1 << "," << j + 1 << ") ";
}
}
cout << "¦\n";
cout << "L----------------------------------\n";
}
else if (choice == 3) {
cout << "\n---------- СРЕДНЕЕ ПО СТРОКАМ ---------¬\n";
for (int i = 0; i < rows; i++) {
double sum = 0;
for (int j = 0; j < cols; j++) sum += matrix[i][j];
cout << "¦ Строка " << setw(2) << i + 1 << ": " << fixed << setprecision(2) << setw(8) << sum / cols << " ¦\n";
}
cout << "+-----------------------------------------+\n";
cout << "¦ СРЕДНЕЕ ПО СТОЛБЦАМ ¦\n";
for (int j = 0; j < cols; j++) {
double sum = 0;
for (int i = 0; i < rows; i++) sum += matrix[i][j];
cout << "¦ Столбец " << setw(2) << j + 1 << ": " << fixed << setprecision(2) << setw(8) << sum / rows << " ¦\n";
}
cout << "L------------------------------------------\n";
}
else if (choice == 4) {
double sum = 0;
int total = rows * cols;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) sum += matrix[i][j];
}
int avg = (int)myRound(sum / total);
int count = 0;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (matrix[i][j] == avg) count++;
}
}
cout << "\n----------- РЕЗУЛЬТАТ ----------¬\n";
cout << "¦ Среднее (округл.): " << setw(5) << avg << " ¦\n";
cout << "¦ Повторяется: " << setw(5) << count << " раз(а) ¦\n";
cout << "L----------------------------------\n";
}
} while (choice != 0);
}
}
// ====================== ВЕЩЕСТВЕННЫЕ ЧИСЛА ======================
void processRealArray() {
int precision;
cout << "\n> Введите количество знаков после запятой: ";
cin >> precision;
int dimType;
cout << "\n------------------------------------------¬\n";
cout << "¦ РАБОТА С ВЕЩЕСТВЕННЫМИ ЧИСЛАМИ ¦\n";
cout << "+-----------------------------------------+\n";
cout << "¦ 1. Одномерный массив ¦\n";
cout << "¦ 2. Двумерный массив ¦\n";
cout << "L------------------------------------------\n";
cout << "Ваш выбор: ";
cin >> dimType;
if (dimType == 1) {
int size;
cout << "\n> Введите размер одномерного массива: ";
cin >> size;
double minVal, maxVal;
cout << "> Введите диапазон случайных значений\n";
cout << " Минимум: ";
cin >> minVal;
cout << " Максимум: ";
cin >> maxVal;
checkRange(minVal, maxVal);
vector<double> arr(size);
cout << fixed << setprecision(precision);
cout << "\n---------- СГЕНЕРИРОВАННЫЙ МАССИВ ---------¬\n";
cout << "¦ ";
for (int i = 0; i < size; i++) {
arr[i] = minVal + (double)rand() / RAND_MAX * (maxVal - minVal);
cout << setw(8) << arr[i] << " ";
}
cout << "¦\n";
cout << "L------------------------------------------\n";
int choice;
do {
cout << "\n---------------- МЕНЮ (1D массив) ---------------¬\n";
cout << "¦ 1. Найти максимум и его позиции ¦\n";
cout << "¦ 2. Найти минимум и его позиции ¦\n";
cout << "¦ 0. Вернуться в главное меню ¦\n";
cout << "L----------------------------------------------\n";
cout << "Ваш выбор: ";
cin >> choice;
if (choice == 1) {
double maxValArr = arr[0];
for (int i = 0; i < size; i++) {
if (arr[i] > maxValArr) maxValArr = arr[i];
}
cout << fixed << setprecision(precision);
cout << "\n----------- РЕЗУЛЬТАТ ----------¬\n";
cout << "¦ Максимум: " << setw(8) << maxValArr << " ¦\n";
cout << "¦ Позиции (по порядку): ";
for (int i = 0; i < size; i++) {
if (arr[i] == maxValArr) cout << i + 1 << " ";
}
cout << " ¦\n";
cout << "L----------------------------------\n";
}
else if (choice == 2) {
double minValArr = arr[0];
for (int i = 0; i < size; i++) {
if (arr[i] < minValArr) minValArr = arr[i];
}
cout << fixed << setprecision(precision);
cout << "\n----------- РЕЗУЛЬТАТ ----------¬\n";
cout << "¦ Минимум: " << setw(8) << minValArr << " ¦\n";
cout << "¦ Позиции (по порядку): ";
for (int i = 0; i < size; i++) {
if (arr[i] == minValArr) cout << i + 1 << " ";
}
cout << " ¦\n";
cout << "L----------------------------------\n";
}
} while (choice != 0);
}
else if (dimType == 2) {
int rows, cols;
cout << "\n> Введите количество строк: ";
cin >> rows;
cout << "> Введите количество столбцов: ";
cin >> cols;
if (rows != cols) {
cout << "\n? Для сравнения диагоналей нужна квадратная матрица!\n";
return;
}
double minVal, maxVal;
cout << "> Введите диапазон случайных значений\n";
cout << " Минимум: ";
cin >> minVal;
cout << " Максимум: ";
cin >> maxVal;
checkRange(minVal, maxVal);
vector<vector<double> > matrix(rows, vector<double>(cols));
cout << fixed << setprecision(precision);
cout << "\n---------- СГЕНЕРИРОВАННАЯ МАТРИЦА ---------¬\n";
for (int i = 0; i < rows; i++) {
cout << "¦ ";
for (int j = 0; j < cols; j++) {
matrix[i][j] = minVal + (double)rand() / RAND_MAX * (maxVal - minVal);
cout << setw(9) << matrix[i][j];
}
cout << " ¦\n";
}
cout << "L------------------------------------------\n";
int choice;
do {
cout << "\n---------------- МЕНЮ (2D массив) ---------------¬\n";
cout << "¦ 1. Найти максимум и его позиции ¦\n";
cout << "¦ 2. Найти минимум и его позиции ¦\n";
cout << "¦ 3. Найти сумму по строкам и столбцам ¦\n";
cout << "¦ 4. Сравнить сумму диагоналей ¦\n";
cout << "¦ 0. Вернуться в главное меню ¦\n";
cout << "L----------------------------------------------\n";
cout << "Ваш выбор: ";
cin >> choice;
if (choice == 1) {
double maxValArr = matrix[0][0];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (matrix[i][j] > maxValArr) maxValArr = matrix[i][j];
}
}
cout << fixed << setprecision(precision);
cout << "\n----------- РЕЗУЛЬТАТ ----------¬\n";
cout << "¦ Максимум: " << setw(8) << maxValArr << " ¦\n";
cout << "¦ Позиции (строка,столбец): ";
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (matrix[i][j] == maxValArr) cout << "(" << i + 1 << "," << j + 1 << ") ";
}
}
cout << "¦\n";
cout << "L----------------------------------\n";
}
else if (choice == 2) {
double minValArr = matrix[0][0];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (matrix[i][j] < minValArr) minValArr = matrix[i][j];
}
}
cout << fixed << setprecision(precision);
cout << "\n----------- РЕЗУЛЬТАТ ----------¬\n";
cout << "¦ Минимум: " << setw(8) << minValArr << " ¦\n";
cout << "¦ Позиции (строка,столбец): ";
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (matrix[i][j] == minValArr) cout << "(" << i + 1 << "," << j + 1 << ") ";
}
}
cout << "¦\n";
cout << "L----------------------------------\n";
}
else if (choice == 3) {
cout << fixed << setprecision(precision);
cout << "\n---------- СУММА ПО СТРОКАМ ----------¬\n";
for (int i = 0; i < rows; i++) {
double sum = 0;
for (int j = 0; j < cols; j++) sum += matrix[i][j];
cout << "¦ Строка " << setw(2) << i + 1 << ": " << setw(10) << sum << " ¦\n";
}
cout << "+-----------------------------------------+\n";
cout << "¦ СУММА ПО СТОЛБЦАМ ¦\n";
for (int j = 0; j < cols; j++) {
double sum = 0;
for (int i = 0; i < rows; i++) sum += matrix[i][j];
cout << "¦ Столбец " << setw(2) << j + 1 << ": " << setw(10) << sum << " ¦\n";
}
cout << "L------------------------------------------\n";
}
else if (choice == 4) {
double mainDiag = 0, secondaryDiag = 0;
for (int i = 0; i < rows; i++) {
mainDiag += matrix[i][i];
secondaryDiag += matrix[i][rows - 1 - i];
}
cout << fixed << setprecision(precision);
cout << "\n----------- РЕЗУЛЬТАТ ----------¬\n";
cout << "¦ Главная диагональ: " << setw(8) << mainDiag << " ¦\n";
cout << "¦ Побочная диагональ: " << setw(7) << secondaryDiag << " ¦\n";
cout << "+---------------------------------+\n";
if (mainDiag > secondaryDiag)
cout << "¦ ? Главная диагональ БОЛЬШЕ ¦\n";
else if (secondaryDiag > mainDiag)
cout << "¦ ? Побочная диагональ БОЛЬШЕ ¦\n";
else
cout << "¦ ? Диагонали РАВНЫ ¦\n";
cout << "L----------------------------------\n";
}
} while (choice != 0);
}
}
// ====================== СИМВОЛЬНЫЙ ТИП ======================
void processCharArray() {
int rows, cols;
cout << "\n> Введите количество строк: ";
cin >> rows;
cout << "> Введите количество столбцов: ";
cin >> cols;
if (rows != cols) {
cout << "\n? Для символьных операций нужна квадратная матрица!\n";
return;
}
char minVal, maxVal;
cout << "> Введите диапазон случайных символов\n";
cout << " Минимум (например, A): ";
cin >> minVal;
cout << " Максимум (например, Z): ";
cin >> maxVal;
checkRange(minVal, maxVal);
vector<vector<char> > matrix(rows, vector<char>(cols));
cout << "\n---------- СГЕНЕРИРОВАННАЯ МАТРИЦА ---------¬\n";
for (int i = 0; i < rows; i++) {
cout << "¦ ";
for (int j = 0; j < cols; j++) {
matrix[i][j] = minVal + rand() % (maxVal - minVal + 1);
cout << " " << matrix[i][j] << " ";
}
cout << " ¦\n";
}
cout << "L------------------------------------------\n";
int choice;
do {
cout << "\n---------------- МЕНЮ (СИМВОЛЫ) -----------------¬\n";
cout << "¦ 1. Отобразить только диагонали ¦\n";
cout << "¦ 2. Главная диагональ + элементы ПОД ней ¦\n";
cout << "¦ 3. Главная диагональ + элементы НАД ней ¦\n";
cout << "¦ 4. Побочная диагональ + элементы ПОД ней ¦\n";
cout << "¦ 5. Побочная диагональ + элементы НАД ней ¦\n";
cout << "¦ 0. Вернуться в главное меню ¦\n";
cout << "L-----------------------------------------------\n";
cout << "Ваш выбор: ";
cin >> choice;
cout << "\n---------- РЕЗУЛЬТАТ ---------¬\n";
if (choice == 1) {
for (int i = 0; i < rows; i++) {
cout << "¦ ";
for (int j = 0; j < cols; j++) {
if (i == j || i + j == rows - 1)
cout << " " << matrix[i][j] << " ";
else
cout << " ";
}
cout << " ¦\n";
}
}
else if (choice == 2) {
for (int i = 0; i < rows; i++) {
cout << "¦ ";
for (int j = 0; j < cols; j++) {
if (i == j || i > j)
cout << " " << matrix[i][j] << " ";
else
cout << " ";
}
cout << " ¦\n";
}
}
else if (choice == 3) {
for (int i = 0; i < rows; i++) {
cout << "¦ ";
for (int j = 0; j < cols; j++) {
if (i == j || i < j)
cout << " " << matrix[i][j] << " ";
else
cout << " ";
}
cout << " ¦\n";
}
}
else if (choice == 4) {
for (int i = 0; i < rows; i++) {
cout << "¦ ";
for (int j = 0; j < cols; j++) {
if (i + j == rows - 1 || i > j)
cout << " " << matrix[i][j] << " ";
else
cout << " ";
}
cout << " ¦\n";
}
}
else if (choice == 5) {
for (int i = 0; i < rows; i++) {
cout << "¦ ";
for (int j = 0; j < cols; j++) {
if (i + j == rows - 1 || i < j)
cout << " " << matrix[i][j] << " ";
else
cout << " ";
}
cout << " ¦\n";
}
}
cout << "L----------------------------------\n";
} while (choice != 0);
}
// ====================== ГЛАВНАЯ ФУНКЦИЯ ======================
int main() {
srand(time(NULL));
setlocale(LC_ALL, "Russian");
int dataType;
do {
clearScreen();
cout << "\nг=============================================¬\n";
cout << "¦ ГЛАВНОЕ МЕНЮ ПРОГРАММЫ ¦\n";
cout << "¦=============================================¦\n";
cout << "¦ 1. Работа с ЦЕЛЫМИ числами ¦\n";
cout << "¦ 2. Работа с ВЕЩЕСТВЕННЫМИ числами ¦\n";
cout << "¦ 3. Работа с СИМВОЛЬНЫМ типом ¦\n";
cout << "¦ 0. ВЫХОД из программы ¦\n";
cout << "L=============================================-\n";
cout << "Ваш выбор: ";
cin >> dataType;
switch (dataType) {
case 1: processIntegerArray(); break;
case 2: processRealArray(); break;
case 3: processCharArray(); break;
case 0:
cout << "\n------------------------------------------¬\n";
cout << "¦ Спасибо за использование программы! ¦\n";
cout << "¦ До свидания! ¦\n";
cout << "L------------------------------------------\n";
break;
default:
cout << "\n------------------------------------------¬\n";
cout << "¦ ? Неверный выбор! Попробуйте снова ¦\n";
cout << "L------------------------------------------\n";
pause();
}
if (dataType != 0 && dataType >= 1 && dataType <= 3) pause();
} while (dataType != 0);
return 0;
}