14 / 14 / 2
Регистрация: 21.10.2012
Сообщений: 140
1

Сдвиг массива (вправо или влево)

23.10.2012, 20:40. Показов 1439. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Программа должна по выбору пользователя осуществить циклический сдвиг определенное количество раз...

при сдвиге влево функция j2 = (j + (zdvig % ncol))%ncol; работает коректно... А если вправо то по логике должна выглядить j2 = (j - (zdvig % ncol))%ncol; --- работает не корректно... Сдвигает но одну строку выводит набор цифр...

C++ (Qt)
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <iostream> 
#include <time.h>
#include <stdlib.h>
 
using namespace std; 
 
 
 
void reverce (int **arr, int nrow, int ncol)
{
    int n2 = 0;
    int position, zdvig;
    int i, j, i2, j2;
 
    cout << "Какой параметр вы хотите сдвинуть?" << endl << "1. Строки" << endl << "2. Столбцы" << endl;
    cin >> n2;
    
    if (n2 == 2)
        {
            cout << "В какую сторону сдвинуть массив?" << endl << "1. Влево" << endl << "2. Вправо" << endl << "Сделайте свой выбор: "; 
            cin >> position;
 
            
            if (position == 1)
                {
                    cout << "Введите необходимый сдвиг: ";
                    cin >> zdvig;
 
                    for(i = 0; i< nrow; i++)
                        {
                            for(j = 0; j < ncol; j++)
                                {
                                    j2 = (j + (zdvig % ncol))%ncol;
                                    cout << arr[i][j2] << "\t";
                                }
                            cout<<endl;
                        }
                }
        }
}
 
int main()
{   
    setlocale(LC_ALL,"Russian");
    srand(unsigned (time(NULL)));
    int nrow, ncol, n1 = 0;
    int i, j, j2;
    int zdvig;
    
    cout << "Введите колличество строк: ";
    cin >> nrow;
    cout << endl << "Введите количество столбцов: ";
    cin >> ncol;
        
    // Объявляется переменная типа "указатель на указатель на int"
    // и выделяется память под массив указателей на строки массива
    int **arr = new int*[nrow]; 
    //Цикл выделяет память под каждую строку массива 
    for (i = 0; i < nrow; i++)
    //Каждому элементу массива указателей на строки присваевается адресс начала участка памяти
    arr[i] = new int [ncol];
 
    
 
    cout << "Заполнить массив: " << endl << "1. Случайными числами" << endl << "2. Вручную ввести числа" << endl << "Сделайте свой выбор: ";
    cin >> n1;
 
        switch(n1)
            {
                case 1:
                    for(int i = 0; i < nrow; i++)
                        for(int j = 0; j < ncol; j++)
                            arr[i][j] = rand()%100;
                    cout << endl << "Сгенерированный массив: " << endl;
                    print(arr, nrow, ncol);
                    break;
                
                case 2:
                    cout << endl << "Введите элементы массива: " ;
                        for(int i = 0; i < nrow; i++)
                            for(int j = 0; j < ncol; j++)
                                cin >> arr[i][j];
                    cout << "Ваш массив: " << endl;
                    print(arr, nrow, ncol);
                    break;
                
                default :
                    cout << "Ваш выбор не корректен" << endl;
                    break;
            }
 
        cout << endl << endl << endl;
 
 
        reverce(arr, nrow, ncol);
        
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2012, 20:40
Ответы с готовыми решениями:

Циклический сдвиг битов в байте влево или вправо
Кто-нибудь пробовал реализовать такую задачу на С++. Если да, то какой алгоритм? Например, если...

Циклический сдвиг массива влево и вправо
Нужно реализовать циклический сдвиг массива влево и вправо! Например есть массив int- {121605}?...

Обеспечить сдвиг столбцов матрицы вправо или влево в зависимости от знака вводимого числа сдвигов
Дана целочисленная матрица размерности n x m. Обеспечить сдвиг столбцов матрицы вправо или влево в...

Где и когда уместно применять операции << (сдвиг влево) и >> (сдвиг вправо)?
Кто может привести пример , когда нужно использовать операции: 1) &lt;&lt; сдвиг влево 2) &gt;&gt; сдвиг...

0
23.10.2012, 20:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.10.2012, 20:40
Помогаю со студенческими работами здесь

Дана целочисленная матрица размерности n x m. обеспечить сдвиг столбцов вправо или влево в зависимости от знака вводимого числа сдвигов k
Здравствуйте помогите с задачей по с++. Дана целочисленная матрица размерности n x m. обеспечить...

Побитовый сдвиг влево и вправо
Что выполнится быстрее - сдвиг влево или сдвиг вправо? И как замерить время выполнения каждой из...

Осуществить сдвиг влево/ вправо элементов
Разработать подпрограммы (функции или процедуры) для следующих алгоритмов над массивом. Входным...

Выполнить циклическую перестановку элементов массива влево или вправо
Сформулировать одномерный массив целых чисел, используя датчик случайных чисел. По запросу...

Циклический сдвиг целого числа на n разрядов влево и вправо
Такая ситуация. Написать функцию, циклически сдвигающую целое число на N разрядов вправо или влево,...

Циклический сдвиг односвязного списка, организованного структурами, на N элементов вправо/влево
Подскажите, как лучше всего циклически сдвинуть односвязный список, организованный структурами, на...


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

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

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