Загрузка данных
#include <iostream>
#include <cmath>
using namespace std;
int main() {
// Настройка корректного отображения кириллицы в консоли
setlocale(LC_ALL, "Russian");
// ==========================================
// ЧАСТЬ А (Одномерный массив в один проход)
// ==========================================
int size;
cout << "--- ЧАСТЬ А ---" << endl;
cout << "Введите размер массива: ";
cin >> size;
double* mas = new double[size];
cout << "Введите элементы массива через пробел: ";
for (int i = 0; i < size; i++) {
cin >> mas[i];
}
// Задание 1: Количество элементов, больших заданного числа
double num;
cout << "Введите число для сравнения: ";
cin >> num;
int count = 0;
for (int i = 0; i < size; i++) {
if (mas[i] > num) {
count++;
}
}
cout << "1. Количество элементов больше " << num << ": " << count << endl;
// Задание 2: Сумма элементов после минимального (в один проход)
double min_el = mas[0];
double sum = 0;
for (int i = 1; i < size; i++) {
if (mas[i] < min_el) {
min_el = mas[i];
sum = 0; // Сбрасываем сумму, если нашли новый истинный минимум
} else {
sum += mas[i]; // Копим сумму элементов после текущего минимума
}
}
cout << "2. Сумма элементов после минимального: " << sum << endl;
// Задание 3: Сортировка по возрастанию модулей
for (int i = 0; i < size - 1; i++) {
for (int j = i + 1; j < size; j++) {
if (abs(mas[j]) < abs(mas[i])) {
double temp = mas[i];
mas[i] = mas[j];
mas[j] = temp;
}
}
}
cout << "3. Массив после сортировки модулей: ";
for (int i = 0; i < size; i++) {
cout << mas[i] << " ";
}
cout << endl << endl;
delete[] mas; // Освобождаем память после Части А
// ==========================================
// ЧАСТЬ В (Циклический сдвиг матрицы по контуру)
// ==========================================
cout << "--- ЧАСТЬ В ---" << endl;
int M, N, k;
cout << "Введите число строк M и столбцов N матрицы (до 20): ";
cin >> M >> N;
double y[20][20]; // Статическая матрица по вашему первому образцу
cout << "Введите элементы матрицы:" << endl;
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
cin >> y[i][j];
}
}
cout << "Введите величину сдвига k: ";
cin >> k;
// Повторяем простой замкнутый сдвиг по цепочке контура ровно k раз
for (int step = 0; step < k; step++) {
// Запоминаем правый верхний угол, чтобы он не затерся при сдвиге строки
double temp = y[0][N - 1];
// 1. Сдвигаем верхнюю строку вправо (движемся справа налево)
for (int j = N - 1; j > 0; j--) {
y[0][j] = y[0][j - 1];
}
// 2. Сдвигаем левый столбец вверх
for (int i = 0; i < M - 1; i++) {
y[i][0] = y[i + 1][0];
}
// 3. Сдвигаем нижнюю строку влево
for (int j = 0; j < N - 1; j++) {
y[M - 1][j] = y[M - 1][j + 1];
}
// 4. Сдвигаем правый столбец вниз
for (int i = M - 1; i > 1; i--) {
y[i][N - 1] = y[i - 1][N - 1];
}
// 5. Возвращаем сохраненный из temp элемент в его новую ячейку
y[1][N - 1] = temp;
}
// Вывод итогового результата
cout << "Матрица после контурного сдвига:" << endl;
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
cout << y[i][j] << "\t";
}
cout << endl;
}
return 0;
}