Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
2 / 2 / 1
Регистрация: 26.06.2015
Сообщений: 56
1

Функция циклического сдвига строк и колонок в матрице

01.11.2015, 19:11. Просмотров 605. Ответов 4
Метки нет (Все метки)

Нужно написать функцию циклического сдвига строк и колонок в матрице.

Короче, пока ждал ответа, вроде сделал все:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
void CycleMove(int** &array, unsigned int rows, unsigned int cols, bool what, unsigned int xTimes, bool where) 
{
    if (what) //1 - строки
    {
        int* tempRow = nullptr;
        if (where) //1 - вверх
        {
            for (unsigned int y = 0; y < xTimes; y++)
            {
                tempRow = array[0];
                for (unsigned int i = 0; i < rows; i++)
                {
                    array[i] = array[i + 1];
                }
                array[rows - 1] = tempRow;
            }
        }
        else //0 - вниз
        {
            for (unsigned int y = 0; y < xTimes; y++)
            {
                tempRow = array[rows - 1];
                for (unsigned int i = rows - 1; i > 0; i--)
                {
                    array[i] = array[i - 1];
                }
                array[0] = tempRow;
            }
        }
        tempRow = nullptr;
    }
    else //0 - столбцы
    {
        if (where) //1 - вправо
        {
            for (unsigned int y = 0; y < xTimes; y++)
            {
                int* tempCol = new int[rows];
                for (unsigned int i = 0; i < rows; i++) //копируем последний столбец во временный
                {
                    tempCol[i] = array[i][cols - 1];
                }
                for (unsigned int i = 0; i < rows; i++) //сдвигаем столбцы вправо
                {
                    for (unsigned int j = cols - 1; j > 0; j--)
                    {
                        array[i][j] = array[i][j - 1];
                    }
                }
                for (unsigned int i = 0; i < rows; i++) //копируем временный в первый
                {
                    array[i][0] = tempCol[i];
                }
                delete[]tempCol;
            }
        }
        else //1 - влево
        {
            for (unsigned int y = 0; y < xTimes; y++)
            {
                int* tempCol = new int[rows];
                for (unsigned int i = 0; i < rows; i++) //копируем первый столбец во временный
                {
                    tempCol[i] = array[i][0];
                }
                for (unsigned int i = 0; i < rows; i++) //сдвигаем столбцы влево
                {
                    for (unsigned int j = 0; j < cols; j++)
                    {
                        array[i][j] = array[i][j + 1];
                    }
                }
                for (unsigned int i = 0; i < rows; i++) //копируем временный в последний
                {
                    array[i][cols - 1] = tempCol[i];
                }
                delete[]tempCol;
            }
        }
    }
}
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2015, 19:11
Ответы с готовыми решениями:

Функция Циклического сдвига
Уже несколько дней мучаюсь никак не могу организовать функции циклического сдвига. Необходимо...

Функция циклического сдвига массива
Доброго времени суток, есть задача - нужно написать функцию, которая сдвигает массив array...

Функция циклического сдвига побитово вправо
Форумчане, приветствую! Подскажите почему не работает сдвиг вправо? Программа компилируется, но...

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

4
Эксперт C
24332 / 15022 / 3163
Регистрация: 24.12.2010
Сообщений: 32,134
01.11.2015, 20:13 2
Цитата Сообщение от petuz Посмотреть сообщение
пока ждал ответа, вроде сделал все
Ну чтож, оказывается иногда полезно и подождать немного
Удачи!
1
2 / 2 / 1
Регистрация: 26.06.2015
Сообщений: 56
01.11.2015, 20:21  [ТС] 3
Да, спасибо.
0
Эксперт C
24332 / 15022 / 3163
Регистрация: 24.12.2010
Сообщений: 32,134
01.11.2015, 20:23 4
petuz, Это вам еще повезло, что сдвигать надо всего на 1. А если на K? И без вспомогательного массива. Тоже, конечно, как говаривал мой кореш господин Коровьев, не Бином Ньютона. Но тут уже, как ни странно, нужны некоторые сведения из элементарной теории чисел. Типа НОД (наибольший общий делитель).
0
2 / 2 / 1
Регистрация: 26.06.2015
Сообщений: 56
01.11.2015, 20:27  [ТС] 5
Ну мы пока учимся )) сложность постепенно наращивается. Некоторое время назад мне и это-то было бы непосильно.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.11.2015, 20:27

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

Матрицы: определить номера строк, совпадающих полностью или в результате циклического сдвига
Элементами целочисленной матрицы являются 0 или 1. Определить: - номера строк, совпадающих...

Ошиба циклического сдвига
Вот задание. Дана действительная квадратная матрица порядка n. 1) осуществить циклический сдвиг...

Подпрограмма циклического сдвига направо
Реализовать подпрограмму циклического сдвига направо . Код максимум пишется на 3-4 строчки. Входные...

Программа циклического сдвига элементов массива
Помогите!Срочно! Составить программу циклического сдвига элементов массива А(10) на 5 позиций...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.