Загрузка данных
#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;
// Вычисляем, сколько всего кругов (слоев) в матрице
// Количество слоев равно половине от меньшей из сторон матрицы
int num_layers = (M < N ? M : N) / 2;
// Запускаем сдвиг для каждого слоя отдельно
for (int layer = 0; layer < num_layers; layer++) {
// Каждый слой сдвигаем ровно k раз
for (int step = 0; step < k; step++) {
// Текущие границы для выбранного слоя 'layer'
int top = layer;
int bottom = M - 1 - layer;
int left = layer;
int right = N - 1 - layer;
// Запоминаем правый верхний угол текущего слоя
double temp = y[top][right];
// 1. Сдвигаем верхнюю строку слоя вправо
for (int j = right; j > left; j--) {
y[top][j] = y[top][j - 1];
}
// 2. Сдвигаем левый столбец слоя вверх
for (int i = top; i < bottom; i++) {
y[i][left] = y[i + 1][left];
}
// 3. Сдвигаем нижнюю строку слоя влево
for (int j = left; j < right; j++) {
y[bottom][j] = y[bottom][j + 1];
}
// 4. Сдвигаем правый столбец слоя вниз
for (int i = bottom; i > top + 1; i--) {
y[i][right] = y[i - 1][right];
}
// 5. Возвращаем сохраненный элемент на его новое место в правом столбце слоя
y[top + 1][right] = 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;
}