Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
32 / 27 / 5
Регистрация: 03.12.2018
Сообщений: 42
1

Удалить все четные столбцы из динамической матрицы

31.01.2021, 02:26. Показов 631. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте , есть задание : Удалить все четные столбцы из динамической матрицы .
Вот что я сделал :
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
void Matrix()
{
    system("CLS");
 
    int string = 0;
    int column = 0;
    int i = 0, j = 0;
 
    cout << "Enter the number of lines:";
    cin >> string;
    cout << "Enter the nuber of columns:";
    cin >> column;
 
    int** matrix = new int* [string];
    for (i = 0; i < string; i++)
        for (j = 0; j < column; j++)
            matrix[i] = new int[column];
 
    cout << "Matrix view after filling:\n";
    for (i = 0; i < string; i++) 
    {
        for (j = 0; j < column; j++) 
        {
            matrix[i][j] = ((rand() % 10));
            cout << setw(2) << matrix[i][j];
        }
        cout << endl;
    }
    
    cout << "Matrix view after removing all even columns:\n";
    for (i = 0; i < string; i++) 
    {
        for (j = 0; j < column; j+2) 
        {
            matrix[i][j]=matrix[i][j+1];
        }
        column--;
    }
    
    for (i = 0; i < string; i++) 
    {
        for (j = 0; j < column; j++) 
        {
            cout << setw(2) << matrix[i][j];
        }
        cout << endl;
    }
}
Что сделал не так ?
Вот что делает программа Фото работы
Заранее спасибо .
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.01.2021, 02:26
Ответы с готовыми решениями:

Удалить четные столбцы в динамической матрице
Дана матрица целых чисел N*M. Удалить четные столбцы массива. Динамический массив использывать...

Как удалить все четные столбцы матрицы
матрица mxn надо удалить все четные столбцы... помогите..а то вообще не пойму ни как...

Дано целочисленную матрицы А размерности 3x3. Удалить все строки и столбцы матрицы, все элементы которых содержат нули
Дано целочисленную матрицы А размерности 3x3. Удалить все строки и столбцы матрицы, все элементы...

Умножить все четные столбцы матрицы А на вектор x в обратном порядке
Дан вектор x и матрица А. Умножить все четные столбцы матрицы А на вектор x в обратном порядке....

10
Вездепух
Эксперт CЭксперт С++
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,071
31.01.2021, 03:36 2
Цитата Сообщение от NOOOBCPP Посмотреть сообщение
C++
1
for (j = 0; j < column; j+2)
Что здесь делает j+2?

Но и в остальном логика программы неправильна. Какое этот цикл может иметь отношение к "удалить все четные столбцы" - не ясно.
0
32 / 27 / 5
Регистрация: 03.12.2018
Сообщений: 42
31.01.2021, 10:28  [ТС] 3

TheCalligrapher
, идет по четным столбцам , удаление происходит сдвигом в право и уменьшением количества столбцов
0
Вездепух
Эксперт CЭксперт С++
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,071
31.01.2021, 14:09 4
Еще раз, конкретный вопрос: что по вашему делает j+2 в этом цикле?
0
2834 / 2336 / 708
Регистрация: 29.06.2020
Сообщений: 8,655
31.01.2021, 15:30 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
//g++  7.4.0
 
#include <iostream>
#include <ctime>
using std::cout; using std::cin; using std::endl;
 
typedef int     melem;
typedef melem*  mrow;
typedef mrow*   matrix;
    
matrix createMatrix(int rows, int cols);
void deleteMatrix(matrix m, int rows);
void fillRandomMatrix(matrix m, int rows, int cols, int min, int max);
void printMatrix(matrix m, int rows, int cols);    
void deleteEvenColumns(matrix m, int &rows, int &cols);
 
int main()
{
    srand(time(0));
    int Rows = 5, Cols = 5; 
    const int MinR = 0, MaxR = 9; 
    matrix m;
    m = createMatrix(Rows, Cols);
    fillRandomMatrix(m, Rows, Cols, MinR, MaxR);
    
    cout<<"Matrix : "<<endl;
    printMatrix(m, Rows, Cols);
    
    cout<<endl<<"We will delete the even columns in Matrix... "<<endl;
    cout<<"Matrix after edit : "<<endl;
    
    deleteEvenColumns(m, Rows, Cols);
    printMatrix(m, Rows, Cols);
    
    deleteMatrix(m, Rows);
    
    return 0;
}
// functions 
matrix createMatrix(int rows, int cols)
{
    matrix m = new mrow[rows];
    for(int i=0; i<rows; ++i)
        m[i] = new melem[cols];
    return m;
}
void deleteMatrix(matrix m, int rows)
{
    for(int i=0; i<rows; ++i)
        delete [] m[i];
    delete [] m;
}
 
void fillRandomMatrix(matrix m, int rows, int cols, int min, int max)
{
    for(int i=0; i<rows; ++i)
        for(int j=0; j<cols; ++j)
            m[i][j] = rand()%(max-min+1) + min;
}
 
