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

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

Войти
Регистрация
Восстановить пароль
 
 
luigration
2 / 2 / 0
Регистрация: 04.01.2013
Сообщений: 159
#1

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

28.04.2014, 20:37. Просмотров 580. Ответов 24
Метки нет (Все метки)

Функция должна вернуть все четные числа массива в виде нового массива.

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++ Удалить из массива все четные числа
Вывести все четные и нечетные числа массива C++
Дан одномерный массив А, состоящий из N элементов. Перенести в начало массива все четные элементы, а в конец массива - все нечетные C++
C++ Удалить из массива целых чисел все нули. Сформировать два новых массива. В первый массив переписать все четные
C++ Дан одномерный массив А, состоящий из N элементов. Перенести в начало массива все четные элементы, а в конец массива - все нечетные
Вывести все четные числа массива в порядке возрастания их индексов, а затем все нечетные в порядке убывания C++
C++ Не нарушая порядка следования нужно расположить в начале массива все четные числа а затем нечетные
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6282 / 5885 / 1905
Регистрация: 18.12.2011
Сообщений: 15,096
Завершенные тесты: 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
Сообщений: 159
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
Сообщений: 159
28.04.2014, 21:12  [ТС]     Вернуть все четные числа массива в виде нового массива #6
Цитата Сообщение от alekopoko Посмотреть сообщение
luigration, зачем тебе указатель на функцию?
может так?
Код
int f2 (int *mas,int N)
Так то же самое будет..
Мне казалось, что если функция должна возвращать указатель или массив, то нужно писать со свездой, разве нет? Если убрать звезду, то функция не сможет вернуть массив.
Указатели на функцию объявляются по-другому..
C++ (Qt)
1
int(*p)(int)=&f2;
cooller
565 / 533 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
28.04.2014, 21:15     Вернуть все четные числа массива в виде нового массива #7
Цитата Сообщение от alekopoko Посмотреть сообщение
зачем тебе указатель на функцию?
а где ты увидел там указатель на функцию?

Добавлено через 2 минуты
luigration, мне интересно, а как ты выводишь потом этот массив?
luigration
2 / 2 / 0
Регистрация: 04.01.2013
Сообщений: 159
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
Сообщений: 159
28.04.2014, 21:24  [ТС]     Вернуть все четные числа массива в виде нового массива #10
То есть в главной функции мне нужно было создать еще один массив, так?
И почему j - глобальная переменная?
cooller
565 / 533 / 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
Сообщений: 159
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
Сообщений: 159
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
Сообщений: 159
28.04.2014, 21:34  [ТС]     Вернуть все четные числа массива в виде нового массива #17
Цитата Сообщение от alekopoko Посмотреть сообщение
luigration,
почему это?печатается же 2 4 6 8 10
и это массив b
которому ты выделил нужный размер в функции f2
какая ошибка?
Все, понятно теперь. Все работает, пардон. Спасибо огромное!
cooller
565 / 533 / 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     Вернуть все четные числа массива в виде нового массива
Еще ссылки по теме:
Из массива JJ(100) в массив NN(100) перенести числа (элементы массива) сначала нечетные, а затем четные. C++
Поставить в начало массива все четные элементы, а конец – все нечетные C++
Вывести все четные элементы массива C++
Вывести все четные элементы массива C++
Удалить из массива все четные элементы C++

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

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

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

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