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

Вставка нового элемента в двумерный динамический массив дополнить код

18.09.2014, 00:46. Просмотров 511. Ответов 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
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
#include<iostream>
#include<iomanip>
using namespace std;
 
int** CreateMatrix(int, int);
void FillMatrix(int** const, int, int);
void PrintMatrix(int** const, int, int);
void DeleteMatrix(int** &, int);
void AddRowInMatrix(int** &, int &, const int, int* &);
int** AddColToMatrix(int**, const int, int&, int*&);
int** DeleteRowMat(int** arr, int deletes, int &row);
int** DeleteColMat(int** arr, int deletess, int &col);
int** InsertEllement (int** arr, int &row, const int col, int* &insert_row, int index);
 
 
int* CreateArray(int);
void FillArray(int* const, int);
void PrintArray(int * const, int);
void DeleteArray(int* &);
 
int Menu();
 
int main() {
    setlocale(LC_CTYPE, "Ukrainian"); //Задаємо українську мову
    enum Operations{CreateDMatrix =1,FillDMatrix,PrintDMatrix,AddRowToDMatrix,AddColToDMatrix,DeleteDMatrix,DeletRM,DeletCM,AddInRow,Exit = 0};
 
    int row = 0, col = 0;
    int** arr = NULL;
    int* insert_arr = NULL;
    int* insert_row = NULL;
    int choice = -1;
    while (choice) {
        choice = Menu();
        switch (choice) {
 
        case CreateDMatrix:
            cout << "Введите столбцы и рядки: ";
            cin >> row >> col;
            arr = CreateMatrix(row, col);       
            break;
 
        case FillDMatrix:
            FillMatrix(arr, row, col);      
            break;
 
        case PrintDMatrix:
            PrintMatrix(arr, row, col);
            break;
 
        case AddRowToDMatrix:
            insert_arr = CreateArray(col);
            FillArray(insert_arr, col);
            cout << "\nРядок для добавления: ";
            PrintArray(insert_arr, col);
            AddRowInMatrix(arr, row, col, insert_arr);
            cout << "\nРядок добавлен\n";
            break;
 
        case AddColToDMatrix:
            insert_arr = CreateArray(row);
            FillArray(insert_arr, row);
            cout << "\Столбец для добавления: ";
            PrintArray(insert_arr, row);
            arr = AddColToMatrix(arr, row, col, insert_arr);
            cout << "\Столбец добавлен\n";
            break;
 
        case DeleteDMatrix:
            DeleteMatrix(arr, row);
            cout << "\nМатрица была удалена!\n";
            break;
 
        case DeletRM:
            int deletes;
            cout<<"Рядок ? ";
            cin>>deletes;
            arr=DeleteRowMat(arr,deletes,row);
            break;
 
        case DeletCM:
            int deletess;
            cout<<"Столбец ? ";
            cin>>deletess;
            arr=DeleteColMat(arr,deletess,col);
            break;
 
        case AddInRow:
            int index;
            cout<<" Индекс ? ";
            cin>>index;
                        insert_row = CreateArray(row);
            FillArray(insert_row, row);
            cout << "\Столбец для добавления: ";
            PrintArray(insert_row, row);
            InsertEllement (arr,row,col,insert_row,index);
            break;
 
        case Exit:
            cout << "Вы вышли из софта\n";
            break;
 
        default:
            cout << "Эмм, повторите еще раз!\n";
        }
    }
    return 0;
}
 
int** CreateMatrix(int row, int col) {
    int** arr = new int*[row];
    for (int i = 0; i < row; i++) {
        arr[i] = new int[col];
    }
    cout << "\n Весь мир это - Матрица, Вы создали только что еще одну! \n";
    return arr;
}
 
void FillMatrix(int** const arr, int row, int col) {
    if (arr) {
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                arr[i][j] = i * col + j;
            }
        }
        cout << "\n Матрица успешно заполнена! \n";
    } else {
        cout << "\n Вы еще не создали матрицу, мой господин!\n";
    }
}
 
void PrintMatrix(int** const arr, int row, int col) {
    cout << endl;
    if (arr) {
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                cout << setw(4) << arr[i][j];
            }
            cout << endl;
        }
    } else {
        cout << "\n Прошу, создайте матрицу\n";
    }
    cout << endl << endl;
}
 
void DeleteMatrix(int** &arr, int row) {
    for (int i = 0; i < row; i++) {
        delete[] arr[i];
    }
    delete[] arr;
    arr = NULL;
}
 
int** DeleteRowMat(int** arr, int deletes, int &row) {
    for (int i = deletes - 1; i < row - 1; i++) {
        arr[i] = arr[i + 1];
    }
    cout<<"Морфеус удалил один Рядок Матрицы!";
    row--;
    return arr;
}
 