void deleteEvenColumns(matrix m, int &rows, int &cols)
{
    for(int c = 1, c_copy = 2; c<cols && c_copy<cols; ++c, c_copy+=2)
        for (int r=0; r<rows; ++r)
            m[r][c] = m[r][c_copy];
    cols = cols/2 + cols%2;
}
void printMatrix(matrix m, int rows, int cols)
{
    for(int i=0; i<rows; ++i)
    {
        for(int j=0; j<cols; ++j)
        {
            cout<<' '<<m[i][j];
        }
        cout<<endl;
    }
}
Добавлено через 2 минуты
Код
Matrix : 
 0 9 4 5 9 7
 9 5 8 7 5 2
 0 9 8 2 6 8
 3 3 9 0 8 5
 5 3 2 1 0 1

We will delete the even columns in Matrix... 
Matrix after edit : 
 0 4 9
 9 8 5
 0 8 6
 3 9 8
 5 2 0
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,644
Записей в блоге: 13
31.01.2021, 16:16 6
Мне кажется, что постановку "удалить колонки матрицы" следует понимать так: "создать новую матрицу содержащую меньшее число колонок". Но в коде SmallEvil (если я верно понял) происходит просто сдвиг данных в каждой строке. Это, по-моему, не совсем то. Вот код, который создает новую матрицу:

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
#include <iostream>
using namespace std;
 
int **makeMatr(int r, int c)
{
    int i;
    int **res=new int*[r];
    for (i=0; i<r; i++) res[i]=new int[c];
    return res;
}
 
void deleMatr(int **matr, int r)
{
    int i;
    for (i=0; i<r; i++) delete [] matr[i];
    delete [] matr;
}
 
int **delEvCols(int **matr, int n, int m, int &c)
{
    int i,j,k;
    c=m/2+m%2;
    int **r=makeMatr(n,c);
    
    for (i=0; i<n; i++)
    {   
        k=0;
        for (j=0; j<m; j+=2) r[i][k++]=matr[i][j];
    }    
        
    return r;
    
}
 
int main()
{
    int i,j,c;
    int **matr=makeMatr(5,6);
    
    for (i=0; i<5; i++)
        for (j=0; j<6; j++)
            cin >> matr[i][j];
            
    int **res=delEvCols(matr,5,6,c);
    
    for (i=0; i<5; i++)
    {
        for (j=0; j<c; j++) cout << res[i][j] << " ";
        cout << endl;
    }
    
    deleMatr(res,5);
    deleMatr(matr,5);
    
    return 0;
}
Ввод:

0 9 4 5 9 7
9 5 8 7 5 2
0 9 8 2 6 8
3 3 9 0 8 5
5 3 2 1 0 1

Вывод:

0 4 9
9 8 5
0 8 6
3 9 8
5 2 0
0
2834 / 2336 / 708
Регистрация: 29.06.2020
Сообщений: 8,655
31.01.2021, 16:19 7
Какая постановка - такое решение.
Цитата Сообщение от Catstail Посмотреть сообщение
происходит просто сдвиг данных
Да.
Новую создать еще легче.
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
31.01.2021, 16:30 8
Цитата Сообщение от Catstail Посмотреть сообщение
Мне кажется, что постановку "удалить колонки матрицы" следует понимать так: "создать новую матрицу содержащую меньшее число колонок".
нет. если стоит задача увеличить или уменьшить матрицу речь идёт о начальной матрице. новая создаётся если об этом указано в условии.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,644
Записей в блоге: 13
31.01.2021, 16:43 9
Цитата Сообщение от Yetty Посмотреть сообщение
если стоит задача увеличить или уменьшить матрицу речь идёт о начальной матрице.
- а есть способ подобным образом увеличить начальную матрицу? Ведь придется старые строки удалить и создать новые? Чем же это отличается от моего подхода? Разве что тем, что не создается копии... Уменьшить так можно, но "новая матрица" с меньшим к-вом столбцов занимает тот же объем памяти, что и исходная.

Ну и подобное "уменьшение" матрицы немного противоречит принципам функционального программирования (не менять исходные данные).
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
31.01.2021, 17:07 10
Цитата Сообщение от Catstail Посмотреть сообщение
а есть способ подобным образом увеличить начальную матрицу?
подобным конечно нет, но можно выделить новую память и переименовать
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,644
Записей в блоге: 13
31.01.2021, 17:52 11
Цитата Сообщение от Yetty Посмотреть сообщение
подобным конечно нет, но можно выделить новую память и переименовать
- о чем я и говорю.
0
31.01.2021, 17:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.01.2021, 17:52
Помогаю со студенческими работами здесь

Удалить из матрицы те столбцы, которые содержат те же самые четные элементы, что и массив B и в таком же количестве
Дана матрица А и массив B. Удалить из матрицы те столбцы, которые содержат те же самые четные...

Удалить все столбцы матрицы в которых все элементы положительные
в C# удалить все столбцы в которых все элементы положительные

Удалить все строки и столбцы матрицы, все элементы которых содержат нули
Дано целочисленную матрицы А размерности nxn. Удалить все строки и столбцы матрицы, все элементы...

Преобразовать матрицу, чтобы все четные столбцы содержали среднее арифметическое элементов матрицы
Преобразовать исходную матрицу A(MxN) так, чтобы все четные столбцы содержали среднее...

Удалить все нулевые столбцы из матрицы
Нужно в статическом двумерном массиве n*m удалить все нулевые столбцы

Удалить все строки и столбцы матрицы, содержащие единицу
Дан двумерный массив размером n*m, заполненный случайными числами из заданного пользователем...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru