С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 14

Перевыделение массива

17.01.2010, 18:38. Показов 1197. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно написать функцию, которая в массиве целых чисел перед каждым четным элементом добавляет 0.
Т.е. если был массив 1 6 3 7 8 15 то должен получится в итоге 1 0 6 3 7 0 8 15.
К сожалению код моей попытки решения этой задачи не сохранился. Но ход действий могу рассказать.
В начале стандартно ввожу массив любой длины используя malloc . Потом подсчитываю сколько элементов четных в этом массиве. Пробовал 2 разных способа, до выделить массив делая n+p ( n размер исходного массива, p количество элементов четных). Но поскольку переменная "p" не является константной, то этот способ не помог. затем пробовал realloc, но там были проблемы со сдвигом массива в перевыделенную память....
В общем, прошу вашей помощи в решении этой задачи...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.01.2010, 18:38
Ответы с готовыми решениями:

Неправильное перевыделение
Собственно помогите правильно перевыделить память под массив. #include <stdio.h> #include <iostream> #include <stdlib.h> ...

Работа с кучей. Перевыделение памяти
Для объяснения вопроса приведу сначала пример: #include <stdio.h> #include <stdlib.h> class Man { private: char* Name; ...

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

7
Быдлокодер
 Аватар для Darky
512 / 298 / 85
Регистрация: 22.11.2009
Сообщений: 892
17.01.2010, 18:43
А что мешает не создавать массив, а просто вывести ноль перед элементами?
Например,
C++
1
2
3
4
if (A[i]%2!=0)
  cout<<A[i]<<" ";
else
  cout<<"0 "<<A[i]<<" ";
0
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 14
17.01.2010, 19:02  [ТС]
Цитата Сообщение от Darky Посмотреть сообщение
А что мешает не создавать массив, а просто вывести ноль перед элементами?
Например,
C++
1
2
3
4
if (A[i]%2!=0)
  cout<<A[i]<<" ";
else
  cout<<"0 "<<A[i]<<" ";
Условие задачи... И предирчевый экзаминатор, можно сказать со 100% увереностью что он скажет что просто сделать вывод, не изменяя массива исходного халтура....
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
17.01.2010, 19:54
А в чём проблема-то?
а) Ввести размер массива, создать массив, ввести элементы
б) Найти число чётных элементов, через malloc создать ещё один массив длиной n+p.
в) Занести в новый массив элементы старого и нули в нужном порядке (слегка усложнённый вариант копирования).
г) Удалить исходный массив через free, распечатать новый массив.
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
17.01.2010, 19:56
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
#include <process.h>
#include <stdlib.h>
int main()
{
    int n, *p, i, j;
    printf("Razmer massiva N= ");
    scanf("%d", &n);
    if((p  = (int *)malloc (n * sizeof (int))) == NULL)
        exit(1);
    printf("Vvod elementov:\n");
    for(i=0; i<n; i++)
    {
        printf("[%d]= ", i);
        scanf("%d", &p[i]);
    }
    for(i=0; i<n; i++)
    {
        if(p[i]%2==0)
        {
            n++;
            if((p = (int *)realloc( p, n * sizeof (int)))==NULL)
                exit(1);
            for(j=n-1; j>i; j--)
                p[j]=p[j-1];
            p[i]=0;
            i++;
        }
    }
    printf("Poluchenni massiv:\n");
    for(i=0; i<n; i++)
        printf("%d ", p[i]);
    return 0;
}
1
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 14
17.01.2010, 20:31  [ТС]
Цитата Сообщение от Nick Alte Посмотреть сообщение
А в чём проблема-то?
а) Ввести размер массива, создать массив, ввести элементы
б) Найти число чётных элементов, через malloc создать ещё один массив длиной n+p.
в) Занести в новый массив элементы старого и нули в нужном порядке (слегка усложнённый вариант копирования).
г) Удалить исходный массив через free, распечатать новый массив.
Нет, не подходит. Нужно работать только с 1 массивом.

Добавлено через 12 минут
Цитата Сообщение от valeriikozlov Посмотреть сообщение
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
#include <process.h>
#include <stdlib.h>
int main()
{
    int n, *p, i, j;
    printf("Razmer massiva N= ");
    scanf("%d", &n);
    if((p  = (int *)malloc (n * sizeof (int))) == NULL)
        exit(1);
    printf("Vvod elementov:\n");
    for(i=0; i<n; i++)
    {
        printf("[%d]= ", i);
        scanf("%d", &p[i]);
    }
    for(i=0; i<n; i++)
    {
        if(p[i]%2==0)
        {
            n++;
            if((p = (int *)realloc( p, n * sizeof (int)))==NULL)
                exit(1);
            for(j=n-1; j>i; j--)
                p[j]=p[j-1];
            p[i]=0;
            i++;
        }
    }
    printf("Poluchenni massiv:\n");
    for(i=0; i<n; i++)
        printf("%d ", p[i]);
    return 0;
}
Спасибо ОГРОМНОЕ! Я нашел ошибку у себя, ф-н realloc не так записывал, записывал (n+p), забыл что нужно просто написать на что перевыделить, т.е. (p,n* ...)
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
17.01.2010, 20:42
FC-NEO,

Нет, не подходит. Нужно работать только с 1 массивом.
тогда выделяй память заранее большего размера, чтобы туда поместилась исходная последовательность + нули, потому как realloc делает другой массив
0
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 14
17.01.2010, 21:49  [ТС]
Цитата Сообщение от Rififi Посмотреть сообщение
FC-NEO,

Нет, не подходит. Нужно работать только с 1 массивом.
тогда выделяй память заранее большего размера, чтобы туда поместилась исходная последовательность + нули, потому как realloc делает другой массив
Нет, я ошибся, под не использованием другого массива я подразумевал realloc, сорри.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.01.2010, 21:49
Помогаю со студенческими работами здесь

Динамические массивы структур и выделение (перевыделение) памяти
Здравствуйте. Делаю систему обновления. С ftp и unicode разобрался. теперь встала проблема с сылками и размерностями массивов. В общем есть...

Перевыделение памяти realloc
Есть двумерный массив char **inpWords, в который я добавляю слова из файла, отсеивая пробельные символы. из файла считываю посимвольно....

Перевыделение памяти или ещё какая-то ерунда?
цикл {...;font=createfont(...);selectobject(hdc,font);TextOut(...);...} должен повторяться любое кол-во раз, хоть бесконечность, но в...

"Перевыделение" памяти
Помогите пожалуйста проиллюстрировать на отдельном примере кода механизм «перевыделения» памяти, реализованный в данном методе void...

Для каждого массива в диалоге ввести размер массива и элементы массива и найти сумму и среднее арифметическое значение для каждого массива
даны 3 различных массива целых чисел(размер каждого не должен превышать 15). Для каждого массива в диалоге ввести размер массива и элементы...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru