12 / 9 / 5
Регистрация: 04.01.2013
Сообщений: 205
1

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

28.04.2014, 20:37. Показов 2174. Ответов 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;
    
}
Подскажите, в чем ошибка.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2014, 20:37
Ответы с готовыми решениями:

Удалить из массива все четные числа
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int q = 0; int z = 0; int main()...

Удалить из массива все четные числа
Удалить из массива все четные числа не используя вспомогательный массив. int b; int i,j=0;...

Вывести все четные и нечетные числа массива
Здравствуйте!!! У меня есть такое задание не могу решать может поможете?? 1. Надо заполнить все...

Дан одномерный массив А, состоящий из N элементов. Перенести в начало массива все четные элементы, а в конец массива - все нечетные
Помогите, пожалуйста. &gt;&gt;&quot;Дан одномерный массив А, состоящий из N элементов. Перенести в начало...

24
Модератор
Эксперт С++
11348 / 9312 / 5594
Регистрация: 18.12.2011
Сообщений: 24,849
28.04.2014, 20:40 2
Цитата Сообщение от luigration Посмотреть сообщение
delete []even;
Писать не надо, хотя все равно эта строчка не выполняется,
т.к. стоит после return
0
1 / 1 / 1
Регистрация: 28.04.2014
Сообщений: 33
28.04.2014, 20:44 3
delete не выполняется,выход происходит раньше,return even;
0
12 / 9 / 5
Регистрация: 04.01.2013
Сообщений: 205
28.04.2014, 21:00  [ТС] 4
Цитата Сообщение от alekopoko Посмотреть сообщение
delete не выполняется,выход происходит раньше,return even;
Это понятно. Эта строчка случайно сюда попала. Что с delete, что без - все равно не работает.
0
1 / 1 / 1
Регистрация: 28.04.2014
Сообщений: 33
28.04.2014, 21:03 5
luigration, зачем тебе указатель на функцию?
может так?
Код
int f2 (int *mas,int N)
0
12 / 9 / 5
Регистрация: 04.01.2013
Сообщений: 205
28.04.2014, 21:12  [ТС] 6
Цитата Сообщение от alekopoko Посмотреть сообщение
luigration, зачем тебе указатель на функцию?
может так?
Код
int f2 (int *mas,int N)
Так то же самое будет..
Мне казалось, что если функция должна возвращать указатель или массив, то нужно писать со свездой, разве нет? Если убрать звезду, то функция не сможет вернуть массив.
Указатели на функцию объявляются по-другому..
C++ (Qt)
1
int(*p)(int)=&f2;
0
571 / 539 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
28.04.2014, 21:15 7
Цитата Сообщение от alekopoko Посмотреть сообщение
зачем тебе указатель на функцию?
а где ты увидел там указатель на функцию?

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

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

Решение

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]);
 }
0
12 / 9 / 5
Регистрация: 04.01.2013
Сообщений: 205
28.04.2014, 21:24  [ТС] 10
То есть в главной функции мне нужно было создать еще один массив, так?
И почему j - глобальная переменная?
0
571 / 539 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
28.04.2014, 21:25 11
Цитата Сообщение от luigration Посмотреть сообщение
И мне кажется, делаю совершенно неправильно.
массив нужно выводить в цикле, а для этого нужно знать его размер
так что ты должен вернуть из цикла и размер тоже, либо использовать std::vector
0
1 / 1 / 1
Регистрация: 28.04.2014
Сообщений: 33
28.04.2014, 21:25 12
luigration,
Так то же самое будет..
Мне казалось, что если функция должна возвращать указатель или массив, то нужно писать со свездой, разве нет? Если убрать звезду, то функция не сможет вернуть массив.
Указатели на функцию объявляются по-другому..
Код C++ (QT)
1
int(*p)(int)=&f2;
все правильно говоришь да) это я накосячил)
0
12 / 9 / 5
Регистрация: 04.01.2013
Сообщений: 205
28.04.2014, 21:26  [ТС] 13
Цитата Сообщение от cooller Посмотреть сообщение
массив нужно выводить в цикле, а для этого нужно знать его размер
так что ты должен вернуть из цикла и размер тоже, либо использовать std::vector
Вектором пользоваться не умею. Пока что.
0
1 / 1 / 1
Регистрация: 28.04.2014
Сообщений: 33
28.04.2014, 21:27 14
luigration,
И почему j - глобальная переменная?
это переменная определяет сколько элементов выводить в Main
ну можно по-разному это все реализовать
0
12 / 9 / 5
Регистрация: 04.01.2013
Сообщений: 205
28.04.2014, 21:29  [ТС] 15
Цитата Сообщение от alekopoko Посмотреть сообщение
luigration,
это переменная определяет сколько элементов выводить в Main
ну можно по-разному это все реализовать
Не работает все равно..
0
1 / 1 / 1
Регистрация: 28.04.2014
Сообщений: 33
28.04.2014, 21:33 16
luigration,
Не работает все равно..
почему это?печатается же 2 4 6 8 10
и это массив b
которому ты выделил нужный размер в функции f2
какая ошибка?
0
12 / 9 / 5
Регистрация: 04.01.2013
Сообщений: 205
28.04.2014, 21:34  [ТС] 17
Цитата Сообщение от alekopoko Посмотреть сообщение
luigration,
почему это?печатается же 2 4 6 8 10
и это массив b
которому ты выделил нужный размер в функции f2
какая ошибка?
Все, понятно теперь. Все работает, пардон. Спасибо огромное!
0
571 / 539 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
28.04.2014, 21:36 18
alekopoko, лучше не глобальной переменную делать, а передавать по ссылке
0
1 / 1 / 1
Регистрация: 28.04.2014
Сообщений: 33
28.04.2014, 21:43 19
cooller, ну с точки зрения затрат памяти или с точки зрения - что где-то там случайно совпадут индентификаторы и я не замечу, то да. Но программа мизерная,так что разницы нет.
Ну если я правильно понимаю, то ты намекаешь что это плохой стиль программирования) да) не спорю)
0
12 / 9 / 5
Регистрация: 04.01.2013
Сообщений: 205
28.04.2014, 22:22  [ТС] 20
Цитата Сообщение от cooller Посмотреть сообщение
alekopoko, лучше не глобальной переменную делать, а передавать по ссылке
Что именно передавать по ссылке? Вернее где ее передавать?

Добавлено через 15 минут
Цитата Сообщение от alekopoko Посмотреть сообщение
cooller, ну с точки зрения затрат памяти или с точки зрения - что где-то там случайно совпадут индентификаторы и я не замечу, то да. Но программа мизерная,так что разницы нет.
Ну если я правильно понимаю, то ты намекаешь что это плохой стиль программирования) да) не спорю)
А как сделать без глобализации j?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.04.2014, 22:22

Дан одномерный массив А, состоящий из N элементов. Перенести в начало массива все четные элементы, а в конец массива - все нечетные
Помогите, пожалуйста. &gt;&gt;&quot;Дан одномерный массив А, состоящий из N элементов. Сколько значений...

Удалить из массива целых чисел все нули. Сформировать два новых массива. В первый массив переписать все четные
Помогите сделать данную программу: Удалить из массива целых чисел все нули. Сформировать два новых...

Вывести все четные числа массива в порядке возрастания их индексов, а затем все нечетные в порядке убывания
Дан целочисленный массив размера N.Вывести в начале все содержащиеся в данном массиве четные числа...

Не нарушая порядка следования нужно расположить в начале массива все четные числа а затем нечетные
Помогите пожалуйста с написанием программы. Не нарушая порядка следования нужно расположить в...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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