Форум программистов, компьютерный форум CyberForum.ru

Циклический сдвиг матрицы MxN - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ LNK2019: ссылка на неразрешенный внешний символ. Что это за ошибка? http://www.cyberforum.ru/cpp-beginners/thread1084938.html
Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ _WinMain@16 в функции ___tmainCRTStartup C:\Documents and Settings\Димон\Мои документы\Visual Studio 2010\Projects\wchar\wchar\MSVCRTD.lib(crtexew.obj) wchar
C++ Как создать чекер для проверки консольных программ Мне нужно научиться создавать чекеры для проверки консольных программ... Где можно почитать об этом, а то везде чекеры, чекеры, но не такого типа как мне нужно. http://www.cyberforum.ru/cpp-beginners/thread1084934.html
Ошибка в коде. Не могу ввести вещественное число C++
При выполнении программы пытаюсь ввести элементы массива. Каждое число должно быть вещественным. При выполнении программы (при вводе вещественных чисел в массив) компилятор выдает ошибку (скрин прилагается). При вводе целочисленного значения массива программа работает правильно. Где-то идет несоответствие типов данных. Как можно изменить код, чтоб в массив можно было вводить число с плавающей...
C++ setlocale не совсем работает
есть код: #include <iostream> #include <conio.h> #include <clocale> using namespace std; int main() { setlocale (LC_ALL,"Russian"); struct zap
C++ Оформить в виде функции http://www.cyberforum.ru/cpp-beginners/thread1084931.html
Даны действительные числа s, t. Получить: g(1.2, s)+g(t, s)-g(2s - 1.5t), |g(ln(s, t+1))-g(t, s)|, где
C++ Составить программу вычисления произвольного количества значений выражения Составить программу вычисления произвольного количества значений выражения. Необходимость повторного вычисления значений и аргументы задает пользователь. Вычисление выражения должно происходить в отдельной функции. подробнее

Показать сообщение отдельно
Suares
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 106
30.01.2014, 00:49  [ТС]     Циклический сдвиг матрицы MxN
Цитата Сообщение от GuGo1991 Посмотреть сообщение
граничные элементы или всю матрицу?
Всю матрицу, вот больше пример:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
при циклическом сдвиге получится:
5 1 2 3
9 10 6 4
13 11 7 8
14 15 16 12
Но вот только это для квадратной. А у меня задача с матрицей MxN.
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
void shiftMatrix(int step, std::vector< std::vector<int> >& m)
{
    int tmpArr[2*(ROW + COLUMN)-4], shiftArr[2*(ROW + COLUMN)-4];
    int hEdge, vEdge, i, j, c;
 
    //обход матрицы по внешнему кругу с дальнейшим смещением в центр
    for(int k = 0; k < ROW/2; k++)
    {
        hEdge = ROW - 1 - k; //граница по строке
        vEdge = COLUMN - 1 - k; // граница по столбцу
        c = 0;
 
        for(j = k; j < hEdge; j++) // проход слева на право на верхней строке
        {
            tmpArr[c] = m[k][j];
            c++;
        }
        for(i = k; i < vEdge; i++) // проход сверху в низ в правом столбце
        {
            tmpArr[c] = m[i][hEdge];
            c++;
        }
        for(j = hEdge; j >= k; j--) // справа на лево в нижней строке
        {
            tmpArr[c] = m[vEdge][j];
            c++;
        }
        for(i = vEdge - 1; i > k; i--) // снизу в верх в левом столбце
        {
            tmpArr[c] = m[i][k];
            c++;
        }
 
        for(i = 0; i < 4*(ROW-2*k-1); i++) // вот тут возможно у меня и ошибка! Я смещаю элементы массива на заданный шаг. Но с матрицей MxN я не могу подобрать формулу 4*(ROW-2*k-1) - это для квадратной я так понял.
            shiftArr[(i+step)%(4*(ROW-2*k-1))] = tmpArr[i];
 
        c = 0;
        //Переписываем элементы со смещением.
        for(j = k; j < hEdge; j++)
        {
            m[k][j] = shiftArr[c];
            c++;
        }
        for(i = k; i < vEdge; i++)
        {
            m[i][hEdge] = shiftArr[c];
            c++;
        }
        for(j = hEdge; j >= k; j--)
        {
            m[vEdge][j] = shiftArr[c];
            c++;
        }
        for(i = vEdge - 1; i > k; i--)
        {
            m[i][k] = shiftArr[c];
            c++;
        }
    }
}
 
Текущее время: 18:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru