0 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 18
1

Получить массив, состоящий только из четных чисел исходного массива

08.04.2016, 18:01. Показов 3176. Ответов 14
Метки нет (Все метки)

Здравствуйте, помогите решить проблему.
Делаю задание ".Составьте программу для решения следующей задачи: «Дан одномерный массив целого типа. Получить другой массив, состоящий только из четных чисел исходного массива или сообщить, что таких чисел нет. Полученный массив вывести в порядке убывания элементов».
Задания оформить в меню - каждое задание отдельный пункт меню. Заполнение массива, вывод массива на экран вне меню."

Нужно очистить динамический массив и перенести четные числа из основного в буферный, но не все нужные числа переносятся в буферный массив, на некоторых позициях ячейки забиты мусором. В чем может быть проблема?

Код функции перевыделения памяти :

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
int* Temp(int *arr, int &size)
{
    int *temp = new int[size];
    int amount = 0;
    for (int i = 0; i < size; i++)
    {
        if (arr[i] % 2 == 0)
        {
            temp[i] = arr[i];
            amount++;
        }
 
    }
 
    delete[]arr;
     size = +amount;
     arr = new int[size];
 
    for (int i = 0, j = 0; i < size; i++)
    {
        
        if (i < size + amount)
        {
            arr[i] = temp[i];
        }
    }
    
    
    if (amount == 0)
    {
        cout << "Нет нечетных чисел!" << endl;
    }
    delete[]temp;
    return arr;
 
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2016, 18:01
Ответы с готовыми решениями:

Получить массив, состоящий только из нечетных чисел исходного массива
1.Составьте программу для решения следующей задачи: «Дан одномерный массив целого типа. Получить...

Сформировать массив состоящий из четных и нечетных элементов помещеных в порядке следования исходного массива
Создать массив с размерностью 200 элементов со значениями от 0 до 100. Требуется сформировать...

Получить массив, состоящий из отрицательных элементов исходного массива
Есть задание Я написал программу, которая собственно и выводит отрицательные элементы. Но нужно...

Получить новый массив, состоящий из сумм цифр элементов исходного массива
составить схему алгоритма и программу решения задачи. Ввести массив, состоящий из 9 элементов...

14
7167 / 6142 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
08.04.2016, 18:12 2
Зачем ты удаляешь arr? По заданию создать второй массив с чётными числами. Примерно так:
C++
1
2
3
4
5
6
7
8
9
    int *temp = new int[size];
    int amount = 0;
    for (int i = 0; i < size; i++)
    {
        if (arr[i] % 2 == 0) temp[amount++] = arr[i];
    }
 
    size = amount;
    return tmp;
1
363 / 320 / 218
Регистрация: 21.02.2013
Сообщений: 752
08.04.2016, 18:16 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int* Temp(int *arr, int &size)
{
    int *temp = new int[size];
    int amount = 0;
    for (int i = 0; i < size; i++)
    {
        if (arr[i] % 2 == 0)
        {
            temp[i] = arr[i];
            amount++;
            size--; // размер массива нужно уменьшать, а то если не все числа четные останется мусор в массиве temp
        }
 
    }
0
55 / 55 / 45
Регистрация: 24.03.2016
Сообщений: 378
08.04.2016, 18:18 4
temp[i] = arr[i];
забивает мусором потому что может быть что temp[2] =arr[2]; а потом сразу temp[4] = arr[4], а temp[3] остается неинициализированным элементом массива.
0
363 / 320 / 218
Регистрация: 21.02.2013
Сообщений: 752
08.04.2016, 18:18 5
а ну nmcf, правильно ответил
0
7167 / 6142 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
08.04.2016, 18:20 6
jurok_85, причём тут размер? Он в amount считается. Индексы должны быть независимые у массивов.
0
0 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 18
08.04.2016, 18:21  [ТС] 7
jurok_85, В буферном массиве выделяется столько ячеек сколько было найдено четных чисел, там удалять не надо ничего.
0
7167 / 6142 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
08.04.2016, 18:25 8
Predator43, ты их копируешь изначально неверно. Размер тут не при чём.
0
363 / 320 / 218
Регистрация: 21.02.2013
Сообщений: 752
08.04.2016, 18:25 9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int* Temp(int *arr, int &size)
{
    int *temp = new int[size];
    int amount = 0;
    for (int i = 0; i < size; i++)
    {
        if (arr[i] % 2 == 0)
        {
            temp[i] = arr[i];
            amount++;
            
        }
     else
       size--; // размер массива нужно уменьшать если число не четное
      }
 
    delete[]arr;
 
     arr = new int[size];
 
    }
nmcf, я сморозил немного, думал просто в этом направлении, то есть когда заново создаем arr уже создаем его с меньшим размером
0
0 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 18
08.04.2016, 20:32  [ТС] 10
Так и не получилось решить проблему, выкладываю весь код, может есть ошибка где-то ещё...

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <iostream>
#include <conio.h>
#include <time.h>
 
 
using namespace std;
 
void SetArr     (int *arr, int size);
void ShowArr    (int *arr, int size);
int* Temp       (int *arr, int &size);
void Menu       (int *arr, int &size);
 
 
 
void main()
{
    setlocale(LC_ALL, "rus");
    srand(time(NULL));
 
    int size = 15;
    int *arr = new int[size];
    int *temp = new int[size];
    SetArr(arr, size);
    ShowArr(arr, size);
    Menu(arr, size);
 
 
    _getch();
}
 
 
void SetArr(int *arr, int size)
{
    for (int i = 0; i < size; i++)
    {
        arr[i] = -100 + rand() % 200;
    }
}
 
void ShowArr(int *arr, int size)
{
    for (int i = 0; i < size; i++)
    {
        cout << "[" << i << "]" << arr[i] << endl;
    }
}
 
 
int* Temp(int *arr, int &size)
{
    int *temp = new int[size];
    int *arr2 = new int[size];
    int amount = 0;
    for (int i = 0; i < size; i++)
    {
        if (arr[i] % 2 == 0)
        {
            temp[i] = arr[i];
            amount++;
        }
        else
        {
            size--;
        }
 
    }
 
    
    size = +amount;
    arr2 = new int[size];
 
    for (int i = 0, j = 0; i < size; i++)
    {
 
        if (i < size + amount)
        {
            arr2[i] = temp[i];
        }
    }
 
 
    if (amount == 0)
    {
        cout << "Нет нечетных чисел!" << endl;
    }
    delete[]temp;
    return arr2;
 
}
void Menu(int *arr, int &size)
{
    char key;
    cout << "\t\t\t\t\tРабота с массивами." << endl << endl;
    do
    {
 
        cout << "1.Вывести на экран только не чётные числа данного массива. "         << endl
            << "2.Вывести на экран только положительные числа данного массива." << endl
            << "3.Вывести на экран только четные числа данного массива."        << endl
            << "4.Вывести на экран числа меньшие заданного числа."           << endl;
 
        cin >> key;
 
        if (key == '1')
        {
            arr = Temp(arr, size);
 
            ShowArr(arr, size);
 
        }
        if (key == '2')
        {
            ShowArr(arr, size);
        }
 
 
 
    } while (key != '0');
}
0
363 / 320 / 218
Регистрация: 21.02.2013
Сообщений: 752
08.04.2016, 20:39 11
size = +amount ?

Добавлено через 19 секунд
size = +amount ?
0
0 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 18
08.04.2016, 20:53  [ТС] 12
jurok_85,Задаёт новый размер массива под количество четных чисел.
0
7167 / 6142 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
08.04.2016, 21:09 13
Predator43, до тебя так и не дошло, что я написал.
0
363 / 320 / 218
Регистрация: 21.02.2013
Сообщений: 752
08.04.2016, 21:15 14
size= amount; тогда уже и можешь убрать size-- в else условии
0
0 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 18
08.04.2016, 21:37  [ТС] 15
jurok_85, Я так делал, но в ячейках всё равно мусор.
Миниатюры
Получить массив, состоящий только из четных чисел исходного массива  
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.04.2016, 21:37
Помогаю со студенческими работами здесь

Получить массив, состоящий из элементов исходного массива, которые кратны двум
1. Задан массив А(N). Получить из него массив В, состоящий из элементов массива А, которые кратны...

Получить новый массив, состоящий из цифр элементов исходного массива, стоящих в старших разрядах
Ввести целочисленный массив, состоящий из 7 элементов(семь двузначных чисел). Получить новый...

Получить новый массив, состоящий из неповторяющихся элементов исходного
Условие: Из произвольного одномерного массива целых чисел М1 получить массив М2, состоящий лишь...

Получить из исходного массива массив отрицательных чисел и отсортировать его по убыванию методом выбора
Дан массив из N целых чисел. Получить из него массив отрицательных чисел и отсортировать его по...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru