Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Drakus
0 / 0 / 0
Регистрация: 27.09.2016
Сообщений: 8
1

Метод-член класса для создания одномерного массива из отрицательных элементов двумерного динамического массива

11.04.2017, 17:24. Просмотров 291. Ответов 7
Метки нет (Все метки)

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

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
#include "stdafx.h"
#include <iostream>
#include <malloc.h>
#include <stdlib.h>
 
using namespace std;
 
 
class CArray_2D{
    int** array;  int* negative;
    int row, col;
public:
    void Create_ar2D(int rows, int cols);
    void Clear();
    void Input_ar2D();
    void Print_ar2D();
    void Clear_ar2D();
};
 
int main(){
    int rows, colums;
    cout << "Enter the rows of array:" << endl;
    cin >> rows;
    cout << "Enter the colums of array:" << endl;
    cin >> colums;
    CArray_2D obj1;
    obj1.Create_ar2D(rows, colums);
    obj1.Input_ar2D();
    obj1.Print_ar2D();
    system("pause");
    obj1.Clear();
}
 
 
void CArray_2D::Create_ar2D(int rows, int cols)
{
    row = rows;
    col = cols;
    array = (int**)malloc(row*sizeof(int*));
    for (int i = 0; i<row; i++)
        array[i] = (int*)malloc(col*sizeof(int));
}
 
void CArray_2D::Clear()
{
    free(array);
}
 
 
void CArray_2D::Input_ar2D() 
 
{
    cout << endl << "Enter numbers of array:" << endl;
    for (int i = 0; i<row; i++)
    {
        for (int j = 0; j<col; j++)
        {
            cout << "array[" << i << "][" << j << "] = ";
            cin >> array[i][j];
        }
    }
}
 
void CArray_2D::Print_ar2D() 
{
    cout << "Negative array:" << endl;
    negative = (int*)malloc(row*sizeof(int));
    for (int i = 0; i < row; i++)
    {
        int sum(0);
        int n(0);
        for (int j = 0; j < row; j++)
        {
            if (array[i][j] < 0)
            {
                sum += array[i][j];
                n++;
            }
        }
        if (n == 0)
            negative[i] = 0;
        else
            negative[i] = n;
        cout << negative[i] << endl;
    }
    return;
    delete[] negative;
}
Метод-член класса для создания одномерного массива из отрицательных элементов двумерного динамического массива
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2017, 17:24
Ответы с готовыми решениями:

Разработать метод-член класса для определения минимального и максимального элементов одномерного динамическо
Помогите!!! разработать метод - член класса для определения минимального и...

Реализовать и протестировать функцию создания двумерного динамического массива
Ребята , помогите решить задачу : Реализовать и протестировать функцию...

Как создать шаблон класса одномерного динамического массива?
Нужно решить задачу(консольное приложение(совместимое с visual studio 2005)): ...

Создать функцию для замены отрицательных элементов одномерного массива на их модули
создать функцию для замены отрицательных элементов одномерного массива на их...

Для одномерного целочисленного массива найти количество и процентное соотношение отрицательных элементов
Люди добрые, помогите! Для одномерного целочисленного массива из 10 элементов...

7
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
11.04.2017, 17:44 2
Какая из функций его создаёт?
0
Drakus
0 / 0 / 0
Регистрация: 27.09.2016
Сообщений: 8
11.04.2017, 18:13  [ТС] 3
negative = (int*)malloc(row*sizeof(int))
0
Loafer
11 / 5 / 4
Регистрация: 03.11.2016
Сообщений: 16
Записей в блоге: 18
11.04.2017, 18:59 4
Drakus,
строка 72:
C++
1
for (int j = 0; j < row; j++)
Вместо row должно быть col.

P.S. Зачем считать sum, если оно не используется?

Добавлено через 6 минут
Drakus,
Неверно освобождаешь память. Надо сделать free по каждой строке, и только потом по всему array. Если используешь malloc, то используй везде free. Использование malloc и delete выглядит как то не очень.
0
Drakus
0 / 0 / 0
Регистрация: 27.09.2016
Сообщений: 8
11.04.2017, 19:02  [ТС] 5
Loafer, Спасибо, результат изменился, но все-равно неправильно.

