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

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

Восстановить пароль Регистрация
 
FC-NEO
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 14
17.01.2010, 18:38     Перевыделение массива #1
Нужно написать функцию, которая в массиве целых чисел перед каждым четным элементом добавляет 0.
Т.е. если был массив 1 6 3 7 8 15 то должен получится в итоге 1 0 6 3 7 0 8 15.
К сожалению код моей попытки решения этой задачи не сохранился. Но ход действий могу рассказать.
В начале стандартно ввожу массив любой длины используя malloc . Потом подсчитываю сколько элементов четных в этом массиве. Пробовал 2 разных способа, до выделить массив делая n+p ( n размер исходного массива, p количество элементов четных). Но поскольку переменная "p" не является константной, то этот способ не помог. затем пробовал realloc, но там были проблемы со сдвигом массива в перевыделенную память....
В общем, прошу вашей помощи в решении этой задачи...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2010, 18:38     Перевыделение массива
Посмотрите здесь:

Найти количество элементов в этих массива равных первому элементу массива S C++
C++ Функции обработки массива (определить произведение элементов массива, заменить модулем все элементы массива, уничтожить элемент с заданным значением)
C++ Создать два массива. Вычислить количество тех элементов каждого массива, для которых выполняется неравенство: 2<элемент массива<10
Постороить из 2 мерного массива в 1 мерный, который содержит все элементы 2 мерного массива , содержащихся по периметру массива C++
C++ Неправильное перевыделение
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Darky
Быдлокодер
 Аватар для Darky
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
17.01.2010, 18:43     Перевыделение массива #2
А что мешает не создавать массив, а просто вывести ноль перед элементами?
Например,
C++
1
2
3
4
if (A[i]%2!=0)
  cout<<A[i]<<" ";
else
  cout<<"0 "<<A[i]<<" ";
FC-NEO
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 14
17.01.2010, 19:02  [ТС]     Перевыделение массива #3
Цитата Сообщение от Darky Посмотреть сообщение
А что мешает не создавать массив, а просто вывести ноль перед элементами?
Например,
C++
1
2
3
4
if (A[i]%2!=0)
  cout<<A[i]<<" ";
else
  cout<<"0 "<<A[i]<<" ";
Условие задачи... И предирчевый экзаминатор, можно сказать со 100% увереностью что он скажет что просто сделать вывод, не изменяя массива исходного халтура....
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
17.01.2010, 19:54     Перевыделение массива #4
А в чём проблема-то?
а) Ввести размер массива, создать массив, ввести элементы
б) Найти число чётных элементов, через malloc создать ещё один массив длиной n+p.
в) Занести в новый массив элементы старого и нули в нужном порядке (слегка усложнённый вариант копирования).
г) Удалить исходный массив через free, распечатать новый массив.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
17.01.2010, 19:56     Перевыделение массива #5
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;
}
FC-NEO
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 14
17.01.2010, 20:31  [ТС]     Перевыделение массива #6
Цитата Сообщение от 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* ...)
Rififi
 Аватар для Rififi
2330 / 1045 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
17.01.2010, 20:42     Перевыделение массива #7
FC-NEO,

Нет, не подходит. Нужно работать только с 1 массивом.
тогда выделяй память заранее большего размера, чтобы туда поместилась исходная последовательность + нули, потому как realloc делает другой массив
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2010, 21:49     Перевыделение массива
Еще ссылки по теме:

Каждый элемент массива A[k] заменить средним значением первых k элементов массива C++
C++ Динамические массивы структур и выделение (перевыделение) памяти
Как найти медиану неотсортированного массива (без использования дополнительного массива) C++

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

Или воспользуйтесь поиском по форуму:
FC-NEO
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 14
17.01.2010, 21:49  [ТС]     Перевыделение массива #8
Цитата Сообщение от Rififi Посмотреть сообщение
FC-NEO,

Нет, не подходит. Нужно работать только с 1 массивом.
тогда выделяй память заранее большего размера, чтобы туда поместилась исходная последовательность + нули, потому как realloc делает другой массив
Нет, я ошибся, под не использованием другого массива я подразумевал realloc, сорри.
Yandex
Объявления
17.01.2010, 21:49     Перевыделение массива
Ответ Создать тему
Опции темы

Текущее время: 05:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru