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

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

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

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

21.11.2013, 00:37. Просмотров 451. Ответов 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++
Помогите решить задачку Описать процедуру RemoveRows(A, M, N, K1, K2), удаляющую из вещественной матрицы A размера M × N строки с...

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

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

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

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

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

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

Подсчет строк и очистка экрана С++ - C++
Добрый НОЧИ Возник вопрос после заполнения всего экрана (свободных строк осталось меньше пяти) – экран очищается и программа продолжает...

Удаление из строк - C++
В символьной строке удалить все слова состоящие из нечётного количества букв.

Удаление из строк - C++
Удаление из строк всех букв со сжатием строк ( остаются цифры и символы) PS Дано: 2 строки по 80 символов.

Массив строк, выделение памяти - C++
Здравствуйте! #include &lt;CONIO.H&gt; #include &lt;IOSTREAM.H&gt; void main() { char *val; int n; cout&lt;&lt;&quot;n?&quot;; cin&gt;&gt;n; val=new...

Удаление последних строк. - C++
Есть файл, содержащий неизвестное количество строк. как удалить 3 последние из них?


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

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

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