Форум программистов, компьютерный форум CyberForum.ru

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

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

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

18.04.2014, 14:43. Просмотров 205. Ответов 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 минуту
Я ошибку допустил в названии темы, не могу понять как откорректировать само название темы после публикации на форуме.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2014, 14:43     Как по скопировать обновленный двумерный динамический массив
Посмотрите здесь:
Массив: Как скопировать двумерный массив в другой массив? C++
C++ Как заполнить двумерный динамический массив?
Как создать двумерный динамический массив C++
Как заполнить двумерный динамический массив? C++
C++ Как объявлять двумерный динамический массив
C++ Как создать динамический двумерный массив
C++ Как объявить двумерный динамический массив
C++ Как реализовать двумерный динамический массив?
Как создать динамический двумерный массив C++
Как передать в функцию двумерный динамический массив? C++
C++ Как сделать двумерный динамический массив на 4 столбца ?
C++ Как правильно записать двумерный динамический массив?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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