int** DeleteColMat(int** arr, int deletess, int &col) {
    for (int i = deletess - 1; i < col - 1; i++) {
        arr[i] = arr[i + 1];
    }
    cout<<"Морфеус удалил один Столбец Матрицы!";
    col--;
    return arr;
}
 
int** InsertEllement (int** arr, int &row, const int col, int* &insert_row, int index) {
    int** newArray = CreateMatrix(row, col);
    for (int i = 0; i < index; ++i) 
        newArray[i] = arr[i];
    newArray[index] = insert_row;
    for (int i = index; i < row-1; ++i) 
        newArray[i+1] = arr[i]; 
    return newArray;
}
 
void AddRowInMatrix(int** &arr, int &row, const int col, int* &insert) {
    row++;
    int** tmp = CreateMatrix(row, col);
    for (int i = 0; i < row - 1; i++) {
        for (int j = 0; j < col; j++) {
            tmp[i][j] = arr[i][j];
        }
    }
 
    DeleteMatrix(arr, row - 1);
    for (int j = 0; j < col; j++) {
        tmp[row - 1][j] = insert[j];
    }
    DeleteArray(insert);
    arr = tmp;
}
 
 
int** AddColToMatrix(int** arr, const int row, int& col, int* &insert) {
    for (int i = 0; i < row; i++) {
        int *tmp = new int[col + 1];
        for (int j = 0; j < col; j++) {
            tmp[j] = arr[i][j];
        }
        tmp[col] = insert[i];
        delete[] arr[i];
        arr[i] = tmp;
    }
    DeleteArray(insert);
    col++;
    return arr;
}
 
 
int* CreateArray(int size) {
    int* arr = new int[size];
    return arr;
}
 
void FillArray(int* const arr, int size) {
    //if (arr) {
        for (int i = 0; i < size; i++) {
            arr[i] = i;
        }
    //} else {
    //  cout << "\n Весь мир сейчас рухнет, Быстрее создайте матрицу! \n";
    //}
}
 
void PrintArray(int * const arr, int size) {
    cout << endl;
    //if (arr) {
 
        for (int i = 0; i < size; i++) {
            cout << arr[i] << "  ";
        }
    //} else {
    //  cout << "Нео прими КРАСНУЮ ТАБЛЕТКУ!!!\n";
    //}
    cout << endl;
}
 
void DeleteArray(int* &arr) {
    delete[] arr;
    arr = NULL;
}
 
int Menu() {
    int choice;
    cout <<"\t.........::Выберите операцию::.........\n";
    cout <<"\t| ___________________________________ |\n";
    cout <<"\t| [1] - Нео создаст Матрицу          |\n";
    cout <<"\t| [2] - Заполнить Матрицу             |\n";
    cout <<"\t| [3] - Нео покажет Вам Матрицу        |\n";
    cout <<"\t| [4] - Дополнить Матрицу Рядком      |\n";
    cout <<"\t| [5] - Дополнить Матрицу Столбцем    |\n";
    cout <<"\t| [6] - Морфеус удалит Рядок         |\n";
    cout <<"\t| [7] - Морфеус удалит Столбец      |\n";
    cout <<"\t| [8] - Нео удалит Матрицу           |\n";
    cout <<"\t| [9] - Удалить Рядок по индексу     |\n";
    cout <<"\t| ___________________________________ |\n";
    cout <<"\t| [0] - Принять Синю Таблетку        |\n";
    cout <<"\t| ___________________________________ |\n";
    cout<<endl;
    cout<<"Введите номер операции : ";
    cin >> choice;
    return choice;
}


а вот тот самый код
C++
1
2
3
4
5
6
7
8
9
int** InsertEllement (int** arr, int &row, const int col, int* &insert_row, int index) {
    int** newArray = CreateMatrix(row, col);
    for (int i = 0; i < index; ++i) 
        newArray[i] = arr[i];
    newArray[index] = insert_row;
    for (int i = index; i < row-1; ++i) 
        newArray[i+1] = arr[i]; 
    return newArray;
}
Помогите пожалуйста с этим, все сам сделал а вот это никак понять не могу
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2014, 00:46
Ответы с готовыми решениями:

Вставка нового элемента в массив (дополнить код)
Здравствуйте, нужна помощь. Суть такова имеется Куча, и туда нужно Вставить...

Вставка нового элемента в массив
В одномерном массиве, элементы которого - целые числа, произвести следующие...

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

Gcc вставка элемента в двумерный массив
Как вставить элемент в массив, заполненный random числами ? ms= 0 получается...

Исправить код, использующий динамический двумерный массив
#include&lt;iostream&gt; #include&lt;time.h&gt; #include&lt;iomanip&gt; using namespace std; ...

