У меня работает не совсем правильно. Как он работает: числом, которое введет пользователь, заменяет то число, которое было изначально. А нужно, чтобы пользователь ввел число и остальные числа сместились вправо. Пример:
Изначальный 4 5 6 7
какое число добавить: 10
куда добавить: 3
Стало: 4 5 10 6 7
Как исправить код?
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int n, i, kakoe, kuda;
cout << "введите размерность\n";
cin >> n;
int* arr = new int[n];
cout << "введите числа\n";
for (i = 0; i < n; i++)
{
cin >> arr[i];
}
cout << "\nвот изначальный массив:\n";
for (i = 0; i < n; i++)
{
cout << arr[i] << ", ";
}
cout << "\nкакое число добавить?\n";
cin >> kakoe;
cout << "\nкуда число по счету добавить?\n";
cin >> kuda;
kuda = kuda - 1;
for (i = kuda; i < n; i++)
{
arr[kuda] = kuda + 1;
arr[kuda] = i++;
arr[kuda] = kakoe;
}
n++;
cout << "\nвот новый массив: \n";
for (i = 0; i < n; i++)
{
cout << arr[i] << ", ";
}
}
C/C++
C++ добавить элемент, который введет пользователь в одномерный динамический массив
Тоже с заказом размерности массива сразу n+1:
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int n, i, kakoe, kuda;
cout << "введите размерность\n";
cin >> n;
int *arr = new int[n + 1];
cout << "введите числа\n";
for (i = 0; i < n; i++) cin >> arr[i];
cout << "вот изначальный массив:\n";
for (i = 0; i < n; i++) cout << arr[i] << "; ";
cout << "\nкакое число добавить?\n";
cin >> kakoe;
cout << "куда число по счету добавить?\n";
cin >> kuda;
kuda = kuda - 1;
for (i = n - 1; i >= kuda; i--) arr[i + 1] = arr[i];
arr[kuda] = kakoe;
cout << "вот новый массив: \n";
for (i = 0; i <= n; i++) cout << arr[i] << "; ";
cout << endl;
cin.get(); cin.get();
}

#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int n, i, kakoe, kuda;
cout << "введите размерность\n";
cin >> n;
int *arr = new int[n + 1];
cout << "введите числа\n";
for (i = 0; i < n; i++) cin >> arr[i];
cout << "вот изначальный массив:\n";
for (i = 0; i < n; i++) cout << arr[i] << "; ";
cout << "\nкакое число добавить?\n";
cin >> kakoe;
cout << "куда число по счету добавить?\n";
cin >> kuda;
kuda = kuda - 1;
for (i = n - 1; i >= kuda; i--) arr[i + 1] = arr[i];
arr[kuda] = kakoe;
cout << "вот новый массив: \n";
for (i = 0; i <= n; i++) cout << arr[i] << "; ";
cout << endl;
cin.get(); cin.get();
}

Павел Никитенко
спасибо!
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int n, i, kakoe, kuda;
cout << "введите размерность\n";
cin >> n;
int* arr = new int[n+1]; // с запасом на 1 добавляемый
cout << "введите числа\n";
for (i = 0; i < n; i++)
{
cin >> arr[i];
}
cout << "\nвот изначальный массив:\n";
for (i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
cout << "\nкакое число добавить?\n";
cin >> kakoe;
cout << "\nкуда число по счету добавить?\n";
cin >> kuda;
kuda = kuda - 1;
if (kuda >= 0 && kuda <= n)
{
for (int i = n; i >= 0; --i)
{
if (i == kuda)
{
arr[i] = kakoe;
break;
}
arr[i] = arr[i - 1];
}
n++;
cout << "\nвот новый массив: \n";
for (i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
}
else
{
cout << "\nиндекс вне массива";
}
}
Можно добавлять больше на 1 размерности, то бишь в конец, но для в начало вводите 1 позицию

using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int n, i, kakoe, kuda;
cout << "введите размерность\n";
cin >> n;
int* arr = new int[n+1]; // с запасом на 1 добавляемый
cout << "введите числа\n";
for (i = 0; i < n; i++)
{
cin >> arr[i];
}
cout << "\nвот изначальный массив:\n";
for (i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
cout << "\nкакое число добавить?\n";
cin >> kakoe;
cout << "\nкуда число по счету добавить?\n";
cin >> kuda;
kuda = kuda - 1;
if (kuda >= 0 && kuda <= n)
{
for (int i = n; i >= 0; --i)
{
if (i == kuda)
{
arr[i] = kakoe;
break;
}
arr[i] = arr[i - 1];
}
n++;
cout << "\nвот новый массив: \n";
for (i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
}
else
{
cout << "\nиндекс вне массива";
}
}
Можно добавлять больше на 1 размерности, то бишь в конец, но для в начало вводите 1 позицию

Павел Никитенко
Cпасибо
for (i = kuda; i < n; i++)
{
arr[kuda] = kuda + 1; // Ваш цикл берет одну ячейку памяти [kuda], записывает в нее
arr[kuda] = i++; // свой индекс +1, затем в нее же записывает текущий счетчик i,
arr[kuda] = kakoe; // и в конце переписывает в него значение kakoe. И так по кругу.
}
То есть никакой сортировки данных не происходит. Это раз.
Два - динамический массив не увеличивается от того, что вы просто сделали n++. Размер задается только один раз при его формировании, дальнейшее назначение n - только чтобы вы не обращались за его границу, и ограничивали себя. n++ позволит вам обратиться за границу массива что является непредсказуемым. Для увеличения массива вы должны создать новый массив с размером n++, переписать в него данные из старого массива и удалить старый.
{
arr[kuda] = kuda + 1; // Ваш цикл берет одну ячейку памяти [kuda], записывает в нее
arr[kuda] = i++; // свой индекс +1, затем в нее же записывает текущий счетчик i,
arr[kuda] = kakoe; // и в конце переписывает в него значение kakoe. И так по кругу.
}
То есть никакой сортировки данных не происходит. Это раз.
Два - динамический массив не увеличивается от того, что вы просто сделали n++. Размер задается только один раз при его формировании, дальнейшее назначение n - только чтобы вы не обращались за его границу, и ограничивали себя. n++ позволит вам обратиться за границу массива что является непредсказуемым. Для увеличения массива вы должны создать новый массив с размером n++, переписать в него данные из старого массива и удалить старый.
Похожие вопросы
- C++ Одномерный динамический массив
- Как работать с элементами динамического массива из функции?
- Задачка по СИ на вставку элемента в динамический массив.
- Каким образом можно удалить элементы из динамического массива C++(без использования вспомогательного массива)
- C++ динамический массив
- Программирование на C++ с использованием динамического массива
- Распределение элементов в динамическом массиве
- Размер динамического массива, передаваемого в функцию в C++.
- Устройство статических и динамических массивов в оперативной памяти (...)
- Двумерный динамический массив с неизвестны количеством столбиков или строк