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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Парсер текстового файла, C++ Builder http://www.cyberforum.ru/cpp-beginners/thread1150784.html
Здравствуйте! Есть проблемы с парсером, вот код: //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include <string> #include <iostream.h>
C++ Error C3867 при вызове функции erase и insert для двумерного вектора Тренируюсь с использованием контейнера std::vector. Появляется ошибка при удалении и вставке, помогите понять почему и как её исправить.... Думаю, что из кода всё будет ясно. vector <float> v1; vector <float> v2; vector < vector <float> > v3; v1.push_back(1); v1.push_back(2); v2.push_back(5); v2.push_back(-3); v3.push_back(v1);v3.push_back(v2); http://www.cyberforum.ru/cpp-beginners/thread1150782.html
C++ IDE в Linux
Проект компилирую в командной строке на минте g++ -o main main.cpp -lpthread -std=c++11 все проходит без ошибок чтобы отладить работу проекта, создал в нетбинсе чистый проект и закинул свои исходники При компиляции пишет следующее "/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf make: Entering directory `/home/artem/NetBeansProjects/CppApplication_1'
Разработать алгоритм и записать программу вычисления значения суммы и произведения C++
Разработать алгоритм и записать программу вычисления значения суммы и произведения. Требования к программе: - Входные данные (начальное и конечное значение индексной переменной в сумме или произведения) ввести стандартной процедурой введения; - Вывести вычисленные значения суммы и произведения
C++ Траектория снаряда (физика) http://www.cyberforum.ru/cpp-beginners/thread1150753.html
Траектория снаряда, какой вылетает из пушки под углом http://www.cyberforum.ru/cgi-bin/latex.cgi?\alpha 3 начальной скоростью http://www.cyberforum.ru/cgi-bin/latex.cgi?{V}_{0} описывается уравнениями http://www.cyberforum.ru/cgi-bin/latex.cgi?x={V}_{0}tcos\alpha, http://www.cyberforum.ru/cgi-bin/latex.cgi?y={V}_{0}tcos\alpha-g\frac{{t}^{2}}{2} с точностью х = 2 км определить точку, в который...
C++ Rand() как именно генерируются эти числа Функция rand(). Мне для ответа по ОПИ мало сказать что она возвращает псевдослучайные числа от 0 до RAND_MAX. Надо рассказать как именно генерируются эти числа. Наверное, надо разбираться на основе текста функции. В Linuxe, Windos по библиотекам stdlib.h лазил, целостного описания кажется не нашел, зато нашел один файлик, кажется из папки с Builder-ом: /* rand function */ #include... подробнее

Показать сообщение отдельно
CheburatorUA
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 24

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

18.04.2014, 14:43. Просмотров 192. Ответов 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 минуту
Я ошибку допустил в названии темы, не могу понять как откорректировать само название темы после публикации на форуме.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru