Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
CheburatorUA
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 24
#1

Как по скопировать обновленный двумерный динамический массив - C++

18.04.2014, 14:43. Просмотров 216. Ответов 0
Метки нет (Все метки)

День добрый.
Третий день пытаюсь найти решение.
Необходимо создать матрицу и добавить в нее строку. В оригинале задача гораздо больше. Она должна быть - с меню и т.п., но я попытался выделить именно ошибку, на которой она глохнет у меня, может кто-то подскажет как решить.

Суть такова:
1. создаем первый двумерный динамический массив в виде матрицы, заполняем его случайными цифрами.
2. создаем такой же второй динамический массив и копируем в него данные первого массива.
3. удаляем первый динамический массив.
4. по тому же адресу, по которому был первый динамический массив создаем новый массив с таким же названием как и первый + 1строка.
5. копируем с второго массива данные в первый(обновленный) массив, а добавленную строку заполняем нулями.

Вот на 5 пункте выполнение виснет, хотя сама задача компилируется, я уже как не пробовал как не упрощал, не получается. Ошибка на 41 строке я уверен, но не могу понять как правильно сделать. Как мне кажется правильным программа не компилирует, методом научного тыка чтобы хоть скомпилировала получилось только так как внизу, но не работает. Как обновить первый динамический массив по ссылке? Если делать не по ссылке, то у меня появятся два массива с одним название, но по разным адресам, а мне так нельзя.


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
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
void show(int** &,int*,int*);              //показ массива
 
void main ()
{
    setlocale (LC_CTYPE, "russian");
    srand(time(NULL));
    int a=1,
        i=0,
        d1=5,        //строки
        d2=5,
        d21=0,
        d22=0;
    int **mas1= new int *[d1];
    for(i=0; i<d1; i++)
    {
        mas1[i]=new int [d2];
    }
    for(i=0;i<d1;i++)                  
        for(int j=0;j<d2; j++)         // заполняем случайными цифрами от -99 до 99
            mas1[i][j]=rand()%198-99;
    show(mas1,&d1,&d2);
    if (a==1)
    {
        int NStr=2;
        d21=d1;                              // создаем указатели для второго массива
        d22=d2;
        int **mas2= new int *[d21];              //создаем копию массива для использования его данных в дальнейшем
        for(int i=0; i<d1; i++)
            mas2[i]=new int [d22];
        for(int i=0;i<d1;i++)                   //копируем первый массив во второй
            for(int j=0;j<d2; j++)
               mas2[i][j]=mas1[i][j];
        for (int i = 0; i < d1; i++)            // удаляем первый массив
              delete []mas1[i];
          delete []mas1;
        d1+=1;
        int *&mas1=new int [d1];          // создаем обновленный первый массив с удаленной или добавленной строкой
            for(int i=0; i<d1; i++)
                 mas1[i]=*new int [d2];  // вот где-то здесь ошибка
            for(int i=0; i<d1; i++)   //копируем массив 2 в массив 1.
        {
            for(int j=0;j<d2; j++)
            {
                if(i+1==NStr)
                    mas1[i][&j]=0;                //заполняем нулями добавленную строку
                if(i+1<NStr)
                    mas1[i][&j]=mas2[i][j];
                if(i+1>NStr)
                    mas1[i][&j]=mas2[i-1][j];    //поскольку первоначальный массив содержал на одну строку меньше или больше
            }                                   //то при копировании первоначальных данных в обновленный массив
                                                //необходимо учитывать разное количество строк
        }
    }
}
 
 
void show(int** &mas,int* n1,int* n2)
{
    for(int i=0;i<*n1;i++)
        {
            cout<<"\t";
            for(int j=0;j<*n2; j++)
                {
                    if(mas[i][j]>=10)
                        cout<<"  "<<mas[i][j];
                    if(mas[i][j]<10 && mas[i][j]>=0)
                        cout<<"   "<<mas[i][j];
                    if(mas[i][j]<0 && mas[i][j]>-10)
                        cout<<"  "<<mas[i][j];
                    if(mas[i][j]<=-10)
                        cout<<" "<<mas[i][j];
                }
            cout<<endl;
        }
}
Добавлено через 4 минуты

Добавлено через 1 минуту
Я ошибку допустил в названии темы, не могу понять как откорректировать само название темы после публикации на форуме.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2014, 14:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как по скопировать обновленный двумерный динамический массив (C++):

Массив: Как скопировать двумерный массив в другой массив? - C++
Как скопировать двумерный массив в другой массив?

Как создать двумерный динамический массив - C++
Помогите, пожалуйста, в таком вопросе: нужно создать динамический двумерный массив. Да он еще должен быть такой, чтоб длина строк была...

Как реализовать двумерный динамический массив? - C++
Доброго дня суток, форумчане! Подскажите пожалуйста, как реализовать двумерный динамический массив?

Как объявить двумерный динамический массив - C++
int *matrix = new int ; че ругается ? а как сделать если без констант надо ?

Как заполнить двумерный динамический массив? - C++
вот я создал двумерный динамический массив (правильно надеюсь): int row=2; for (int i=0; i&lt;dl; i++){if ('!'==str){row+=1;}}; int...

Как создать динамический двумерный массив - C++
Можно ли создать на С++ динамический двухмерный масив? Как? int z , x ; cin &gt;&gt; z ; cin &gt;&gt; x ; int *arr = new int(z); int *arr1...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2014, 14:43
Привет! Вот еще темы с ответами:

Как объявлять двумерный динамический массив - C++
Доброго времени суток. При выделении памяти для динамического двумерного массива с разным количеством строк и столбцов, под что сначала...

Как заполнить двумерный динамический массив? - C++
Кто может объяснить , как создать динамический двумерный массив и записать в него элементы из файла, при этом подсчитав количество строк и...

Как создать динамический двумерный массив - C++
Динамический одномерный массив p можно сождать примерно так: int N, *p; cin &gt;&gt; N; p= new int А как создать динамический...

Как передать в функцию двумерный динамический массив? - C++
#include &lt;iostream&gt; #include&lt;time.h&gt; #include&lt;cstdlib&gt; using namespace std; void zap(int array, int n) { ...


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

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

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