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

Вернуть все четные числа массива в виде нового массива - C++

Восстановить пароль Регистрация
 
 
luigration
2 / 2 / 0
Регистрация: 04.01.2013
Сообщений: 154
28.04.2014, 20:37     Вернуть все четные числа массива в виде нового массива #1
Функция должна вернуть все четные числа массива в виде нового массива.

C++ (Qt)
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
int *f2 (int *mas,int N)
{
    int size=0;
 
    for(int i=0; i<N; i++)
    {
        if(mas[i]%2==0)
        {
            size++;
        }
    }
 
    int *even = new int [size];
 
    
    int j=0;
    for(int i(0); i<N; i++)
    {
        if(mas[i]%2==0)
        {
            even[j] = mas[i];
            j++;
        }
    }
    
    return even;
    delete []even;
    
}
Подскажите, в чем ошибка.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2014, 20:37     Вернуть все четные числа массива в виде нового массива
Посмотрите здесь:

Вывести все четные и нечетные числа массива C++
Из массива JJ(100) в массив NN(100) перенести числа (элементы массива) сначала нечетные, а затем четные. C++
C++ Дан одномерный массив А, состоящий из N элементов. Перенести в начало массива все четные элементы, а в конец массива - все нечетные
Дан одномерный массив А, состоящий из N элементов. Перенести в начало массива все четные элементы, а в конец массива - все нечетные C++
C++ Удалить из массива все четные числа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
28.04.2014, 20:40     Вернуть все четные числа массива в виде нового массива #2
Цитата Сообщение от luigration Посмотреть сообщение
delete []even;
Писать не надо, хотя все равно эта строчка не выполняется,
т.к. стоит после return
alekopoko
1 / 1 / 1
Регистрация: 28.04.2014
Сообщений: 33
28.04.2014, 20:44     Вернуть все четные числа массива в виде нового массива #3
delete не выполняется,выход происходит раньше,return even;
luigration
2 / 2 / 0
Регистрация: 04.01.2013
Сообщений: 154
28.04.2014, 21:00  [ТС]     Вернуть все четные числа массива в виде нового массива #4
Цитата Сообщение от alekopoko Посмотреть сообщение
delete не выполняется,выход происходит раньше,return even;
Это понятно. Эта строчка случайно сюда попала. Что с delete, что без - все равно не работает.
alekopoko
1 / 1 / 1
Регистрация: 28.04.2014
Сообщений: 33
28.04.2014, 21:03     Вернуть все четные числа массива в виде нового массива #5
luigration, зачем тебе указатель на функцию?
может так?
Код
int f2 (int *mas,int N)
luigration
2 / 2 / 0
Регистрация: 04.01.2013
Сообщений: 154
28.04.2014, 21:12  [ТС]     Вернуть все четные числа массива в виде нового массива #6
Цитата Сообщение от alekopoko Посмотреть сообщение
luigration, зачем тебе указатель на функцию?
может так?
Код
int f2 (int *mas,int N)
Так то же самое будет..
Мне казалось, что если функция должна возвращать указатель или массив, то нужно писать со свездой, разве нет? Если убрать звезду, то функция не сможет вернуть массив.
Указатели на функцию объявляются по-другому..
C++ (Qt)
1
int(*p)(int)=&f2;
cooller
 Аватар для cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
28.04.2014, 21:15     Вернуть все четные числа массива в виде нового массива #7
Цитата Сообщение от alekopoko Посмотреть сообщение
зачем тебе указатель на функцию?
а где ты увидел там указатель на функцию?

Добавлено через 2 минуты
luigration, мне интересно, а как ты выводишь потом этот массив?
luigration
2 / 2 / 0
Регистрация: 04.01.2013
Сообщений: 154
28.04.2014, 21:19  [ТС]     Вернуть все четные числа массива в виде нового массива #8
Цитата Сообщение от cooller Посмотреть сообщение
а где ты увидел там указатель на функцию?

Добавлено через 2 минуты
luigration, мне интересно, а как ты выводишь потом этот массив?
Я в главной функции пишу
C++ (Qt)
1
cout << f2(mas,n);
И мне кажется, делаю совершенно неправильно.
alekopoko
1 / 1 / 1
Регистрация: 28.04.2014
Сообщений: 33
28.04.2014, 21:19     Вернуть все четные числа массива в виде нового массива #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
cooller,
а где ты увидел там указатель на функцию?
забыл прототипизацию указателя на функцию) int (*f2) (int *mas,int N);

luigration,
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
#include <iostream>
 int j=0;
using namespace std;
 int *f2 (int *mas,int N)
{
    int size=0;
 
    for(int i=0; i<N; i++)
    {
        if(mas[i]%2==0)
        {
            size++;
        }
    }
 
    int *even = new int [size];
    for(int i(0); i<N; i++)
    {
        if(mas[i]%2==0)
        {
            even[j] = mas[i];
            j++;
        }
    }
    
    return even;
    
}
 void main()
 {
    int a[]={1,2,3,4,5,6,7,8,9,10};
    int *b;
    b=f2(a,10);
    for(int i=0;i<j;i++)
    printf("%d\n",b[i]);
 }
