Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 06.09.2014
Сообщений: 38
1

Изменить размер динамического массива

08.09.2014, 21:00. Показов 1696. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дан класс, который описывает двумерный массив
C++
1
2
3
4
class matr{
private:
    int **matrix; 
    int rows, columns;
Создается объект myMatrix, заполняется матрица. Далее требуется изменить количество строк и столбцов, данные вводятся с клавиатуры. Если количество строк и столбцов больше, чем в прежней матрице, новым ячейкам присвоить значение 0

Перегрузка оператора:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 matr operator +(const matr &R){
        matr K(R.rows, R.columns);
        for (int i = 0; i < K.rows; i++){
                for (int j = 0; j < K.columns; j++){
                    if (matrix[i][j]){ //если элемент существует
                        K.matrix[i][j] = matrix[i][j];
                    }
                    else{
                        K.matrix[i][j] = 0;
                    }
                }
            }
        return K;
    }
int main...
C++
1
2
3
4
5
6
7
8
9
10
cout << endl << "Enter the number of rows ";
                while (d < 1){
                    cin >> d;
                }
cout << endl << "Enter the number of colums ";
                while (e < 1){
                    cin >> e;
                }
                matr R(d,e);
                myMatrix = myMatrix + R;
Программа вылетает при обращении к строке if (matrix[i][j]){
Как сделать проверку на существование ячейки в матрице? Или проблема в чем-то другом?
Спасибо тем, кто поможет!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.09.2014, 21:00
Ответы с готовыми решениями:

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

Функция с применением динамического массива, чтобы размер массива увеличивался по мере необходимости
Ребята, подскажите, кто может, каким образом создать функцию с применением динамического массива,...

Размер динамического массива
Как узнать сколько заполненных елементов в динамическом массиве, если под него выделено 400...

Размер динамического массива
Здравствуйте, есть ли какая функция, которая возвращает размер динамического массива (желательно...

6
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.09.2014, 21:14 2
Такой класс предполагает наличие явного конструктора копирования, явного оператора присваивания и деструктора.
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
08.09.2014, 21:16 3
Если надо взять данные из R:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
matr operator +(const matr &R)
{
        int r=max(this->rows,R.rows);
        int c=max(this->columns,R.columns);
        matr K(r, c);
// обнуляем всю матрицу
        for (int i = 0; i < r; i++){
                for (int j = 0; j < c; j++)
                        K.matrix[i][j] = 0;
// копируем матрицу R
        for (int i = 0; i < K.rows; i++){
                for (int j = 0; j < K.columns; j++)
                        K.matrix[i][j] = R.matrix[i][j];
        return K;
    }
Если надо взять данные из this:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
matr operator +(const matr &R)
{
        int r=max(this->rows,R.rows);
        int c=max(this->columns,R.columns);
        matr K(r, c);
// обнуляем всю матрицу
        for (int i = 0; i < r; i++){
                for (int j = 0; j < c; j++)
                        K.matrix[i][j] = 0;
// копируем матрицу this
        for (int i = 0; i < K.rows; i++){
                for (int j = 0; j < K.columns; j++)
                        K.matrix[i][j] = matrix[i][j];
        return K;
    }
0
1 / 1 / 0
Регистрация: 06.09.2014
Сообщений: 38
08.09.2014, 21:33  [ТС] 4
Так а если у меня была матрица 5 на 5. А изменить ее надо на матрицу 6 на 6. Когда я в цикле дошла до 6го столбца у меня получается ссылка на пустое место, потому что в изначальной матрице такого элемента не существует

Добавлено через 1 минуту
А зачем тут конструктор копирования и явного оператор присваивания?
Деструктор есть
C++
1
2
3
4
5
6
~matr(){ 
        for (int i = 0; i < this -> rows; i++){
            delete [] this -> matrix[i];
        }
        delete [] this -> matrix;
    }
Добавлено через 8 минут
Цитата Сообщение от zss Посмотреть сообщение
K.matrix[i][j] = matrix[i][j];
Вы же при некоторых условиях пытаетесь скопировать пустую область
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
08.09.2014, 21:41 5
Пардон, перепутал индексы

Если надо взять данные из this:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
matr operator +(const matr &R)
{
        int r=max(this->rows,R.rows);
        int c=max(this->columns,R.columns);
        matr K(r, c);
// обнуляем всю матрицу
        for (int i = 0; i < r; i++){
                for (int j = 0; j < c; j++)
                        K.matrix[i][j] = 0;
// копируем матрицу this  в левую верхнюю часть матрицы K
        for (int i = 0; i < this->rows; i++){
                for (int j = 0; j < this->columns; j++)
                        K.matrix[i][j] = matrix[i][j];
        return K;
    }
0
1 / 1 / 0
Регистрация: 06.09.2014
Сообщений: 38
08.09.2014, 21:49  [ТС] 6
Предположим у нас есть матрица 3х3. А надо создать матрицу 2х4
Путем выбора максимума вы создаете матрицу 3х4
Сначала ее заполняете нулями, а потом копируете все значения из матрицы 3х3
Но в самом конце выходит матрица 3х4, а нужно, чтобы вышла 2х4
Или я что-то опять не поняла?
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
09.09.2014, 04:18 7
Как сделать проверку на существование ячейки в матрице?
C++
1
2
3
int get(int _rows, _columns){return _rows<rows&&_columns<columns?matrix[_rows][_columns]:0;}
...
K.matrix[i][j]=get(i,j)+R.get(i,j);
А зачем тут конструктор копирования и явного оператор присваивания?
Затем, что иначе return K; создаст второй объект владеющий указателем на K.matrix. Потом эти два объекта попытаются прибить один указатель и стукнутся лбами.
1
09.09.2014, 04:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.09.2014, 04:18
Помогаю со студенческими работами здесь

Размер динамического массива
Здравствуйте. Есть такой код: #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;clocale&gt;...

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

Узнать размер динамического массива
Здравствуйте. Пытаюсь сделать динамический массив и вывести его размерность. Выводится размерность...

Размер динамического массива. Маленькая деталь)
Текст задания:Программа должна создать два массива со случайными элементами из диапазона , по 10...


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

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