Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/68: Рейтинг темы: голосов - 68, средняя оценка - 4.88
4 / 4 / 2
Регистрация: 05.05.2012
Сообщений: 201
Записей в блоге: 1
1

В любое место матрицы добавить новый столбец/строку

09.08.2012, 22:22. Показов 12898. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!
Подскажите советом.
Задача такая:Есть матрица 2*2.Заполняется значениями.Нужно добавить либо столбец либо строку в любом месте матрицы.
Принцип решения знаю.Кроме одного,можно добавить строку||столбец с помощью оператора new, а потом если потребуется изменить указатели в массиве указателей.Или правильнее создать новый динамический массив уже больше на столбец либо строчку.заполняется а значения копируются со смещением индексов.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.08.2012, 22:22
Ответы с готовыми решениями:

Добавить заполненную строку или столбец в любое место двумерной матрицы
Написать программу, которая осуществляет добавление заполненной строки или столбца в любое место...

Добавить новый столбец справа
Здравствуйте, В одном столбце у меня имеется список ФИО разделенных запятой. Но справа от этого...

Как добавить новый столбец?
Как добавить столбец посещаемости по всем типам предметов для каждого тсудента, то есть...

Как добавить новый столбец к этой таблице?
всем привет облазил весь интернет, но ничего дельного не нашел. Как добавить новый столбец к этой...

2
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,927
10.08.2012, 14:17 2
Можно и так и так, но при первом варианте работы больше, поскольку при добавлении строки нужно вставить указатель на массив с элементами стоки матрицы, а при добавлении столбца нужно реаллокатить каждую строку матрицы. Я бы выбрал создание нового динамического массива, если это не запрещено условием. Так меньше писать.
1
4 / 4 / 2
Регистрация: 05.05.2012
Сообщений: 201
Записей в блоге: 1
10.08.2012, 23:31  [ТС] 3
Лучший ответ Сообщение было отмечено Borkot как решение

Решение

Так и сделал, но встретил проблему,вроде несложная,но как прировнять значения в новь объявленную.Если у нас идет смещение скажем заполняю 0 столбец.
Вот начинания программы
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
#include<iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "rus");
    int r=2,OPr;
    int **pAxx=new int *[r]; //инициаизация массива указателей
    for(int i=0;i<r;i++)
       pAxx[i]=new int[r];    //Инициализация собственно массивов
    for(int j=0;j<r;j++)
        for(int k=0;k<r;k++)
            {cin>>pAxx[j][k];
            cout<<pAxx[j][k]<<endl;}
    
         cout<<"Введите что вы хотите вставить строчку или столбец 0-столбец 1-строчку";
         cin>>OPr;
         if(OPr<1)
         {
        int **pAxx2=new int*[r];  //создаем новый массив указателей
        for(int i=0;i<(++r);i++)
            pAxx2[i]=new int[r];    //создаем 3и столбца
        cout<<"Введите место куда вставим наши данные 1 2 3";
         cin>>OPr; //вводим переменную
         --OPr;//Уменьшаем на 1 так как в массиве адрес начинается с 0
         for(int j=0;j<r;j++)
        for(int k=0;k<r;k++)
        {
            if(OPr==k)
            pAxx2[j][k]=pAxx[j][k];//Вот здесь возникла проблема
        }
         }
        else
        {
            int **pAxx2=new int*[(++r)];
        for(int i=0;i<(--r);i++)
            pAxx2[i]=new int[r];
        }
        return 0;
}
И не могу получить доступ ко все элементам если на самом деле это одномерный массив,то почему тогда я не могу **(pAxx++) значение если на самом деле он одномерный.А прыгает только на следующий элемент pAxx[i][0]

Добавлено через 1 минуту
Не судите если покажется вам извращением.Может можно как-то проще.

Добавлено через 3 часа 19 минут
все я догодался как можно сделать:
нам же никто не мешает
C++
1
2
3
4
5
6
 for(int j=0,m=0;j<r;j++,m++)
        for(int k=0,t=0;k<r;k++,t++)
        {
            if(OPr==k)
            pAxx2[j][k]=pAxx[m][t];//вроде должно работать
        }
Добавлено через 1 час 24 минуты
Почти сделал,чуть чуть доработать для строк,и освободить память.
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
#include<iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "rus");
    int r=2,OPr,f=3,s=1;
    int **pAxx=new int *[r]; //инициаизация массива указателей
    for(int i=0;i<r;i++)
       pAxx[i]=new int[r];    //Инициализация собственно массивов
    for(int j=0;j<r;j++)
        for(int k=0;k<r;k++)
            {cin>>pAxx[j][k];
            //cout<<pAxx[j][k]<<endl;
            }
    
         cout<<"Введите что вы хотите вставить строчку или столбец 0-столбец 1-строчку"<<endl;
         cin>>OPr;
         if(OPr<1)
         {
            
        int **pAxx2=new int*[r];  //создаем новый массив указателей 
        for(int i=0;i<r;i++)
            pAxx2[i]=new int[f];    //создаем 3и столбца
        cout<<"Введите место куда вставим наши данные 1 2 3"<<endl;
         cin>>OPr; //вводим переменную
         --OPr;//Уменьшаем на 1 так как в массиве адрес начинается с 0
         for(int j=0,m=0;j<r;j++,m++) //Записываем каждое значение
        for(int k=0,t=0;k<f;k++,t++)
            {
            if(OPr==k)
                {
                cout<<"Введите значение"<<endl;
                cin>>pAxx2[j][k];
                t--;
                }
            else
                {
                pAxx2[j][k]=pAxx[m][t];
 
                }
            }
        cout<<"\n\n";
        for(int j=0;j<r;j++)
            {for(int k=0;k<f;k++)
                {cout<<pAxx2[j][k]<<'\t';}
             cout<<'\n';
            }
         }
        else
        {
        
        }
        return 0;
}
0
10.08.2012, 23:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.08.2012, 23:31
Помогаю со студенческими работами здесь

DBGrid: добавить новый столбец и записать его в БД
Есть БД подключена через ADO, можно ли добавить новый столбец в ней и чтобы это записалась в Access...

Можно ли добавить новый столбец в txt файл?
Есть файл test.txt с данными разделенными табуляцией: количество строк заранее неизвестно и...

Добавить в существующую таблицу новый столбец и заполнить данными
Здравствуйте. Подскажите, как к существующей таблице с введенными данными добавить новый столбец и...

Добавить в определенное место текстового файла строку
Имеется текстовый файл. Добавить в него строку из двенадцати черточек (————), разместив ее: •...


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

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