Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Bob_Sagen
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 47
1

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

17.01.2014, 22:40. Просмотров 1048. Ответов 10
Метки нет (Все метки)

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

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

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2014, 22:40
Ответы с готовыми решениями:

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

Осуществить циклический сдвиг элементов квадратной матрицы
(Console Application) Осуществить циклический сдвиг элементов квадратной...

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

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

Осуществить циклический сдвиг элементов массива
Здравствуйте! Имеется задача: "Дан массив размера N и число k (0 < k < 5, k <...

10
_script_
171 / 139 / 70
Регистрация: 01.05.2012
Сообщений: 414
18.01.2014, 03:40 2
решение с использованием STL)
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
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
int main()
{
    int N,M;
    cin>> N >>M;
    vector <vector <int> > A (N,vector<int> (M));
    for (int i=0; i<N; i++)
        for (int j=0; j<M; j++)
            cin >> A[i][j];
 
    int a;
    cout << "Куда сдвиать? 1-вправо, 2-вниз";
    cin >> a;
    cout <<"На сколько сдвигать? ";
 
    int n;
    cin>>n;
    if (a==1)
    {
        n=n%N;
        n=N-n;
        if (n)
        {
            reverse(A.begin(),A.begin()+n);
            reverse(A.begin()+n,A.end());
            reverse(A.begin(),A.end());
        }
    }
    else
    if (a==2)
        {
            n=n%M;
            n=M-n;
            if (n)
            for (int i=0; i<N; i++)
            {
                reverse(A[i].begin(),A[i].begin()+n);
                reverse(A[i].begin()+n,A[i].end());
                reverse(A[i].begin(),A[i].end());
            }
        }
    else
    {
        cout <<"Не верный выбор!";
        return 0;
    }
 
    for (int i=0; i<N; i++)
    {
        for (int j=0; j<M; j++)
        {
            cout << A[i][j]<<" ";
        }
        cout << endl;
    }
    return 0;
}
алгоритм сдвига влево такой:
1) переворачиваем первые n элементов
2) переворачиваем вторую часть элементов
3) переворачиваем весь массив

если нам надо вправо на n, то можно сдвинуть влево на N-n. Это одно и тоже.
1
Bob_Sagen
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 47
18.01.2014, 03:51  [ТС] 3
Цитата Сообщение от _script_ Посмотреть сообщение
решение с использованием STL)
при запуске программы висит пустое окно ( vs 2010)
0
_script_
171 / 139 / 70
Регистрация: 01.05.2012
Сообщений: 414
18.01.2014, 03:53 4
Вот еще решение без использования STL
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
#include <iostream>
 
using namespace std;
 
template <class T>
void Revers(T *A,int a, int b) //Функция переворота массива
{
    for (int i=a, j=b-1; i<j; i++, j--)
    {
        swap(A[i],A[j]);
    }
}
 
