0 / 0 / 0
Регистрация: 23.10.2014
Сообщений: 5
1

Добавление столбца в начало матрицы

23.10.2014, 14:35. Показов 994. Ответов 3
Метки нет (Все метки)

Добрый день, помогите решить проблему, не получается добавить столбец в начало динамического двумерного массива:

Функция которая отвечает у меня за это действие:

C++
1
2
3
4
5
6
7
8
9
10
11
int** add_col(int** matrix, int r, int c)
{
    int** tmp = new int*[r + 1];
    for (int i = 0; i < r; i++)
        tmp[i+1] = matrix[i];
    tmp[0]=new int[c];
    for (int i = 0; i < c; i++)
        tmp[r][0] = rand()%20 - 0;
 
  return tmp;
}
вызов функции в теле главной функции:

C++
1
case 3: mat = add_col(mat, rows, cols); break;
Листинг программы:

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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include "stdafx.h"
#include <ctime>
#include <iostream>
using namespace std;
 
int* form_arr(int size)
{
    int* arr = new int[size];
    cout << "Pamiat' videlena dlia massiva\n";
    return arr;
}
 
void create_arr(int* arr,int size)
{
    for(int* i = arr; i != arr + size;i++)
        *i = rand() % 20-10;
    cout << "Massiv sformirovan";
}
 
void print_arr(int* arr, int size)
{
    for(int *i = arr; i != arr + size; i++)
        cout << *i << " ";
}
 
 
void del_arr( int* arr, int size)
{
    int k,n;
    cin >> k; cin >> n;
    for (int i = k; i < size - n; i++)
        {   
        arr[i] = arr[i + n];
        size -= n;
        }
 
    for(int i = 0; i<size; i++)
        cout << arr[i] << ' ';
    }
 
//------------------------------------------------------------------------------------------------------------------------------
int** form_mat(int r,int c)
{
    int** a = new int*[r];
    for(int i = 0; i < r; i++)
        {
            a[i] = new int[c];
        
        }
    return a;
}
 
void create_mat(int**mat, int r, int c)
{
    for(int i = 0; i < r; i++)
        for(int k = 0;k < c; k++)
            mat[i][k]=rand()%20-10;
}
 
void print_mat(int**mat, int r, int c)
{
    for(int i = 0; i < r; i++)
    {
        for(int k = 0; k < c; k++)
            cout << mat[i][k] <<'\t';
        cout << endl;
    }
}
 
int** add_col(int** matrix, int r, int c)
{
    int** tmp = new int*[r + 1];
    for (int i = 0; i < r; i++)
        tmp[i+1] = matrix[i];
    tmp[0]=new int[c];
    for (int i = 0; i < c; i++)
        tmp[r][0] = rand()%20 - 0;
 
  return tmp;
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    int size, k, k1;
    cout << "Input size = "; cin >> size;
    int* arr=form_arr(size);
    do
    {
        cout << "1. Formirovanie massiva\n";
        cout << "2. Pechat massive\n";
        cout << "3. Udalenie iz massiva\n";
        cout << "4. Vihod\n";
        cout << "-------------------------------" << endl;
        cout << "Vibirite deistvie: ";
        cin >> k;
        switch (k)
        {
            case 1: create_arr(arr,size); break;
            case 2: print_arr(arr,size); break;
            case 3: del_arr(arr,size); break;
        }
    }
    while (k!=4);
    delete [] arr;
 
    int rows, cols;
    cout << "Vvedite kol-vo strok"; cin >> rows;
    cout << "Vvedite kol-vo stolbcov"; cin >> cols;
    int **mat = form_mat(rows,cols);
    do
    {
        cout << "1. Formirovanie matrici\n";
        cout << "2. Pechat matrici\n";
        cout << "3. Dobovlenie stolbca\n";
        cout << "4. Vihod\n";
        cout << "-------------------------------" << endl;
        cout << "Vibirite deistvie: ";
        cin >> k1;
        switch (k1)
        {
            case 1: create_mat(mat, rows, cols); break;
            case 2: print_mat(mat, rows, cols); break;
            case 3: mat = add_col(mat, rows, cols); break;
        }
    }
    while (k1 != 4);
 
    system("pause");
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2014, 14:35
Ответы с готовыми решениями:

В каждом столбце матрицы D[N,M] нулевые элементы переставить в начало столбца
В каждом столбце матрицы D нулевые элементы переставить в начало столбца. Помогите с задачей,...

Добавление элементов в начало матрицы и удаление их последних вхождений
*Нахожусь на начальном этапе изучения Python matrix = , , , , ]

Добавление нового столбца в DataGridView и в первую строку данного столбца добавление значения из textbox
Привет всем! Народ подскажите как мне сделать чтобы через кнопу Button добавлялся новый столбец в...

Сделать, чтобы добавление происходило по номеру столбца, и номер столбца был переменной
ADOQuery1.SQL.Add('INSERT INTO main(fio,pol) VALUES(''Кравчук Иван Иванович'',''мужской'')'); ...

3
7166 / 6141 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
23.10.2014, 14:39 2
C++
1
tmp[0][i] = rand()%20 - 0;
0
361 / 318 / 218
Регистрация: 21.02.2013
Сообщений: 748
23.10.2014, 14:41 3
C++
1
for (int i = 0; i < c; i++) tmp[i][0] = rand()%20 - 0;
0
шКодер самоучка
2153 / 1862 / 910
Регистрация: 09.10.2013
Сообщений: 4,085
Записей в блоге: 7
23.10.2014, 14:56 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int** add_col(int** m, size_t r, size_t c, bool need_del = true) {
    int** t;
    t = new int*[r];
    for(size_t i=0; i<r; ++i) {
        t[i] = new int[c+1];
        t[i][0] = rand()%20;
        for(size_t j=0; j<c; ++j)
            t[i][j+1] = m[i][j];
        if(need_del)
            delete[] m[i];
    }
    if(need_del)
        delete[] m;
    return t;
}
Вы путаете местами столбцы и строки(хотя это под каким углом смотреть), строки добавлять проще
Считайте что не существует многомерных массивов, а есть массивы содержащие другие массивы
Т.Е. 2хмерный массив на самом деле это одномерный массив строк, длина строк причем может быть разной
Тогда станет ясно, что для добавления столбца нужно в начало каждой строки добавить по элементу
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.10.2014, 14:56
Помогаю со студенческими работами здесь

Добавление в начало списка
Есть линейный двунаправленный список и необходимость добавить последний элемент в начало k раз....

Добавление в начало вектора
нужно добавить элементы(очень много) в начало вектора ниже строка занимает очень много времени,...

Добавление в начало списка
при нажатии на кнопку содержимое текст бокса добавляется в первый Item(listbox1) токо добавляется...

Добавление в начало и конец
Не подскажите как сделать вот такую фишку. Есть файл и внем слово. Как с помощью команды cat...


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

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

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