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

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

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

Проверку на ввод сюда(в сообщение) не пишу, потому что и так много кода :/
А весь код, потому что вдруг ошибка в 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() { // ... } ```

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

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