int main()
{
    int N,M;
    cin>> N >>M;
    int **A=new int*[N];
    for (int i=0; i<N; i++)
        A[i]=new int[M];
 
    for (int i=0; i<N; i++)
        for (int j=0; j<M; j++)
            cin >> A[i][j];
 
    int a;
    cout << "Куда сдвиать? 1-вправо, 2-вниз";
    cin >> a;
    cout <<"На сколько сдвигать? ";
 
    int n;
    cin>>n;
    if (a==1)
    {
        n=n%N;
        n=N-n;
        if (n)
        {
            Revers(A,0,n);
            Revers(A,n,N);
            Revers(A,0,N);
        }
    }
    else
    if (a==2)
        {
            n=n%M;
            n=M-n;
            if (n)
            for (int i=0; i<N; i++)
            {
                 Revers(A[i],0,n);
                 Revers(A[i],n,M);
                 Revers(A[i],0,M);
            }
        }
    else
    {
        cout <<"Не верный выбор!";
        return 0;
    }
 
    for (int i=0; i<N; i++)
    {
        for (int j=0; j<M; j++)
        {
            cout << A[i][j]<<" ";
        }
        cout << endl;
    }
    return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от Bob_Sagen Посмотреть сообщение
при запуске программы висит пустое окно ( vs 2010)
Можете добавить перед cin>> N >>M;
cout << "введите N и М:";
а после
cin>> N >>M;
cout << "введите матрицу:";
1
cooller
565 / 533 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
18.01.2014, 03:55 5
Цитата Сообщение от Bob_Sagen Посмотреть сообщение
при запуске программы висит пустое окно ( vs 2010)
В это пустое окно нужно начинать вводить данные
1
Bob_Sagen
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 47
18.01.2014, 04:02  [ТС] 6
Цитата Сообщение от cooller_94 Посмотреть сообщение
В это пустое окно нужно начинать вводить данные
после ввода n ,m и матрицы , дальше что не вводи бесполезно, ничего не происходит
Осуществить циклический сдвиг элементов квадратной
0
_script_
171 / 139 / 70
Регистрация: 01.05.2012
Сообщений: 414
18.01.2014, 04:08 7
Цитата Сообщение от Bob_Sagen Посмотреть сообщение
после ввода n ,m и матрицы , дальше что не вводи бесполезно, ничего не происходит
M и N это размерность матрицы.
вы ввели размер 10 на 15 и вы должны ввести матрицу размером 10 на 15
соответственно должно быть введено 150 чисел)

введите матрицу по меньше, 3 на 3, например.
2
cooller
565 / 533 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
18.01.2014, 04:08 8
Bob_Sagen, Картинка маленькая, ничего не видно
Цитата Сообщение от Bob_Sagen Посмотреть сообщение
после ввода n ,m и матрицы , дальше всё в пустую идёт
Все работает, я проверил.
Вы вводите сначала размерности матрицы, затем саму матрицу.
Также в начале мейна напиши
C++
1
setlocale(LC_ALL,"")
для корректного отображения русского языка
и в конце поставь
C++
1
2
system("pause");
    return 0;
2
Миниатюры
Осуществить циклический сдвиг элементов квадратной  
Bob_Sagen
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 47
18.01.2014, 04:16  [ТС] 9
Да спасибо) всё работает
0
_script_
171 / 139 / 70
Регистрация: 01.05.2012
Сообщений: 414
18.01.2014, 04:18 10
И ещё можно так сдвиг сделать) с использованием STL
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 if (a==1)
    {
        n=n%N;
        n=N-n;
        if (n)
            rotate(A.begin(),A.begin()+n,A.end());
    }
    else
    if (a==2)
        {
            n=n%M;
            n=M-n;
            if (n)
            for (int i=0; i<N; i++)
                 rotate(A[i].begin(),A[i].begin()+n,A[i].end());
        }
Для учебного заведения, наверно, лучше решение без использования STL.
Мне, например, когда начинал изучать С++ преподаватель не разрешал использовать STL.
1
Bob_Sagen
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 47
18.01.2014, 04:41  [ТС] 11
Цитата Сообщение от _script_ Посмотреть сообщение
И ещё можно так сдвиг сделать) с использованием STL
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 if (a==1)
    {
        n=n%N;
        n=N-n;
        if (n)
            rotate(A.begin(),A.begin()+n,A.end());
    }
    else
    if (a==2)
        {
            n=n%M;
            n=M-n;
            if (n)
            for (int i=0; i<N; i++)
                 rotate(A[i].begin(),A[i].begin()+n,A[i].end());
        }
Для учебного заведения, наверно, лучше решение без использования STL.
Мне, например, когда начинал изучать С++ преподаватель не разрешал использовать STL.
Характеристикой строки целочисленной матрицы назовем сумму ее положительных четных элементов. Переставляя строки заданной матрицы, расположить их в соот-ветствии с ростом характеристик.
0
18.01.2014, 04:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2014, 04:41

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

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

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


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

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

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