63 / 44 / 20
Регистрация: 24.10.2016
Сообщений: 1,010
1

Осуществить циклический сдвиг элементов прямоугольной матрицы

12.09.2018, 14:04. Показов 1960. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!!! Моя задача состоит в том: Осуществить циклический сдвиг элементов прямоугольной матрицы на n элементов вправо и вниз(в зависимости от введенного режима) n может быть больше количества элементов в строке или в столбце.
Мой код работает, но я сомневаюсь в том, что сдвиги неправильно работают, когда я хочу сдвинуть вправо, он все равно сдвигает вниз(или я что-то не понял) Помогите разобраться!!!
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
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <math.h>
#include <cstdlib> 
#include <time.h> 
#include <iomanip>
using namespace std;
int main()
{
    setlocale(0, "rus");
    srand(time(NULL));
    int i, j, n, m, k, l, nmin, mmin, q = 0, buf;
    cout << "Введите размерность матрицы: " << endl;
    cout << "Введите количество строк: n =  ";
    cin >> n;
    cout << "Введите количество столбцов:  m = ";
    cin >> m;
    cout << "Введите количество циклов сдвига:  l =  ";
    cin >> l;
    cout << "Нажмите 1-сдвиг вниз, 2-сдвиг вправо: q = ";
    cin >> q;
    int **a = new int*[n];
    for (i = 0; i < n; i++)
        a[i] = new int[m];
    cout << "Введите элементы массива: " << endl;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            a[i][j] = rand() % 100;
            cout << setw(4) << a[i][j];
        }
        cout << endl;
    }
    if (0 == q)
        cout << "Вы не ввели направление сдвига " << endl;
    else
    {
        for (k = 0; k < l; k++)
        {
            if (1 == q)
            {
                for (i = n - 1; i > 0; i--)
                {
                    nmin = i - 1;
                    for (j = 0; j < m; j++)
                    {
                        buf = a[i][j];
                        a[i][j] = a[nmin][j];
                        a[nmin][j] = buf;
                    }
                }
            }
            if (2 == q)
            {
                for (j = m - 1; j > 0; j--)
                {
                    mmin = j - 1;
                    for (i = 0; i < n; i++)
                    {
                        buf = a[i][j];
                        a[i][j] = a[i][mmin];
                        a[i][mmin] = buf;
                    }
                }
            }
        }
        cout << endl;
        cout << "Сдвинутая матрица: " << endl;
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < m; j++)
                cout << setw(4) << a[i][j] << endl;
        }
    }
    system("pause");
    return 0;
}
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.09.2018, 14:04
Ответы с готовыми решениями:

Осуществить циклический сдвиг элементов прямоугольной матрицы
Помогите решить задачки. Я не оть программирую, а делать над... (С++) 1) Вычислить 12 значений...

Осуществить циклический сдвиг элементов прямоугольной матрицы
Здравствуйте, было задание Осуществить циклический сдвиг элементов прямоугольной матрицы на п...

Осуществить циклический сдвиг элементов прямоугольной матрицы
Задание. Задания этого семинара соответствуют приведенным в Учебнике на с. 139. Рекомендуется...

Осуществить циклический сдвиг элементов прямоугольной матрицы
Осуществить циклический сдвиг элементов прямоугольной матрицы на n элементов вправо или вниз (в...

3
165 / 114 / 59
Регистрация: 12.07.2018
Сообщений: 277
12.09.2018, 14:54 2
Лучший ответ Сообщение было отмечено никмейн как решение

Решение

Запустил пару тестов, вроде всё правильно, циклический сдвиг вправо работает.
Только вывод сдвинутой матрицы надо подправить (строки 73-74)
C++
1
2
3
            for (j = 0; j < m; j++)
                cout << setw(4) << a[i][j];
            cout << endl;
0
63 / 44 / 20
Регистрация: 24.10.2016
Сообщений: 1,010
12.09.2018, 15:03  [ТС] 3
Спасибо большое
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
12.09.2018, 19:21 4
похоже работает. если применяете динамический массив не забывайте освободить память перед system("pause");
C++
1
2
3
for (int i = 0; i < n; i++)
    delete [] a[i];
    delete [] a;
и по мелочам:
строку 26 уберите - она ни к чему при рандомном заполнении. замените букву l например на p (чтобы не путалась с 1). лучше if (q==1) но это на усмотрение - на работу не влияет. вместо <time.h> поставьте <ctime>. вверху строки 1,3,4,5 тоже можете поубирать, но по очереди (по одной), может какая и нужна будет компилятору
1
12.09.2018, 19:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.09.2018, 19:21
Помогаю со студенческими работами здесь

Осуществить циклический сдвиг элементов прямоугольной матрицы на n элементов вправо или вниз
Осуществить циклический сдвиг элементов прямоугольной матрицы на n элементов вправо или вниз (в...

Циклический сдвиг элементов прямоугольной матрицы
Мне нужно сделать такую программу: Осуществить циклический сдвиг элементов прямоугольной матрицы...

Циклический сдвиг прямоугольной матрицы на n элементов вправо
Подскажите пожалуйста в чем ошибка. Надо осуществить циклический сдвиг прямоугольной матрицы на n...

Осуществить циклический сдвиг элементов квадратной матрицы
Помогите решить эту задачу: Осуществить циклический сдвиг элементов квадратной матрицы размерности...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru