Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142

Запись и удаление элемента динамического массива

18.06.2018, 14:40. Показов 4607. Ответов 8

Студворк — интернет-сервис помощи студентам
Приветствую всех форумчан (я наверное всем надоел, знаю, но помогите, плз )

Проблема:
Кликните здесь для просмотра всего текста
С динамическим массивом работать не особо умею, не знаю, как организовать в данной программе запись элемента в двухмерный массив в функции (в element_adder, в данном случае) Первые пять значений срабатывают на "ура", число заменяется на то, что вводится, но если записать ещё и col, то заменятся числа и в row и в col, в общем, такая елесть . Будьте добры, исправьте немного этот код так, что-бы, вводя, например, в row 3, а в col - 4, число, введённое после 3 и 4 записывалось в третьей строке, четвёртом столбце. На мои другие шедевры, которые я творил в данной программе, не стоит смотреть: не касается этого случая Кстати говоря, с функцией удаления тоже подобная проблема. Как-то так



Сам код:

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
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <iostream>
#include <ctime>
#include <iomanip>
using namespace std;
 
void element_adder(int *arr, int size1, int size2)
{
    int ele_add1;
    cout << "Введите индекс в который вы хотите добавить элемент (row): ";
    cin >> ele_add1;
 
    int ele_add2;
    cout << "Введите индекс в который вы хотите добавить элемент (col): ";
    cin >> ele_add2;
 
    int task4_nmb;
    cout << "Какое число добавить в эту ячейку?";
    cin >> task4_nmb;
 
    arr[ele_add1] = task4_nmb;
    arr[ele_add2] = task4_nmb;
}
 
void task4_arr_rand(int **arr, int size1, int size2)
{
    for (int i = 0; i < size1; i++)
    {
        for (int j = 0; j < size2; j++)
        {
            arr[i][j] = rand() % 100; // распределение памяти
        }
    }
}
 
void task4_arr_printer(int **arr, int size1, int size2)
{
    for (int i = 0; i < size1; i++)
    {
        for (int j = 0; j < size2; j++)
        {
            cout << setw(4) << arr[i][j]; // вывод массива
        }
        cout << endl;
    }
}
 
void element_remover(int **arr, int size1, int size2)
{
    int ele_remove;
    cout << "Введите индекс в котором вы хотите убрать элемент: ";
    cin >> ele_remove;
 
    delete[] arr[ele_remove];
 
    cout << "Результат: " << endl;
    task4_arr_printer(arr, size1, size2);
    cout << endl;
 
    system("pause");
}
 
