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

Сдвиг - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
CoffeeTurbo
 Аватар для CoffeeTurbo
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 17
17.02.2010, 14:32     Сдвиг #1
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
#include <iostream>
#define N 3
#define M 3
using namespace std;
 
int main()
{
 
 
    int array1[N][M]={1,2,3,4,5,6,7,8,9};
 
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
            /*int buf=array1[N][M];   
            array1[0][0]=buf;*/       
            cout<<array1[i][j+1]<<"\t";
        }
        cout<<"\n";
    }
 
    return 0;
}
Код
сдвиг матрицы 
до               после
1 2 3            2 3 4
4 5 6            5 6 7
7 8 9            8 9 1
У меня проблема с присвоением первого значения исходной матрицы последнему значению преобразованной ...
Не могу понять куда в цикле вставлять буфер и обмен.
или как это можно сделать по другому
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2010, 14:32     Сдвиг
Посмотрите здесь:

C++ СДВИГ
Сдвиг курсором C++
C++ Циклический сдвиг.
C++ 10->2 + сдвиг+инвертация
C++ Сдвиг перестановки.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cibertronic
 Аватар для cibertronic
255 / 142 / 13
Регистрация: 27.12.2009
Сообщений: 893
17.02.2010, 15:26     Сдвиг #2
могу ток на одномерном массиве показать подобное
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
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
void main()
{
const int N1=100;
int i,d,n=9;
int a[N1]={1,2,3,4,5,6,7,8,9};
 
d=a[0];
for(i=0;i<n;i++)
{
if(a[i]<n)
a[i]=a[i+1];
else
a[i]=d;
}
system("echo полученный массив");
for(i=0;i<n;i++)
{
 if(i%3==0)
 {
 printf("\n");
 }
 printf("%5d",a[i]);
}
 
getch();
}
Добавлено через 1 минуту
правда на экране будет выглядить как двумерный массив))

Добавлено через 13 минут
в принципе думаю в твоем коде тож можно просто первый элемент звбить в переменную, а по окончании массива(точнее на последнем элементе) внести уже ее в конец
CoffeeTurbo
 Аватар для CoffeeTurbo
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 17
17.02.2010, 20:47  [ТС]     Сдвиг #3
в принципе думаю в твоем коде тож можно просто первый элемент звбить в переменную, а по окончании массива(точнее на последнем элементе) внести уже ее в конец
у меня так что то не получилось-выкидывает с ошибкой.
insideone
Модератор
Автор FAQ
 Аватар для insideone
3620 / 898 / 47
Регистрация: 10.01.2010
Сообщений: 2,427
17.02.2010, 21:19     Сдвиг #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
#include <iostream>
#define N 3
#define M 3
using namespace std;
 
int main()
{
 
 
        int a[N][M]={1,2,3,4,5,6,7,8,9};
 
        int temp = a[0][0];
        memcpy(&a[0][0], &a[0][1], sizeof a - 1);
        a[N-1][N-1] = temp;
 
        for(int i=0;i<N;i++)
        {
                for(int j=0;j<N;j++)
                {
                        cout << a[i][j] << " ";
                }
                cout << "\n";
        }
 
return 0;
}
Мне так вот понравилось
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
17.02.2010, 21:22     Сдвиг #5
Сдвиги матриц без её разложения в одномерный массив, мне не понятны.
insideone
Модератор
Автор FAQ
 Аватар для insideone
3620 / 898 / 47
Регистрация: 10.01.2010
Сообщений: 2,427
17.02.2010, 21:26     Сдвиг #6
Сдвиги матриц без её разложения в одномерный массив, мне не понятны.
В памяти нет матриц, почему бы не использовать это? Я запомнил первый элемент и "подтянул" весь массив в начало. Потом последний элемент остается пуст туда мы и кладем первый)
CoffeeTurbo
 Аватар для CoffeeTurbo
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 17
17.02.2010, 22:27  [ТС]     Сдвиг #7
Цитата Сообщение от insideone Посмотреть сообщение
В памяти нет матриц, почему бы не использовать это? Я запомнил первый элемент и "подтянул" весь массив в начало. Потом последний элемент остается пуст туда мы и кладем первый)
Полагаю, что ввод матрицы с клавиатуры в этом случае отметается?
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
17.02.2010, 22:31     Сдвиг #8
В памяти нет матриц
А ты думал я не знаю.

Я тебе сказал как было бы лучше,
почитай как применяются алгоритмы Фурье при обработке 2d.
Для таких сомнительных действий с матрицей лучше так и поступать.
insideone
Модератор
Автор FAQ
 Аватар для insideone
3620 / 898 / 47
Регистрация: 10.01.2010
Сообщений: 2,427
17.02.2010, 22:36     Сдвиг #9
Цитата Сообщение от CoffeeTurbo Посмотреть сообщение
Полагаю, что ввод матрицы с клавиатуры в этом случае отметается?
Конечно нет! Просто эти строчки делают именно то что вам нужно - сдвиг.
C++
1
2
3
int temp = a[0][0];
memcpy(&a[0][0], &a[0][1], sizeof a - 1);
a[N-1][N-1] = temp;
До и после - делайте с матрицей что угодно... в т.ч. заполнение, вывод.

В качестве доказательства...
Код с вводом с клавиатуры
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
#include <iostream>
#define N 3
#define M 3
using namespace std;
 
int main()
{
        int a[N][N];
 
        for (int i = 0; i < N; i++)
            for (int j = 0; j < N; j++)
                cin >> a[i][j];
 
        int temp = a[0][0];
        memcpy(&a[0][0], &a[0][1], sizeof a - 1);
        a[N-1][N-1] = temp;
 
        for(int i=0;i<N;i++)
        {
                for(int j=0;j<N;j++)
                {
                    cout << a[i][j] << " ";
                }
                cout << "\n";
        }
 
        return 0;
}
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
17.02.2010, 22:37     Сдвиг #10
insideone:
Если всю матрицу представить в виде одномерного массива, её можно сдвигать, легко и просто.
insideone
Модератор
Автор FAQ
 Аватар для insideone
3620 / 898 / 47
Регистрация: 10.01.2010
Сообщений: 2,427
17.02.2010, 22:38     Сдвиг #11
Цитата Сообщение от Genius Ignat Посмотреть сообщение
Если всю матрицу представить в виде одномерного массива, её можно сдвигать, легко и просто.
Я представил это в своем разуме и применил memcpy В чем проблема?
CoffeeTurbo
 Аватар для CoffeeTurbo
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 17
17.02.2010, 22:51  [ТС]     Сдвиг #12
to insideone
код с вводом значений
меняет отображение выводимой матрицы
выглядит так
Код
 
1 2 3
1 2 3
1 2 3

2 3 1
2 3 1 
2 3 1
insideone
Модератор
Автор FAQ
 Аватар для insideone
3620 / 898 / 47
Регистрация: 10.01.2010
Сообщений: 2,427
17.02.2010, 23:00     Сдвиг #13
Я вас не понимаю... Да, именно так делается. Получился нужный сдвиг... что не так?
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
17.02.2010, 23:00     Сдвиг #14
Совет:
nsideone не шали с memcpy:
http://ru.wikipedia.org/wiki/Memcpy
Microsoft всегда прав.
insideone
Модератор
Автор FAQ
 Аватар для insideone
3620 / 898 / 47
Регистрация: 10.01.2010
Сообщений: 2,427
17.02.2010, 23:02     Сдвиг #15
Цитата Сообщение от Genius Ignat Посмотреть сообщение
Совет:
nsideone не шали с memcpy:
http://ru.wikipedia.org/wiki/Memcpy
Microsoft всегда прав.
В данном случае это не имеет никакого значения. Тут мы точно уверены что приемник вместит источник. Это учебная программа. К тому же не составляет труда переписать это с защищенной версией функции.
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
17.02.2010, 23:03     Сдвиг #16
insideone:
А не про данный случай.
insideone
17.02.2010, 23:07
  #17

Не по теме:

Цитата Сообщение от Genius Ignat Посмотреть сообщение
insideone:
А не про данный случай.
Отсутствие тега Offtop автоматически переносит ваше сообщение к разряду по теме

Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
17.02.2010, 23:08     Сдвиг #18
insideone:
Не напрягай мозг по пустому пример просто не удачный, цифры одни и те же глаза режет и не сразу поймешь, что куда там переместилось.
CoffeeTurbo:
посмотри внимательней.
CoffeeTurbo
 Аватар для CoffeeTurbo
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 17
17.02.2010, 23:09  [ТС]     Сдвиг #19
Цитата Сообщение от CoffeeTurbo Посмотреть сообщение
Код
сдвиг матрицы 
до               после
1 2 3            2 3 4
4 5 6            5 6 7
7 8 9            8 9 1
вот. тот сдвиг который нужен
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2010, 23:14     Сдвиг
Еще ссылки по теме:

C++ циклический сдвиг
сдвиг массива C++
C++ Битовый сдвиг C++

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

Или воспользуйтесь поиском по форуму:
insideone
Модератор
Автор FAQ
 Аватар для insideone
3620 / 898 / 47
Регистрация: 10.01.2010
Сообщений: 2,427
17.02.2010, 23:14     Сдвиг #20
вот. тот сдвиг который нужен
Да, тот код что я присылал послденим выдает такой результат при таких входных данных. И при других входных данных значения получались правильные. Или у меня галлюцинации начались?
Yandex
Объявления
17.02.2010, 23:14     Сдвиг
Ответ Создать тему
Опции темы

Текущее время: 00:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru