Загрузка данных


#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;
}