Циклический сдвиг матрицы вправо или вниз

Не могу понять, почему не работает... Выводит изначальную матрицу, которая вводилась.

Проверку на ввод сюда(в сообщение) не пишу, потому что и так много кода :/
А весь код, потому что вдруг ошибка в main-е :с

#include <iostream>

using namespace std;

void cyclic_shift_r(double **Neo, int line, int column, int n)//циклический сдвиг вправо
{
    for (int k = 0; k < n; k++){
        for (int i = 0; i < line; i++){
            double t = Neo[i][column-1];
            int j;
            for (j = column-1; j > 0; j--){
                Neo[i][j] = Neo[i][j - 1];
            }
            Neo[i][j] = t;
        }
    }
}

void cyclic_shift_d(double **Neo, int line, int column, int n)//циклический сдвиг вниз
{
    for (int k = 0; k < n; k++){
        for (int i = 0; i < column; i++){
            double t = Neo[line-1][i];
            int j;
            for (j = line-1; j > 0; j--){
            Neo[j][i] = Neo[j - 1][i];
            }
            Neo[j][i] = t;
        }
    }
}

int main()
{
    setlocale(LC_ALL, "rus");
    int line, column, n;
    char a[1];
    cout << "Введите количество строк: ";
    cin >> line;
    cout << "Введите количество столбцов: ";
    cin >> column;
    double **Neo;
    Neo = new double *[line];
    for (int i = 0; i < line; i++){
        Neo[i] = new double[column];
    }
    cout << "\n" << "Ввод матрицы..." << "\n\n";
    for (int i = 0; i < line; i++){
        for (int j = 0; j < column; j++){
            cout << "Введите элемент А[" << i + 1 << "," << j + 1 << "]: ";
            cin >> Neo[i][j];
        }
    }
    cout << "Сдвинуть на... ";
    cin >> n;
    cout << "Вправо или вниз?(R или D) ";
    cin >> a;
    if (a == "R"){
        cyclic_shift_r(Neo, line, column, n);
    }
    else {
        if (a == "D"){
            cyclic_shift_d(Neo, line, column, n);
        }
    }
    cout << "\n" << "Вывод сдвинутой матрицы..." << "\n\n";
    for (int i = 0; i < line; i++){
        for (int j = 0; j < column; j++){
            cout << "\t" << Neo[i][j];
        }
        cout << "\n";
    }
    for (int i = 0; i < line; i++){
        delete []Neo[i];
    }
    delete[] Neo;
    system("pause");
    return 0;
}

Для одномерного массива все работает, а вот для матрицы что-то не получается..

Вот код для одномерного массива, на основе которого я пытался сделать для матрицы. Двигает вправо.

#include <iostream>
using namespace std;
int main()
{
    int A[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    int n = 3;
    for (int i = 0; i < 10; i++)
        cout << "  " << A[i];
    cout << endl;
    for (int i = 0; i < n; i++)
    {
        int b = A[9];
        int j;
        for (j = 9; j > 0; j--)
            A[j] = A[j - 1];
        A[j] = b;
    }
    for (int i = 0; i < 10; i++)
        cout<< "  " << A[i];
    cout << endl;
    system("pause");
    return 0;
}

Замени тип переменной a на char a; и, соответственно, проверяй if (a == 'R').

Оно у тебя на вызовы функций просто не попадает ))

Кстати, прекрасная иллюстрация преимущества использования конструкции switch/case/default перед вложенными if'ами ))

Кстати-2. При сдвиге по первому индексу двумерного массива можно «вальсировать» только указатели (т.е. работать как с одномерным массивом).

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.