luigration
2 / 2 / 0
Регистрация: 04.01.2013
Сообщений: 154
28.04.2014, 21:24  [ТС]     Вернуть все четные числа массива в виде нового массива #10
То есть в главной функции мне нужно было создать еще один массив, так?
И почему j - глобальная переменная?
cooller
 Аватар для cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
28.04.2014, 21:25     Вернуть все четные числа массива в виде нового массива #11
Цитата Сообщение от luigration Посмотреть сообщение
И мне кажется, делаю совершенно неправильно.
массив нужно выводить в цикле, а для этого нужно знать его размер
так что ты должен вернуть из цикла и размер тоже, либо использовать std::vector
alekopoko
1 / 1 / 1
Регистрация: 28.04.2014
Сообщений: 33
28.04.2014, 21:25     Вернуть все четные числа массива в виде нового массива #12
luigration,
Так то же самое будет..
Мне казалось, что если функция должна возвращать указатель или массив, то нужно писать со свездой, разве нет? Если убрать звезду, то функция не сможет вернуть массив.
Указатели на функцию объявляются по-другому..
Код C++ (QT)
1
int(*p)(int)=&f2;
все правильно говоришь да) это я накосячил)
luigration
2 / 2 / 0
Регистрация: 04.01.2013
Сообщений: 154
28.04.2014, 21:26  [ТС]     Вернуть все четные числа массива в виде нового массива #13
Цитата Сообщение от cooller Посмотреть сообщение
массив нужно выводить в цикле, а для этого нужно знать его размер
так что ты должен вернуть из цикла и размер тоже, либо использовать std::vector
Вектором пользоваться не умею. Пока что.
alekopoko
1 / 1 / 1
Регистрация: 28.04.2014
Сообщений: 33
28.04.2014, 21:27     Вернуть все четные числа массива в виде нового массива #14
luigration,
И почему j - глобальная переменная?
это переменная определяет сколько элементов выводить в Main
ну можно по-разному это все реализовать
luigration
2 / 2 / 0
Регистрация: 04.01.2013
Сообщений: 154
28.04.2014, 21:29  [ТС]     Вернуть все четные числа массива в виде нового массива #15
Цитата Сообщение от alekopoko Посмотреть сообщение
luigration,
это переменная определяет сколько элементов выводить в Main
ну можно по-разному это все реализовать
Не работает все равно..
alekopoko
1 / 1 / 1
Регистрация: 28.04.2014
Сообщений: 33
28.04.2014, 21:33     Вернуть все четные числа массива в виде нового массива #16
luigration,
Не работает все равно..
почему это?печатается же 2 4 6 8 10
и это массив b
которому ты выделил нужный размер в функции f2
какая ошибка?
luigration
2 / 2 / 0
Регистрация: 04.01.2013
Сообщений: 154
28.04.2014, 21:34  [ТС]     Вернуть все четные числа массива в виде нового массива #17
Цитата Сообщение от alekopoko Посмотреть сообщение
luigration,
почему это?печатается же 2 4 6 8 10
и это массив b
которому ты выделил нужный размер в функции f2
какая ошибка?
Все, понятно теперь. Все работает, пардон. Спасибо огромное!
cooller
 Аватар для cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
28.04.2014, 21:36     Вернуть все четные числа массива в виде нового массива #18
alekopoko, лучше не глобальной переменную делать, а передавать по ссылке
alekopoko
1 / 1 / 1
Регистрация: 28.04.2014
Сообщений: 33
28.04.2014, 21:43     Вернуть все четные числа массива в виде нового массива #19
cooller, ну с точки зрения затрат памяти или с точки зрения - что где-то там случайно совпадут индентификаторы и я не замечу, то да. Но программа мизерная,так что разницы нет.
Ну если я правильно понимаю, то ты намекаешь что это плохой стиль программирования) да) не спорю)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2014, 22:22     Вернуть все четные числа массива в виде нового массива
Еще ссылки по теме:

C++ Не нарушая порядка следования нужно расположить в начале массива все четные числа а затем нечетные
Вывести все четные числа массива в порядке возрастания их индексов, а затем все нечетные в порядке убывания C++
Поставить в начало массива все четные элементы, а конец – все нечетные C++

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

Или воспользуйтесь поиском по форуму:
luigration
2 / 2 / 0
Регистрация: 04.01.2013
Сообщений: 154
28.04.2014, 22:22  [ТС]     Вернуть все четные числа массива в виде нового массива #20
Цитата Сообщение от cooller Посмотреть сообщение
alekopoko, лучше не глобальной переменную делать, а передавать по ссылке
Что именно передавать по ссылке? Вернее где ее передавать?

Добавлено через 15 минут
Цитата Сообщение от alekopoko Посмотреть сообщение
cooller, ну с точки зрения затрат памяти или с точки зрения - что где-то там случайно совпадут индентификаторы и я не замечу, то да. Но программа мизерная,так что разницы нет.
Ну если я правильно понимаю, то ты намекаешь что это плохой стиль программирования) да) не спорю)
А как сделать без глобализации j?
Yandex
Объявления
28.04.2014, 22:22     Вернуть все четные числа массива в виде нового массива
Ответ Создать тему
Опции темы

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