P.S. Сам не знаю, мне друг эту часть помог.
0
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
11.04.2017, 19:21 6
C++
1
2
3
class CArray_2D{
    int** array;  int* negative;
    int row, col, nsize;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void CArray_2D::Create_negative()
{
    negative = NULL;
    int nsize = 0;
    for (int i = 0; i < row; i++)
        for (int j = 0; j < col; j++)
            if (array[i][j] < 0)
                ++nsize;
 
    if (nsize > 0)
    {
        negative = new int[nsize];
        for (int i = 0, n = 0; i < row; i++)
            for (int j = 0; j < col; j++)
                if (array[i][j] < 0)
                    negative[n++] = array[i][j];
    }
}
Вывод сделай отдельно, а удаление в деструкторе.
0
Drakus
0 / 0 / 0
Регистрация: 27.09.2016
Сообщений: 8
11.04.2017, 20:20  [ТС] 7
nmcf, Сделел, но теперь ошибка С1083 выскакивает
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
#include "stdafx.h"
#include <iostream>
#include <malloc.h>
#include <stdlib.h>
 
using namespace std;
 
 
class CArray_2D{
    int** array;  int* negative;
    int row, col, nzise;
public:
    //функції-члени класу
    void Create_ar2D(int rows, int cols);
    void Clear();
    void Input_ar2D();
    void Print_ar2D();
    void Clear_ar2D();
    void Create_negative();
    void PrintNegative_ar2D();
    ~CArray_2D();
};
 
int main(){
    int rows, colums;
    cout << "Enter the rows of array:" << endl;
    cin >> rows;
    cout << "Enter the colums of array:" << endl;
    cin >> colums;
    CArray_2D obj1;
    obj1.Create_ar2D(rows, colums);
    obj1.Input_ar2D();
    obj1.Print_ar2D();
    system("pause");
    obj1.Clear();
}
 
 
void CArray_2D::Create_ar2D(int rows, int cols)
{
    row = rows;
    col = cols;
    //виділення пам’яті під двомірний масив
    array = (int**)malloc(row*sizeof(int*));
    for (int i = 0; i<row; i++)
        array[i] = (int*)malloc(col*sizeof(int));
}
 
void CArray_2D::Clear()
{
    free(array);
}
 
 
void CArray_2D::Input_ar2D() //функція введення елементів масиву
 
{
    cout << endl << "Enter numbers of array:" << endl;
    for (int i = 0; i<row; i++)
    {
        for (int j = 0; j<col; j++)
        {
            cout << "array[" << i << "][" << j << "] = ";
            cin >> array[i][j];
        }
    }
}
 
void CArray_2D::Create_negative()
{
    negative = NULL;
    int nsize = 0;
    for (int i = 0; i < row; i++)
        for (int j = 0; j < col; j++)
            if (array[i][j] < 0)
                ++nsize;
 
    if (nsize > 0)
    {
        negative = new int[nsize];
        for (int i = 0, n = 0; i < row; i++)
            for (int j = 0; j < col; j++)
                if (array[i][j] < 0)
                    negative[n++] = array[i][j];
    }
}
 
 
void CArray_2D::PrintNegative_ar2D()
{
    cout << endl << "Array:" << endl;
    for (int i = 0; i<row; i++)
    {
        for (int j = 0; j<col; j++)
        {
            if (array[i][j] < 0)
                cout << negative[i] << endl;
        }
    }
}
 
CArray_2D::~CArray_2D()
{
    delete[] negative;
}
0
Photofenix
61 / 61 / 39
Регистрация: 18.11.2016
Сообщений: 513
Завершенные тесты: 1
11.04.2017, 20:55 8
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
#include <Windows.h>
#include <iostream>
#include <string>
 
class array{
private:
    int **arr, *neg_arr;
    short a, b;
public:
    array (){
        
        int count = 0;
 
        std::cout << "Строки: "; std::cin >> a;
        std::cout << "Столбцы: "; std::cin >> b;
 
        arr = new int *[a];
        for (int i(0); i!=a; i++)
            arr[i] = new int [b];
 
        for (int i(0); i!=a; i++){
            for (int j(0); j!=b; j++){
                arr[i][j] = rand()%10 - 5;
                if (arr[i][j] < 0)
                    count ++;
            }
        }
 
            neg_arr = new int [count];
            count = 0;
            
        for (int i(0); i!=a; i++){
            for (int j(0); j!=b; j++){
                if (arr[i][j] >= 0)
                    continue;
                else
                    neg_arr[count++] = arr[i][j];
            }
        }
 
        for (int i(0); i!=count; i++)
            std::cout << neg_arr[i] << std::endl;
    }
 
    ~array (){
        for (int i(0); i!=a; i++)
            delete [] arr[i];
        delete [] arr;
        delete [] neg_arr;
    }
 
};
 
int main(){
    SetConsoleCP (1251);
    SetConsoleOutputCP (1251);
 
    array lesson;
 
    system ("pause");
    return NULL;
};
0
11.04.2017, 20:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2017, 20:55

количество четных элементов одномерного массива до числа равному а, Определить количество нечетных элементов двумерного массива
1.Найти количество четных элементов одномерного массива до первого встреченного...

Сравнение элементов двумерного динамического массива
Для работы программы мне нужно сравнивать элементы двумерного динамического...

Вычислить произведение элементов одномерного динамического массива до первого отрицательного
Создать одномерный динамический массив целых чисел размера n, где n вводит...


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

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

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