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

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

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

Перед указанным элементом массива вставить новый элемент - C++

06.06.2014, 13:50. Просмотров 922. Ответов 10
Метки нет (Все метки)

Дан массив размера N и целое число K (1 ≤ K ≤ N). Перед элемен-
том массива с порядковым номером K вставить новый элемент с нулевым
значением.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2014, 13:50     Перед указанным элементом массива вставить новый элемент
Посмотрите здесь:
Перед элементом массива с порядковым номером K вставить новый элемент C++
Перед элементом массива с порядковым номером K вставить новый элемент с нулевым значением C++
C++ Перед указанным элементом массива вставить все элементы другого массива
C++ Вставить в вектор новый элемент перед элементом с заданным индексом
C++ В целочисленном массиве вставить новый элемент перед первым отрицательным элементом
C++ Перед каждым положительным элементом массива вставить нулевой элемент
C++ Удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
D_Ok
44 / 33 / 12
Регистрация: 11.02.2014
Сообщений: 134
06.06.2014, 14:22     Перед указанным элементом массива вставить новый элемент #2
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
#include <iostream>
using namespace std;
int main()
{
    int n, k;
    cin >> n;
    int *arr = new int [n];
    for (int i = 0; i < n; ++i)
        arr[i] = i+1;
    for (int i = 0; i < n; ++i)
    {
        cout << "["<<i+1<<"] - "<< arr[i] << endl; 
    }
    cin >> k;
    ++n;
    int * temp = new int [n];
    for(int i = 0; i < n; ++i)
    {
        if (i < k-1)
            temp[i] = arr[i];
        else if(i==k-1)
            temp[i] = 0;
        else 
            temp[i] = arr[i-1];
    }
    delete [] arr;
    *arr = *temp;
    for ( int i = 0; i < n; ++i)
        arr[i] = temp[i];
    delete []temp;
    cout << endl;
    for (int i = 0; i < n; ++i)
    {
        cout << "["<<i+1<<"] - "<< arr[i] << endl; 
    }
return 0;
}
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
06.06.2014, 14:31     Перед указанным элементом массива вставить новый элемент #3
D_Ok, ну и зачем тебе тут понадобилась строчка *arr=*temp ?
D_Ok
44 / 33 / 12
Регистрация: 11.02.2014
Сообщений: 134
06.06.2014, 14:37     Перед указанным элементом массива вставить новый элемент #4
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
ну и зачем тебе тут понадобилась строчка *arr=*temp ?
ну вроде, для того что бы создать массив arr
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
06.06.2014, 14:45     Перед указанным элементом массива вставить новый элемент #5
Цитата Сообщение от D_Ok Посмотреть сообщение
для того что бы создать массив arr
Kuzia domovenok имеет в виду, что приваивание первого элемента массива не создаст весь массив. Если вы хотели чтобы массив arr указывал на область массива temp, то надо было так и написать:
C++
1
arr = temp;
D_Ok
44 / 33 / 12
Регистрация: 11.02.2014
Сообщений: 134
06.06.2014, 14:48     Перед указанным элементом массива вставить новый элемент #6
а ну да, каюсь((
тогда там надо так

26 delete [] arr;
27 arr = new int[n];

ато жуки могут вылезти
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
06.06.2014, 14:55     Перед указанным элементом массива вставить новый элемент #7
Нифига ты его не создал - ты его удалил строчкой ранее! А то, что я указал - попытка присвоить нулевому элементу массива арр - значение нулевого элемента массива тмп! Мало того, что она бессмысленна (все элементы арр и так будут копироваться в след. Строке). Так ещё и память под новый арр так и не выделилась как ты хотел!
Надо арр = new int [n+1]
либо вообще арр=temp (без звёзд)
D_Ok
44 / 33 / 12
Регистрация: 11.02.2014
Сообщений: 134
06.06.2014, 15:03     Перед указанным элементом массива вставить новый элемент #8
Kuzia domovenok, согласен же, что так не создал, написал же. А насчет того что (все элементы арр и так будут копироваться в след. Строке) элементы куда будут копироваться, память то я почистил а новую перед тем не выделил, и арр=temp тоже не поможет, темп ведь тоже чистится, надо арр = new int [n], (n уже был там увеличен)
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
06.06.2014, 15:21     Перед указанным элементом массива вставить новый элемент #9
Цитата Сообщение от D_Ok Посмотреть сообщение
темп ведь тоже чистится,
а ты не чисти!
D_Ok
44 / 33 / 12
Регистрация: 11.02.2014
Сообщений: 134
06.06.2014, 15:22     Перед указанным элементом массива вставить новый элемент #10
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
а ты не чисти!
нас учат убирать за собой
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2014, 17:01     Перед указанным элементом массива вставить новый элемент
Еще ссылки по теме:
C++ Доработка структуры (удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером)
Вставить новый элемент, перед всеми нечётными элементами одномерного массива C++
Вставить новый элемент, перед всеми чётными элементами одномерного массива C++
Перед каждым положительным элементом массива вставить элемент с нулевым значением, перезаписать эти элементы во второй массив C++
C++ Однонаправленный связанный список (Вставить новый узел с нулевым значением перед первым отрицательным элементом...)

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

Или воспользуйтесь поиском по форуму:
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
06.06.2014, 17:01     Перед указанным элементом массива вставить новый элемент #11
Сообщение было отмечено автором темы, экспертом или модератором как ответ
D_Ok, так нафига чистить то, что тебе нужно-то?! Ты выделил новый массив, скопировал в него данные, всё! Освобождай память лишь в конце работы!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int* array=new int[N];
//работаем
int* tmp=new int[N+1];
//копируем
for(int i = 0; i < n; ++i)
 if (i < k-1)
//...
delete[] array;//чистим старый
array=tmp;
//зачем делать delete[] temp, блин?
//снова работаем, до конца программы 
//конец программы
delete[] array;
Что не так-то? Ты ещё хочешь что-то чистить?
Yandex
Объявления
06.06.2014, 17:01     Перед указанным элементом массива вставить новый элемент
Ответ Создать тему
Опции темы

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