4
zss
Модератор
Эксперт С++
7097 / 6628 / 4196
Регистрация: 18.12.2011
Сообщений: 17,474
Завершенные тесты: 1
18.09.2014, 08:10 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
int** InsertEllement (int** arr, int &row, const int col, int* &insert_row, int index) {
    int** newArray = CreateMatrix(row, col);
    for (int i = 0; i < index; ++i) 
       for (int j = 0; i < col; ++j)
        newArray[i][j] = arr[i][j];
    for (int j = 0; i < col; ++j)
         newArray[index][j] = insert_row[j];
    for (int i = index+1; i < row; ++i) 
       for (int j = 0; i < col; ++j)
           newArray[i][j] = arr[i-1][j];  
    return newArray;
}
Можно не создавать новую матрицу, а слепить из старых
C++
1
2
3
4
5
6
7
8
9
10
int** InsertEllement (int** arr, int &row, const int col, int* &insert_row, int index) {
    int** newArray;         // удаляем = CreateMatrix(row, col);
    newArray=new int*[row+1];
    for (int i = 0; i < index; ++i) 
        newArray[i] = arr[i];
    newArray[index] = insert_row;
    for (int i = index+1; i < row+1; ++i) 
        newArray[i] = arr[i-1]; 
    return newArray;
}
1
Gameer
0 / 0 / 1
Регистрация: 24.06.2014
Сообщений: 74
18.09.2014, 09:01  [ТС] #3
Спасибо большое, еще в кейсе нужно присвоить arr = Function; Спасибо большое!

Добавлено через 9 минут
Подскажите еще, что не правильно сделал для Столбцов ?
C++
1
2
3
4
5
6
7
8
9
10
11
int** InsertColEllement (int** arr, int &col, int* &insert_col, int indexs) {
    int** newArrays;
    newArrays=new int*[col+1];
    for (int i = 0; i < indexs; ++i) 
        newArrays[i] = arr[i];
    newArrays[indexs] = insert_col;
    for (int i = indexs+1; i < col+1; ++i) 
        newArrays[i] = arr[i-1]; 
    return newArrays;
 
}
0
zss
Модератор
Эксперт С++
7097 / 6628 / 4196
Регистрация: 18.12.2011
Сообщений: 17,474
Завершенные тесты: 1
18.09.2014, 09:50 #4
Для столбцов так не получится, т.к. надо удалять старые строки и создавать новые на 1 длиннее.
Поэтому, проще скопировать.
C++
1
2
3
4
5
6
7
8
9
10
11
12
int** InsertColEllement (int** arr, int row, int col, int* &insert_col, int index) {
    int** newArray = CreateMatrix(row, col+1);
    for (int i = 0; i < row; ++i) 
       for (int j = 0; i < index; ++j)
        newArray[i][j] = arr[i][j];
    for (int j = 0; i < row; ++j++)
         newArray[i][index] = insert_col[j];
    for (int i = 0; i < row; ++i) 
       for (int j = index+1; i < col+1; ++j)
           newArray[i][j] = arr[i][j-1];  
    return newArray;
}
Кстати, а Вам было понятно, что если матрица слеплена из старых,
то старые (arr и insert_row) перестают существовать и их удалять не надо?
1
Gameer
0 / 0 / 1
Регистрация: 24.06.2014
Сообщений: 74
18.09.2014, 10:38  [ТС] #5
Ошибка выбивает, ввожу 5 5 матрицу. Потом заполняю, вывожу. Выбираю пункт вставить столбец, показывается что будет вставляться и все зависает.

Да понятно.

Все спасибо большое! Подправил код, может кому пригодится, оставлю здесь:

C++
1
2
3
4
5
6
7
8
9
10
11
12
int** InsertColEllement (int** arr, int row, int col, int* &insert_col, int index) {
    int** newArrays = CreateMatrix(row, col+1);
    for (int i = 0; i < row; ++i) 
       for (int j = 0; j < index; j++)
        newArrays[i][j] = arr[i][j];
    for (int j = 0; j < row; j++)
         newArrays[j][index] = insert_col[j];
    for (int i = 0; i < row; ++i) 
       for (int j = index+1; j < col+1; j++)
           newArrays[i][j] = arr[i][j-1];  
    return newArrays;
}
Добавлено через 12 минут
Хм, не вставляет а заменяет почему то а заменяет

Добавлено через 24 минуты
И первый для рядков не добавляет а заменяет

Добавлено через 7 минут
Всем спасибо, увидел проблему. Решил. нужно было в кол & и перед реторн кол++ и ров ++ (для каждой функции отдельно)

Добавлено через 10 секунд
Всем спасибо, увидел проблему. Решил. нужно было в кол & и перед реторн кол++ и ров ++ (для каждой функции отдельно)
0
18.09.2014, 10:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2014, 10:38

Динамический двумерный массив (получить адрес первого элемента первой строки)
есть двумерный массив ........ // объявление двумерного динамического...

Вставка нового элемента в ListCtrl
Проблема с вставкой нового элемента в ListCtrl LVITEM newItem; ...

Как дополнить существующий динамический массив?
Есть существующий, заполненный динамический массив, он представляет из себя...


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

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

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