21 / 4 / 2
Регистрация: 05.07.2015
Сообщений: 126
1

Динамические массивы,циклический сдвиг столбцов массива

19.09.2015, 15:44. Показов 1467. Ответов 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
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
#include<iostream>
#include<stdlib.h>
#include<ctime>
int** CreateAnArray(int raw, int col);
void InPut(int**T, int raw, int col);
void OutPut(int**T, int raw, int col);
void Sorting(int**&T, int raw, int col, int elem1, int elem2);
using namespace std;
 
int main()
{
    int raw, col;
    cout<<"Please enter the raw and colomn:\n";
    cin>>raw>>col;
    int**T=CreateAnArray(raw, col);
    InPut(T, raw, col);
    OutPut(T, raw, col);
    int elem1, elem2;
    cout<<"Please enter elements to be sorted\n";
    cin>>elem1>>elem2;
    Sorting(T, raw, col, elem1, elem2);
    OutPut(T, raw, col);
    
}
int** CreateAnArray(int raw, int col)
{
int**A=new int*[raw];
for(int i=0; i<raw; i++)
    A[i]=new int[col];
return A;
}
void InPut(int**T, int raw, int col)
{
    for(int i=0; i<raw; i++)
    {
        for(int j=0; j<col; j++)
            T[i][j]=1+rand()%10;
    }
}
void OutPut(int**T, int raw, int col)
{
    for(int i=0; i<raw; i++)
    {
        if(T[i])
        {
        for(int j=0; j<col; j++)
            cout<<T[i][j]<<"\t";
        }
        cout<<"\n";
    }
}
void Sorting(int**&T, int raw, int col, int elem1, int elem2)
{
    int col2=elem2-elem1;
    int**A=new int*[raw];
    int**B=new int*[raw];
    
    for(int i=0; i<raw;i++)
    {
        for(int j=0; j<col2; j++)
        {
            A[i][j]=T[i][j];
        }
    }
    for(int i=0; i<raw;i++)
    {
        for(int j=0, k=elem2; j<(col-col2); j++, k++)
        {
            B[i][j]=T[i][k];
        }
    }
    delete []T;
    for(int i=0; i<raw; i++)
    {
        for(int j=0, k=0; j<col; j++)
        {
            if(j<(col-col2))
            {
                T[i][j]=B[i][j];
                continue;
            }
            else
                T[i][j]=A[i][k++];
        }
    }
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.09.2015, 15:44
Ответы с готовыми решениями:

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

Выполнить циклический сдвиг массива на заданное количество столбцов
Дан двумерный массив размерностью N x M, заполненный случайными числами из диапазона от 0 до 100....

Выполнить циклический сдвиг двумерного массива на заданное количество столбцов
Дан двумерный массив размерностью N x M, заполненный случайными числами из диапазона от 0 до 100....

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

2
Модератор
Эксперт С++
12104 / 9775 / 5910
Регистрация: 18.12.2011
Сообщений: 26,246
19.09.2015, 16:02 2
1. В функции Sorting Вы создаете массивы A,B.
Для их создания используйте уже имеющуюся функцию CreateAnArray.

2. В строке 72 удалили память выделенную под указатели. А потом пытаетесь к ним обратиться.
Возможно, Вы хотели сделать что-то типа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void Sorting(int**&T, int raw, int col, int elem1, int elem2)
{
     int**A=new int*[raw];
    
    for(int i=0; i<raw;i++)
        A[i]=T[i];
    for(int i=0; i<raw; i++)
    {
            if(i<col)
                T[i]=A[i+col];
            else
                T[i+col]=A[i-col];
    }
    delete[] A;
 }
Но так можно делать только для перестановки строк.
1
21 / 4 / 2
Регистрация: 05.07.2015
Сообщений: 126
19.09.2015, 16:15  [ТС] 3
Спасибо, получилось

Добавлено через 6 минут
Мне нужно было сдвинуть столбцы, для этого, я создала 2 дополнительных массива, в одном запоминалась первая часть, в другом - вторая часть, а в конце - обновить первичный массив.
Алгоритм в принципе правильный, но он почему-то не работал
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.09.2015, 16:15
Помогаю со студенческими работами здесь

Одномерные массивы (циклический сдвиг всех элементов массива на одну позицию влево)
Написать программу, которая делает циклический сдвиг всех элементов массива а1, а2, ..., аn на одну...

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

Выполнить циклический сдвиг столбцов матрицы
Здравствуйте, помогите, пожалуйста, написать эту программу: Динамически выделить память под N*M...

Написать функцию, осуществляющую циклический сдвиг строк и/или столбцов заданной матрицы
2. Дана матрица порядка MxN (M строк, N столбцов). Необходимо заполнить ее значениями и написать...


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

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

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