Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 3
Регистрация: 17.12.2014
Сообщений: 111
1

В чем ошибка? Циклический сдвиг строки

21.01.2015, 16:28. Просмотров 1708. Ответов 12
Метки нет (Все метки)

Есть код.
Нужно сделать циклический сдвиг строки..... а он меняет мне 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
25
26
27
28
29
30
31
32
33
34
35
36
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
void main()
{
    srand((int)time(0));
    int a[5][5] = {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};
    int temp;
    
    for (int i = 0; i < 5; ++i)
    {
        for (int j = 0; j < 5; ++j)
        {
            cout << a[i][j] << "\t";
        }
        cout << '\n';
    }
    cout << '\n';
    cout << '\n';
    cout << '\n';
 
    
    for (int i = 0; i < 5; ++i)
    {
        for (int j = 0; j < 5; ++j)
        {
            temp = a[0][j];
            a[0][j] = a[4][j];
            a[4][j] = temp;
            cout << a[i][j] << '\t';
        }
        
        cout << '\n';
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.01.2015, 16:28
Ответы с готовыми решениями:

Выполнить циклический сдвиг элементов каждой строки матрицы на количество позиций, равное номеру строки
Дана матрица целых чисел X(5х8). Выполнить циклический сдвиг элементов каждой строки матрицы на...

Циклический сдвиг, ошибка вывода.
Задание сдвинуть строку вправо на 1 символ. В консоле после вывода пусто (выглядит так: &quot;row has...

Циклический сдвиг справа налево той строки массива
Добрый день... Пожалуйста, помогите решить задачи!!! Спасибо... 1. Дан двумерный массив...

Строки, работа с файлом. Реверс и циклический сдвиг в словах
Вот задание Для произвольного текста(Взятого из файла), содержащего не более 10 строк, в каждой...

12
Эксперт С++
1889 / 1237 / 354
Регистрация: 16.05.2013
Сообщений: 3,239
Записей в блоге: 6
21.01.2015, 16:54 2
paradox_1326, не выкладывайте код не имеющий отношения к поставленной задаче. Если нужно написать программу так и сформулируйте свой вопрос.
 Комментарий модератора 
Запрещено намеренно вводить других пользователей форума в заблуждение.
1
0 / 0 / 3
Регистрация: 17.12.2014
Сообщений: 111
22.01.2015, 14:43  [ТС] 3
ок...я понял....

Добавлено через 49 секунд
нужно исправить ошибку чтобы был сдвиг циклический...а не замена строк...

Добавлено через 26 минут
исправил....циклический сдвиг делается...теперь только вопрос как сделать в обратном направлении
- строку вниз ...а столбец....вправо..
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
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
void main()
{
    srand((int)time(0));
    int a[5][5] = {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};
    int temp;
    
    for (int i = 0; i < 5; ++i)
    {
        for (int j = 0; j < 5; ++j)
        {
            cout << a[i][j] << "\t";
        }
        cout << '\n';
    }
    cout << '\n';
    cout << '\n';
    cout << '\n';
    // сдвиг строки вверх.
    for (int i = 0; i < 5; ++i)
    {
        for (int j = 0; j < 5; ++j)
        {
            temp = a[i][j];
            a[i][j] = a[4][j];
            a[4][j] = temp;
            cout << a[i][j] << '\t';
        }
        
        cout << '\n';
    }
    cout << '\n';
    cout << '\n';
    cout << '\n';
    // сдвиг столбца влево.
    for (int i = 0; i < 5; ++i)
    {
        for (int j = 0; j < 5; ++j)
        {
            temp = a[i][j];
            a[i][j] = a[i][4];
            a[i][4] = temp;
            cout << a[i][j] << '\t';
        }
        cout << '\n';
    }
    cout << '\n';
    cout << '\n';
    cout << '\n';
    
}
Добавлено через 4 часа 14 минут
......не получилось(((
0
Модератор
Эксперт С++
10150 / 8499 / 5165
Регистрация: 18.12.2011
Сообщений: 22,736
22.01.2015, 14:46 4
Аналогичным способом, только в операторах for поменяйте i и j местами.
0
Модератор
Эксперт по электронике
8319 / 6172 / 828
Регистрация: 14.02.2011
Сообщений: 21,449
22.01.2015, 14:57 5
Цитата Сообщение от paradox_1326 Посмотреть сообщение
Циклический сдвиг строки
........................
int a[5][5] = {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};
а где здесь строка?
я вижу двумерный целочисленный массив
причем, неправильно оформленный
а для сдвига массивов была тема
Функция циклического сдвига массива
0
0 / 0 / 3
Регистрация: 17.12.2014
Сообщений: 111
22.01.2015, 15:01  [ТС] 6
я немного не догоняю с условием (for)

Добавлено через 1 минуту
for
Цитата Сообщение от ValeryS Посмотреть сообщение
а где здесь строка?
я вижу двумерный целочисленный массив
причем, неправильно оформленный
а для сдвига массивов была тема
Функция сдвига массива
не понял... почему не правильно..... что хочу то и пишу в массиве... я же его задаю...
0
Модератор
Эксперт по электронике
8319 / 6172 / 828
Регистрация: 14.02.2011
Сообщений: 21,449
22.01.2015, 15:06 7
Цитата Сообщение от paradox_1326 Посмотреть сообщение
не понял... почему не правильно.....
потому что при инициализации двумерных массивах обычно пишут так
C++
1
2
3
4
5
6
int [][]={
{...},
{...},
..........
{....}
}
тогда понятно где столбец и где строка массива
а по пальчикам высчитывать, что 6 это первый столбец второй строки, мне лично лень
Цитата Сообщение от paradox_1326 Посмотреть сообщение
что хочу то и пишу в массиве...
можешь
только не обижайся если тебя не понимают
1
0 / 0 / 3
Регистрация: 17.12.2014
Сообщений: 111
22.01.2015, 15:26  [ТС] 8
все спасибо исправил...

Добавлено через 16 минут
я не догоняю с условием (for)
0
Модератор
Эксперт по электронике
8319 / 6172 / 828
Регистрация: 14.02.2011
Сообщений: 21,449
22.01.2015, 15:33 9
Цитата Сообщение от paradox_1326 Посмотреть сообщение
я не догоняю с условием (for)
for это не условие, это цикл от и до
Цитата Сообщение от paradox_1326 Посмотреть сообщение
for (int i = 0; i < 5; ++i)
означает
int i = 0 от 0
i < 5 до тех пор пока i меньше 5
++i при каждой итерации (проходе) прибавляем к i 1
т.е у нас будет пять проходов i соответственно равна 0 1 2 3 4

вот тебе массив
1 2 3
4 5 6
7 8 9
как он должен выглядеть после сдвига?
1
0 / 0 / 3
Регистрация: 17.12.2014
Сообщений: 111
22.01.2015, 15:55  [ТС] 10
7 8 9
1 2 3
4 5 6

Добавлено через 1 минуту
у меня вопрос вот по поводц чего.
сдвиг вправо...
C++
1
2
3
    for (int i = 5; i > 0; --i)
    {
        for (int j = 0; j <5; ++j)
Добавлено через 43 секунды
ой.....не вправо а вниз.

Добавлено через 3 минуты
но он мне почемуто мешает все.... строки местами....
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    cout << '\n';
    for (int i = 5; i > 0; --i)
    {
        for (int j = 0; j <5; ++j)
        {
            temp = a[1][j];
            a[1][j] = a[5][j];
            a[5][j] = temp;
            cout << a[i][j] << '\t';
        }
 
        cout << '\n';
    }
0
Модератор
Эксперт по электронике
8319 / 6172 / 828
Регистрация: 14.02.2011
Сообщений: 21,449
22.01.2015, 16:13 11
Цитата Сообщение от paradox_1326 Посмотреть сообщение
но он мне почемуто мешает все.... строки местами....
потому что в индексах запутался
вот так примерно
C++
1
2
3
4
5
6
7
8
9
10
for(int i=0;i<5;i++) // какой столбец будем сдвигать
 {
  int tmp=a[4][i];// запоминаем самый последний элемент столбца, потом положим его в первый 
  for(int j=4;j>0;j--) //цикл сдвига от 4 до 1(нам нужно всего 4 перемещения)
   {
    a[j][i]=a[j-1][i]; // в нижний элемент копируем верхний
   }
   a[0][i]=tmp; и последняя пятая перестановка
 
}
Добавлено через 1 минуту
Цитата Сообщение от paradox_1326 Посмотреть сообщение
a[1][j] = a[5][j];
отсчет индексов в Си от 0
соответственно самый первый элемент a[0] а последний a[4]
a[5] не существует
1
0 / 0 / 3
Регистрация: 17.12.2014
Сообщений: 111
22.01.2015, 16:52  [ТС] 12
все равно чушь какае то.

Добавлено через 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
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
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
void main()
{
    srand((int)time(0));
    int a[5][5] = { { 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 } };
    int temp;
    
    for (int i = 0; i < 5; ++i)
    {
        for (int j = 0; j < 5; ++j)
        {
            cout << a[i][j] << "\t";
        }
        cout << '\n';
    }
    cout << '\n';
    cout << '\n';
    cout << '\n';
    // сдвиг строки вверх.
    for (int i = 0; i < 5; ++i)
    {
        for (int j = 0; j < 5; ++j)
        {
            temp = a[i][j];
            a[i][j] = a[4][j];
            a[4][j] = temp;
            cout << a[i][j] << '\t';
        }
        
        cout << '\n';
    }
    cout << '\n';
    cout << '\n';
    cout << '\n';
    // сдвиг столбца влево.
    for (int i = 0; i < 5; ++i)
    {
        for (int j = 0; j < 5; ++j)
        {
            temp = a[i][j];
            a[i][j] = a[i][4];
            a[i][4] = temp;
            cout << a[i][j] << '\t';
        }
        cout << '\n';
    
    }
}
0
Модератор
Эксперт по электронике
8319 / 6172 / 828
Регистрация: 14.02.2011
Сообщений: 21,449
22.01.2015, 17:34 13
Лучший ответ Сообщение было отмечено paradox_1326 как решение

Решение

Цитата Сообщение от paradox_1326 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
// сдвиг строки вверх.
    for (int i = 0; i < 5; ++i)
    {
        for (int j = 0; j < 5; ++j)
        {
            temp = a[i][j];
            a[i][j] = a[4][j];
            a[4][j] = temp;
            cout << a[i][j] << '\t';
        }
        
        cout << '\n';
    }
во первых ты просил вниз
во вторых
Цитата Сообщение от ValeryS Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
for(int i=0;i<5;i++) // какой столбец будем сдвигать
 {
  int tmp=a[4][i];// запоминаем самый последний элемент столбца, потом положим его в первый 
  for(int j=4;j>0;j--) //цикл сдвига от 4 до 1(нам нужно всего 4 перемещения)
   {
    a[j][i]=a[j-1][i]; // в нижний элемент копируем верхний
   }
   a[0][i]=tmp; и последняя пятая перестановка
 
}
разницу видишь?

нарисуй на бумажке массив
и при помощи карандаша и ластика сдвинь его
Цитата Сообщение от paradox_1326 Посмотреть сообщение
temp = a[i][j];
зачем ты запоминаешь при каждой итерации?
и зачем выводить на экран пока массив не сдвинут?
сдвинь а потом выводи весь массив на экран

Добавлено через 5 минут
вот тебе сдвиг массива из 5 строк, первого столбца, без цикла
вверх
C++
1
2
3
4
5
6
tmp=a[0][0];
a[0][0]=a[1][0];
a[1][0]=a[2][0];
a[2][0]=a[3][0];
a[3][0]=a[4][0];
a[4][0]=tmp;
вниз
C++
1
2
3
4
5
6
tmp=a[4][0];
a[4][0]=a[3][0];
a[3][0]=a[2][0];
a[2][0]=a[1][0];
a[1][0]=a[0][0];
a[0][0]=tmp;
сможешь в цикл завернуть?
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.01.2015, 17:34

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

Циклический сдвиг строки матрицы в зависимости от чётности минимального элемента
12. Дана матрица А. Если минимальный элемент строки матрицы четный, выполнить циклический сдвиг...

Логический сдвиг влево,логический сдвиг вправо,алгоритм обмена двух переменных,циклический сдвиг
Битовые сдвиги.FW4,msstudio 13,на C# 1)Реализовать быстрое умножение на 2(логический сдвиг влево)...

Матрица. Для каждой строки дважды произвести циклический сдвиг элементов влево
Ввести матрицу A n×m , вывести ее. В матрице для каждой строки дважды произвести циклический сдвиг...

Ребят я не могу понять где ошибка (циклический сдвиг элементов массива вправо)
Вот дана такая задача Напишите программу, которая циклически сдвигает элементы массива вправо (0-й...


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

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

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