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

Удаление строк из матрицы, очистка памяти от лишних строк - C++

Восстановить пароль Регистрация
 
anon123
Сообщений: n/a
21.11.2013, 00:37     Удаление строк из матрицы, очистка памяти от лишних строк #1
Здравствуйте, помогите с задачкой.
Напишите программу по обработке массива, как объекта созданного Вами класса «Массив»,
согласно варианту и выполните на тестовых данных. В отчете представьте листинг программы
и результатов вычислений. Операции с массивами следует реализовать программно, используя указатели, а не индексы:
Дана целочисленная квадратная матрица порядка 5. Удалить из матрицы те строки, для которых
количество ненулевых элементов больше количества нулевых элементов в строке.

Не получается очистить память от лишних строк матрицы. Как это сделать?

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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include "stdafx.h"
#include "iostream"
#include "time.h"
#include "mass.h"
 
using namespace std;
 
void main()
{
    int method;
    mass objArr;
    do
    {
        printf("Select input method: 1 - auto :: 2 - manual input\n");
        scanf_s("%d",&method);
        if (method==1)
            objArr.generation();
        if (method==2) 
        {
            printf("Enter matrix: \n");
            objArr.input();
        }
    } while (method!=1 && method!=2);
    printf("Matrix: \n");
    objArr.output();
    objArr.conversion();
    printf("Transformed: \n");
    objArr.output();
    system("pause");
}
 
// mass.h: интерфейс класса
 
class mass
{
    static const int ord=5;
private:
    int *arr;
    int n;
public:
    mass();
    ~mass();
    void generation();
    void input();
    void conversion();
    void delet(int z);
    void output();
};
 
// mass.cpp: реализация класса
 
#include "stdafx.h"
#include "iostream"
#include "time.h"
#include "mass.h"
 
using namespace std;
 
mass::mass()
{
    mass::arr = new int[ord*ord];
}
mass::~mass()
{
    delete [] arr;
    arr=NULL;
}
void mass::generation()
{
    srand((unsigned int)time(0));
    n=5;
    int x;
    for (int i=0; i<ord; i++)
        for (int j=0; j<ord; j++)
        {
            *(arr+i*ord+j)=rand()%10;
            if ((x=rand()%2)==0)
                *(arr+i*ord+j)=x;
        }
}
void mass::input()
{
    srand((unsigned int)time(0));
    n=5;
    int x;
    for (int i=0; i<n; i++)
        for (int j=0; j<ord; j++)
        {
            cin>>*(arr+i*ord+j);
            if ((x=rand()%2)==0)
                *(arr+i*ord+j)=x;
        }
}
void mass::output()
{
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<ord; j++)
            cout<<*(arr+i*ord+j)<<" ";
        cout<<endl;
    }
}
void mass::conversion()
{
    int a,b;
    for (int i=0; i<n; i++)
    {
        a=b=0;
        for (int j=0; j<ord; j++)
            if (0<*(arr+i*ord+j))
                a++;
            else
                b++;
        if (a>b)
        {
            delet(i);
            i--;
        }
    }
}
void mass::delet(int z)
{
    int a=-1,c=-1;
    for (int i=0; i<n; i++)
    {
        if (z!=i)
            a++;
 
        for (int j=0; j<ord; j++)
        {
            if (z!=i)
                *(arr+a*ord+j)=*(arr+i*ord+j);
        }
 
    }
    n--;
}
Добавлено через 37 минут
Если записать такой вывод ненужных строк

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void mass::output()
{
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<ord; j++)
            cout<<*(arr+i*ord+j)<<" ";
        cout<<endl;
    }
    for (int i=0; i<(ord-n); i++) // тут выводим ненужные строки, (ord-n) их число
    {
        for (int j=0; j<ord; j++)
            cout<<*(arr+i*ord+j)<<" "; // где-то здесь должно быть удаление
        cout<<endl;
    }
}
удаление через вот такую запись не работает

C++
1
2
delete [] (arr+i*ord+j);
*(arr+i*ord+j)=NULL;
как можно удалить эти строки из памяти? Я их просто не вывожу, но по заданию их нужно именно удалить из памяти, в этом проблема.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2013, 00:37     Удаление строк из матрицы, очистка памяти от лишних строк
Посмотрите здесь:

C++ Удаление всех строк содержащих минимальный элемент матрицы.
Матрицы. Удаление строк. C++
Подсчет строк и очистка экрана С++ C++
C++ Определить номера тех строк целочисленной матрицы A[N,K], которые совпадают с массивом D[K], если таких строк нет - выдать соответствующее сообщение
C++ Создание программы со своей библиотекой ( удаление элементов с N по M в строке и удаление лишних пробелов(если 2 и более оставить один))
C++ Сортировка строк матрицы C++ (перестановка строк)
C++ Дописать код о удаление строк и столбцов с матрицы
Как производится удаление строк матрицы? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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