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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
CoffeeTurbo
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 17
#1

Сдвиг - C++

17.02.2010, 14:32. Просмотров 1281. Ответов 23
Метки нет (Все метки)

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++
unsigned int x = 0x1234ABCD; // число которое двигать надо unsigned int v = 1; // на сколько двигать x = (x &gt;&gt; v*4) | (x &lt;&lt; (32-v*4));...

Битовый сдвиг - C++
Вот в чем вопрос: int x = 2; int y; y = (x &gt;&gt; 32); cout &lt;&lt; x &lt;&lt; &quot; &quot; &lt;&lt; y; Должен быть выход 2 0, а на экран...

Циклический сдвиг - C++
Здравствуйте помогите пожалуйста мне надо все нечетные строки матрицы сдвинуть циклически на К элементов влево. Знаю тут ужас но не...

Сдвиг курсором - C++
Ребят чё то не пойму как вот с такой прогой справиться, писал что то писал и так не дошел.. вот само задание Написать программу,...

Побитовый сдвиг - C++
Непонятна часть программы с 24 по 45 строку. Помогите разобраться, пожалуйста. #include &lt;iostream&gt; using namespace std; const int...

Битовый сдвиг в if() - C++
Обясните как работает такой код:void swap(int &amp;a, int &amp;b) { int temp = a; a = b; b = temp; } void...

сдвиг массива - C++
сдвинуть все элементы массива влево так что бы на первой позиции оказался минимальный элемент при этом использовать дополнительные...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cibertronic
256 / 143 / 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
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 17
17.02.2010, 20:47  [ТС]     Сдвиг #3
в принципе думаю в твоем коде тож можно просто первый элемент звбить в переменную, а по окончании массива(точнее на последнем элементе) внести уже ее в конец
у меня так что то не получилось-выкидывает с ошибкой.
insideone
Модератор
Автор FAQ
3638 / 916 / 49
Регистрация: 10.01.2010
Сообщений: 2,468
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
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
17.02.2010, 21:22     Сдвиг #5
Сдвиги матриц без её разложения в одномерный массив, мне не понятны.
insideone
Модератор
Автор FAQ
3638 / 916 / 49
Регистрация: 10.01.2010
Сообщений: 2,468
17.02.2010, 21:26     Сдвиг #6
Сдвиги матриц без её разложения в одномерный массив, мне не понятны.
В памяти нет матриц, почему бы не использовать это? Я запомнил первый элемент и "подтянул" весь массив в начало. Потом последний элемент остается пуст туда мы и кладем первый)
CoffeeTurbo
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 17
17.02.2010, 22:27  [ТС]     Сдвиг #7
Цитата Сообщение от insideone Посмотреть сообщение
В памяти нет матриц, почему бы не использовать это? Я запомнил первый элемент и "подтянул" весь массив в начало. Потом последний элемент остается пуст туда мы и кладем первый)
Полагаю, что ввод матрицы с клавиатуры в этом случае отметается?
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
17.02.2010, 22:31     Сдвиг #8
В памяти нет матриц
А ты думал я не знаю.

Я тебе сказал как было бы лучше,
почитай как применяются алгоритмы Фурье при обработке 2d.
Для таких сомнительных действий с матрицей лучше так и поступать.
insideone
Модератор
Автор FAQ
3638 / 916 / 49
Регистрация: 10.01.2010
Сообщений: 2,468
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
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
17.02.2010, 22:37     Сдвиг #10
insideone:
Если всю матрицу представить в виде одномерного массива, её можно сдвигать, легко и просто.
insideone
Модератор
Автор FAQ
3638 / 916 / 49
Регистрация: 10.01.2010
Сообщений: 2,468
17.02.2010, 22:38     Сдвиг #11
Цитата Сообщение от Genius Ignat Посмотреть сообщение
Если всю матрицу представить в виде одномерного массива, её можно сдвигать, легко и просто.
Я представил это в своем разуме и применил memcpy В чем проблема?
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
3638 / 916 / 49
Регистрация: 10.01.2010
Сообщений: 2,468
17.02.2010, 23:00     Сдвиг #13
Я вас не понимаю... Да, именно так делается. Получился нужный сдвиг... что не так?
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
17.02.2010, 23:00     Сдвиг #14
Совет:
nsideone не шали с memcpy:
http://ru.wikipedia.org/wiki/Memcpy
Microsoft всегда прав.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2010, 23:02     Сдвиг
Еще ссылки по теме:

циклический сдвиг - C++
написать программу на СИ (обычном ,НЕ Си++), используя символьные массивы : Если число отрицательных элементов масива А чётно,то...

Сдвиг Указатели - C++
Всем привет, делаю программу с помощью указателей но не знаю как тут быть:? помогите нужно отредактировать эту часть ...

10->2 + сдвиг+инвертация - C++
Народ пожалуйста подскажите есть ли у меня ошибки в лабе Написать программу на языке C++, читающую со стандартного ввода 4 деся- ...

Сдвиг перестановки. - C++
Думал алгоритм решения таков : находим минимальный элемент ставим его на первое место и сдвигаем последовательность. Но такое решение...

Побитовый сдвиг - C++
есть допустим переменная unsigned char data = 0b10111011; Как можно сделать за 4 шага по битовый сдвиг на двух половинах как...


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

Или воспользуйтесь поиском по форуму:
insideone
Модератор
Автор FAQ
3638 / 916 / 49
Регистрация: 10.01.2010
Сообщений: 2,468
17.02.2010, 23:02     Сдвиг #15
Цитата Сообщение от Genius Ignat Посмотреть сообщение
Совет:
nsideone не шали с memcpy:
http://ru.wikipedia.org/wiki/Memcpy
Microsoft всегда прав.
В данном случае это не имеет никакого значения. Тут мы точно уверены что приемник вместит источник. Это учебная программа. К тому же не составляет труда переписать это с защищенной версией функции.
Yandex
Объявления
17.02.2010, 23:02     Сдвиг
Ответ Создать тему
Опции темы

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