Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/65: Рейтинг темы: голосов - 65, средняя оценка - 4.62
0 / 0 / 1
Регистрация: 16.03.2012
Сообщений: 52

Добавить элемент в середину массива

14.11.2014, 10:53. Показов 14020. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток.

Есть задание:
В целочисленном массиве X(N) после каждого положительного числа вставить 0.

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

Думаю надо использовать динамический массив. Опять же надо увеличить кол-во памяти и смещать указатели на память последующих элементов и в освободившуюся ячейку вставить 0.

Да, я понимаю, что с помощью VECTORa все это прекрасно и легко делается, но задание именно по массивам.

К сожалению знаний по динамическим массивам у меня маловато, в интернете тоже мануалок раз, два и обчелся.
Поэтому прошу вашей помощи.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.11.2014, 10:53
Ответы с готовыми решениями:

Вставить элемент в середину массива
Здравствуйте! Подскажите, пожалуйста, как вставить элемент в середину массива (не заменить один на другой). Например, если после точки...

Вставить элемент в середину динамического массива
Условие: Дан одномерный массив, элементы которого - целые числа. Также даны целые числа X и D. Вставьте в заданный массив элемент X после...

Добавить элемент в середину очереди, если число элементов четное, и после середины, если нечетное
Задача: сделать обычную очередь, но с еще одним методом vip_push(int a), который добавляет элемент в середину очереди, если кол-во...

5
118 / 118 / 41
Регистрация: 14.12.2013
Сообщений: 352
14.11.2014, 10:55
Цитата Сообщение от labrador Посмотреть сообщение
Как я не мучился но всегда упорядоченность массива нарушалась, что то где то пропадало.
Покажи результат мучений. Если он есть, то помогу.
0
0 / 0 / 1
Регистрация: 16.03.2012
Сообщений: 52
14.11.2014, 11:02  [ТС]
Последнее, что я пытался сделать - это реализовать через второй массив путем копирования элементов.
Ну это была явно больная мысль и не удачная.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void vstav(int n, int *mass)
{
    int schet = 0; int razm = 0;
    for (int i = 0; i < n; i++)
    {
        if (mass[i] > 0)
        {
            int *newm = new int[n];
            for (int i = 0; i < n; i++)
            {
                newm[schet + 2] = 0;
                mass[i] = newm[i+1];
            }
            
            
            delete[] newm;
        }
        else
            schet++;
        
    }
0
118 / 118 / 41
Регистрация: 14.12.2013
Сообщений: 352
14.11.2014, 11:08
это как вариант. можно и других решений тонну сделать.
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
#include <iostream>
 
int main(int argc, char *argv[])
{
    std::cout << "Enter size:\n";
    int     size = 0;
    std::cin >> size;
 
    int*    mas = new int[size];
 
    for(int i = 0; i < size; ++i)
    {
        std::cout << "Enter mas[" << i << "]:";
        std::cin >> mas[i];
        std::cout << std::endl;
    }
 
    int     counter = 0;
    for(int i = 0; i < size; ++i)
        if(mas[i] > 0)
            ++counter;
 
    int     newsize = size + counter;
 
    int*     resmas = new int[newsize];
    for(int i = 0, j = 0; i < size; ++i, ++j)
    {
        resmas[j] = mas[i];
        if(mas[i] > 0)
            resmas[++j] = 0;
    }
 
    for(int i = 0; i < size; ++i)
        std::cout << mas[i] << " ";
    std::cout << std::endl;
 
    for(int i = 0; i < newsize; ++i)
        std::cout << resmas[i] << " ";
    std::cout << std::endl;
 
    delete[]    mas;
    delete[]    resmas;
 
    return  0;
}
Добавлено через 1 минуту
Цитата Сообщение от labrador Посмотреть сообщение
Последнее, что я пытался сделать - это реализовать через второй массив путем копирования элементов.
Ну это была явно больная мысль и не удачная.
ну, реализовано, конечно, так себе. но мысль нормальная.
0
86 / 43 / 11
Регистрация: 19.10.2013
Сообщений: 157
14.11.2014, 11:18
Ну мои соображения по поводу алгоритма таковы:
Циклом поочередно в строке перебираешь все элементы, если встретился необходимый, то уходишь на подпрограмму, которая добавляет в конце строки ещё одну ячейку, а потом циклом начиная с конца строки, каждому элементу присваиваешь значение предыдущего, пока не дойдешь до нужного элемента и потом после нужного ставишь ноль, дальше возвращаешься с подпрограммы в основной цикл но уже в позицию которая стоит после вставленного нуля.

Или же изначально объяви массив в два раза шире необходимого, чтоб не парится с добавлением!
0
0 / 0 / 1
Регистрация: 16.03.2012
Сообщений: 52
14.11.2014, 12:12  [ТС]
Спасибо тебе большое. По твоему способу перестроил программу. Все работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.11.2014, 12:12
Помогаю со студенческими работами здесь

Как добавить элемент в середину связного списка?
Здравствуйте!!! Пытаюсь &quot;проапгрейдить&quot; пример с http://axis.bplaced.net/news/773 , как реализовать удаление-добавление в середину? ...

Дан список L, элементы которого являются целыми числами: минимальный элемент добавить в середину списка
дан список l, элементы которого являются целыми числами. минимальный элемент добавить в середину списка. Также нужна защита от дурака. ...

вставить элемент в середину массива
доброе время суток, не получается вставить элимент точно в середниу массива. чувствую намудрил с индексами, помогите разобраться program...

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

Найти последний элемент массива R[K], величина которого находится в заданном диапазоне [a, b]; переставить его в середину массива
Найти последний элемент массива R, величина которого находится в заданном диапазоне ; переставить его в середину массива.


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru