Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

21.11.2013, 00:37. Просмотров 506. Ответов 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;
как можно удалить эти строки из памяти? Я их просто не вывожу, но по заданию их нужно именно удалить из памяти, в этом проблема.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2013, 00:37
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Удаление строк из матрицы, очистка памяти от лишних строк (C++):

Матрицы. Удаление строк. - C++
Помогите решить задачку Описать процедуру RemoveRows(A, M, N, K1, K2), удаляющую из вещественной матрицы A размера M × N строки с...

Как производится удаление строк матрицы? - C++
Дан массив и матрица.Из матрицы М удалить строки, сумма элементов которых больше суммы элементов массива V. строки и суммы элементов...

Дописать код о удаление строк и столбцов с матрицы - C++
Данная программа находит Мax элемент в данной матрицы и указывает строку и столбец его нахождения. Нужно дописать, чтобы получалась новая...

Удаление всех строк содержащих минимальный элемент матрицы. - C++
Задание: Составить программу обработки матрицы. Удаление всех строк содержащих минимальный элемент матрицы. #include &lt;stdio.h&gt; ...

Найти количество строк в максимальном множестве попарно непохожих строк заданной матрицы - C++
Мир всем, помогите понять суть задания: &quot;Две строки матрицы назовем похожими, если совпадают множества чисел встречающихся в этих...

Найти сумму всех чётных строк матрицы и отсортировать элементы нечётных строк по возрастанию - C++
1.Задана матрица целых чисел.Найти сумму всех четных строк матрицы и отсортировать элементы не четных строк по возрастанию.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2013, 00:37
Привет! Вот еще темы с ответами:

Перестановка строк матрицы по возрастанию среднего значения строк - C++
Разработать программу для перестановки строк матрицы таким образом, чтобы средние значения по строкам возрастали от первой строки к...

Получить номера строк матрицы, для которых нет равных среди строк с меньшими номерами - C++
Для символьной квадратной матрицы порядка n получить номера строк, для которых нет равных среди строк с меньшими номерами. вот...

Упорядочить по росту сумм элементов строк строки той матрицы, у которой больше нулевых строк - C++
Сидел думал над задачей почти всю ночь условия такие Даны три матрицы размером M x N. Упорядочить по росту сумм элементов строк строки ...

Определить номера тех строк целочисленной матрицы A[N,K], которые совпадают с массивом D[K], если таких строк нет - выдать соответствующее сообщение - C++
Неправильно определяет номера строк, либо вообще определяет строки не совпадающие с D. Не могу найти ошибку, прошу помочь. Вот код: ...


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

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

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