void main()
{
    setlocale(LC_ALL, "Russian");
    srand(time(0));
 
    const unsigned int size1 = 5;
    const unsigned int size2 = 5;
 
    int **arr = new int *[size1]; // инициализация
 
    for (int i = 0; i < size1; i++)
    {
        arr[i] = new int[size2];
    }
 
    task4_arr_rand(arr, size1, size2);
    task4_arr_printer(arr, size1, size2);
 
    char task_4th_choise; // добавление / удаление элементов 
    cout << "Хотите ли вы добавить/удалить элемент массива по заданному вами адресу? \n";
    cout << "\t f - добавление элемента \n";
    cout << "\t g - удаление элемента \n";
    cout << "\t N - отмена действий \n\n";
    cout << "Ваш выбор: ";
    cin >> task_4th_choise;
    
    switch (task_4th_choise)
    {
        system("cls");
 
    case 'f':
        element_adder(*arr, size1, size2);
        task4_arr_printer(arr, size1, size2);
 
        break;
 
    case 'g':
        element_remover(arr, size1, size2);
        task4_arr_printer(arr, size1, size2);
 
        break;
    case 'N':
        break;
    default:
        cout << "Введите либо f (добавить), либо g (удалить), либо N для отмены действия!";
    }
 
    // удаление массива и его элементов
 
    for (int i = 0; i < size1; i++)
    {
        delete[] arr[i];
    }
    delete[] arr;
 
    system("pause");
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.06.2018, 14:40
Ответы с готовыми решениями:

Запись и удаление элемента динамического массива
Такое дело: при вызове функции удаления набранной юзэром ячейки динамического массива удаляется... весь массив. В чём причина? Вроде-бы...

Удаление элемента из динамического массива
Приветствую зашедших! Мне по условию дан динамический массив int элементов, в котором надо уничтожить ПЕРВЫЙ встречный 0. Подскажите, как...

Удаление элемента динамического массива справа
Нужно удалить последний структурный элемент динамического массива. помогите пожалуйста никак не получается сделать эту функцию. Это...

8
Заблокирован
18.06.2018, 14:47
что вдруг поменялось?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void element_adder(int **arr, int size1, int size2)
{
    int ele_add1;
    cout << "Введите индекс в который вы хотите добавить элемент (row): ";
    cin >> ele_add1;
 
    int ele_add2;
    cout << "Введите индекс в который вы хотите добавить элемент (col): ";
    cin >> ele_add2;
 
    int task4_nmb;
    cout << "Какое число добавить в эту ячейку?";
    cin >> task4_nmb;
 
    arr[ele_add1][ele_add2] = task4_nmb;
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
18.06.2018, 17:07
N0VY, не совсем понятно что Вам требуется: добавить и удалить элемент или изменить значение элемента -
это совсем разные вещи. сформулируйте оригинал условия задачи.
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
20.06.2018, 08:46  [ТС]
Я говорю, что нужно сделать функцию ДОБАВЛЕНИЯ элемента по указанной ячейке двухмерного массива и функцию УДАЛЕНИЯ элемента по указанной ячейке двухмерного массива. У меня какая-то ошибка с указателями, я предполагаю, но найти не могу... Вроде всё разъяснил.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
20.06.2018, 11:11
Цитата Сообщение от N0VY Посмотреть сообщение
Я говорю, что нужно сделать функцию ДОБАВЛЕНИЯ
Цитата Сообщение от N0VY Посмотреть сообщение
"для тех кто не врубился"
Про ДОБАВЛЕНИЕ Вы говорите первый раз. Во что нужно было "врубиться" ? В Ваши мысли ? Взаимно могу порекомендовать Вам въехать что такое добавить и удалить элемент посмотреть на свой код и подумать что Вы в своём коде пишете.
0
 Аватар для axela002
71 / 58 / 48
Регистрация: 12.03.2017
Сообщений: 563
20.06.2018, 11:40
Цитата Сообщение от N0VY Посмотреть сообщение
ДОБАВЛЕНИЯ элемента по указанной ячейке двухмерного массива
добавление куда? Напишите нам условие задачи.
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
20.06.2018, 12:18  [ТС]
Добавлено через 9 минут
(хотел подправить сообщение, но Бог с ним) Да ёмаё, условие в спойлере.... -_- Повторяю: нужно через фунцию организовать добавление введённого нами числа в двухмерный динамический массив. И удаление. А код выдаёт ошибку того, что требуется якобы указатель на тип данных. Пишу его - выдаёт ошибку того, что требуется указатель.. Я не понимаю: либо я не знаю указателей, либо VS2017 тупит.

Что происходит: Первые пять значений срабатывают на "ура", число заменяется на то, что вводится, но если записать ещё и col, то заменятся числа и в row и в col, в общем, такая елесть . Исправьте немного этот код так, что-бы, вводя, например, в row 3, а в col - 4, число, введённое после 3 и 4 записывалось в третьей строке, четвёртом столбце. И что-бы функция удаления работала, как в функции добавления, только наоборот: удаляет писанную ячейку памяти в двухмерном динамическом массиве.

Либо кто-то не читает условий (всё написано в спойлере в моём первом сообщении этой темы), либо я "не понятно объясняю, что я хочу от вас". В общем, как-то так..
0
 Аватар для axela002
71 / 58 / 48
Регистрация: 12.03.2017
Сообщений: 563
20.06.2018, 12:25
Двумерный массив первоначально заполнен нулями?

Добавлено через 3 минуты
Т.е у тебя двумерный динамический массив, заполнен рандомными числами, и ты хочешь заменить число в (к примеру) строке 3 столбце 5 на то которое напишет пользователь? Если ты хочешь именно добавить..то это нужно создавать новый массив заполнять значениями из старого а в добавленной ячейке писать число пользователя, по другому не выйдет. Если что то тут проще работать с односвязным списком. (Я о удаление, добавление элементов)
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
20.06.2018, 14:14  [ТС]
Да, axela002, вы правильно меня поняли. Спасибо за совет: прислушаюсь

Кстати говоря: нужна именно двухмерка, динамическая. Если бы попросили сделать одномерку - всё было бы просто, но... не в этот раз. Когда я делаю двухмерку динамической - показывает ошибку указателя, а размер массива требуется константным в двухмерке. Поэтому и проблема.

Одномерку сделал - почему-то крашается... В чём причина?
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
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <iostream>
#include <ctime>
#include <iomanip>
using namespace std;
 
void element_adder(int *arr, int size)
{
    int ele_add;
    cout << "Введите индекс ячейки, в который вы хотите добавить элемент: ";
    cin >> ele_add;
 
    int task4_nmb;
    cout << "Какое число добавить в эту ячейку?";
    cout << "Ваш выбор: ";
    cin >> task4_nmb;
 
    arr[ele_add] = task4_nmb;
}
 
void task4_arr_rand(int **arr, int size)
{
    for (int i = 0; i < size; i++)
    {
        *arr[i] = rand() % 100; // распределение памяти
    }
}
 
void task4_arr_printer(int **arr, int size)
{
    for (int i = 0; i < size; i++)
    {
        cout << setw(4) << arr[i]; // вывод массива
    }
    cout << endl;
}
 
void element_remover(int **arr, int size)
{
    int ele_remove;
    cout << "Введите индекс в котором вы хотите убрать элемент: ";
    cin >> ele_remove;
 
    delete[] arr[ele_remove];
 
    cout << "Результат: " << endl;
    task4_arr_printer(arr, size);
    cout << endl;
 
    system("pause");
}
 
void main()
{
    setlocale(LC_ALL, "Russian");
    srand(time(0));
 
    const unsigned int size = 5;
 
    int **arr = new int *[size]; // инициализация
 
    task4_arr_rand(arr, size);
    task4_arr_printer(arr, size);
 
    char task_4th_choise; // добавление / удаление элементов 
    cout << "Хотите ли вы добавить/удалить элемент массива по заданному вами адресу? \n";
    cout << "\t f - добавление элемента \n";
    cout << "\t g - удаление элемента \n";
    cout << "\t N - отмена действий \n\n";
    cout << "Ваш выбор: ";
    cin >> task_4th_choise;
    
    switch (task_4th_choise)
    {
        system("cls");
 
    case 'f':
        element_adder(*arr, size);
        task4_arr_printer(arr, size);
 
        break;
 
    case 'g':
        element_remover(arr, size);
        task4_arr_printer(arr, size);
 
        break;
    case 'N':
        break;
    default:
        cout << "Введите либо f (добавить), либо g (удалить), либо N для отмены действия!";
    }
 
    // удаление массива и его элементов
 
    for (int i = 0; i < size; i++)
    {
        delete[] arr[i];
    }
    delete[] arr;
 
    system("pause");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.06.2018, 14:14
Помогаю со студенческими работами здесь

Добавление и удаление элемента динамического массива
Подскажите какие существую способы добавления и удалеия элемента одномерного динамического массива(переопределяя размер массива)....

Удаление последнего элемента динамического массива (программа вылетает с ошибкой)
for (vector&lt;P&gt;::iterator i = p.begin(); i != p.end(); ++i) { i -&gt; life --; if (i -&gt; life ==0) p.erase(i);...

Удаление динамического массива
Привет. Сделал программу с 3 динамическими массивами, но дело в том, что 2 из них, размер которых задается с клавиатуры, удаляются в конце...

Удаление динамического массива
доброго времени суток. написал программу, в которой создается динамический массив. с ним проводим определенные операции, а в конце надо его...

Удаление динамического массива
Здравствуйте! Имею следующий вопрос: создаётся массив таким образом: int elCount = 10; double* x = new double;


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru