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

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

Войти
Регистрация
Восстановить пароль
 
FC-NEO
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 14
#1

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

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

Нужно написать функцию, которая в массиве целых чисел перед каждым четным элементом добавляет 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перевыделение массива (C++):

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

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

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

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

Создать два массива. Вычислить количество тех элементов каждого массива, для которых выполняется неравенство: 2<элемент массива<10 - C++
помогите,пожалуйста! есть вот такие задания...ОЧЕНЬ надо на завтра... Задача 4. Определить два одномерных массива А(19) и В(16);...

Функции обработки массива (определить произведение элементов массива, заменить модулем все элементы массива, уничтожить элемент с заданным значением) - C++
Вот задания,не могу сделать ни одного из них,буду благодарен за помощь. Написать функции для выполнения операций над одномерным...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
Эксперт С++
1636 / 1008 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
17.01.2010, 19:54 #4
А в чём проблема-то?
а) Ввести размер массива, создать массив, ввести элементы
б) Найти число чётных элементов, через malloc создать ещё один массив длиной n+p.
в) Занести в новый массив элементы старого и нули в нужном порядке (слегка усложнённый вариант копирования).
г) Удалить исходный массив через free, распечатать новый массив.
valeriikozlov
Эксперт C++
4670 / 2496 / 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
2359 / 1054 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
17.01.2010, 20:42 #7
FC-NEO,

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.01.2010, 21:49
Ответ Создать тему
Опции темы

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