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

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

Войти
Регистрация
Восстановить пароль
 
anon123
Сообщений: n/a
#1

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

21.11.2013, 00:37. Просмотров 428. Ответов 0
Метки нет (Все метки)

Здравствуйте, помогите с задачкой.
Напишите программу по обработке массива, как объекта созданного Вами класса «Массив»,
согласно варианту и выполните на тестовых данных. В отчете представьте листинг программы
и результатов вычислений. Операции с массивами следует реализовать программно, используя указатели, а не индексы:
Дана целочисленная квадратная матрица порядка 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++ Удаление строк из файла
Удаление из строк C++
C++ Удаление последних строк.
Удаление из строк C++
C++ Удаление строк в файле
Матрицы. Удаление строк. C++
Подсчет строк и очистка экрана С++ C++
C++ Дописать код о удаление строк и столбцов с матрицы
Как производится удаление строк матрицы? C++

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

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

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