Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/10: Рейтинг темы: голосов - 10, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 07.11.2018
Сообщений: 89
1

Многомерные динамические массивы

31.07.2019, 20:45. Просмотров 2083. Ответов 15
Метки нет (Все метки)

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

Делаю но не могу понять как правильно можете помочь?

Вот набросок
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
#include <iostream>
#include <ctime>
using namespace std;
 
void findzero(int** ptr, const int M, const int N)
{
    for (long i = 0; i != M; i++)
    {
        for (long j = 0; j != N; j++) 
        {
            if (ptr[i][j] == 0)
            {
            
            }
            
        }
    }
}
 
int main() {
    srand(time(NULL));
 
    int** ptr = NULL;
    const int M = 10, N = 10;
    ptr = new int* [M];
    for (long i = 0; i != M; i++)
        ptr[i] = new int[N];
    for (long i = 0; i != M; i++){
        for (long j = 0; j != N; j++) {
            ptr[i][j] = rand() % 10;
            cout << ptr[i][j]<< " ";
        }
    cout << endl;}
 
    findzero(ptr, M, N);
 
    delete[] ptr;
    ptr = NULL;
 
    system("pause");
    return 0;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.07.2019, 20:45
Ответы с готовыми решениями:

Многомерные динамические массивы
Написать программу, которая дает пользователю ввести 5 фамилий студентов, а затем сортирует их по...

Помогите с задачками по Многомерные динамические массивы
Здравствуйте все. Мне на универ надо две задачки по Си вот эти 1. Написать программу, которая...

Многомерные массивы, как перебирать внутренние массивы
Здравствуйте. Такой учебный код и плохо понимаю как перебираются внутренние массивы, может кто...

Многомерные массивы
#include &lt;iostream&gt; #include &lt;random&gt; using namespace std; //тип_данных название(параметры)...

15
354 / 222 / 119
Регистрация: 25.06.2019
Сообщений: 823
31.07.2019, 20:53 2
Цитата Сообщение от Nuril Посмотреть сообщение
void findzero(int** ptr, const int M, const int N)
почему const ? придется M-- и N--
0
1542 / 889 / 414
Регистрация: 01.10.2018
Сообщений: 1,864
Записей в блоге: 2
31.07.2019, 21:24 3
Цитата Сообщение от Pvt Посмотреть сообщение
почему const ? придется M-- и N--
Потому что Nuril в findzero() хочет и искать, и удалять строки-столбцы. Что, правда, противоречит интуитивному восприятию названия функции

Nuril, я бы вам посоветовал разделить задачу на две части: (1) поиск координат нулевых элементов и (2) удаление строки и столбца по указанным координатам.

Примитивная реализация: первая функция ищет нулевой элемент и при нахождении такового вызывает вторую функцию, которая удаляет строки-столбцы, изменяя матрицу и изменяя размерность матрицы (это надо учитывать при сканировании матрицы).

Более интересная реализация: сначала найти все координаты нулевых элементов, а затем в исходной матрице удалить все найденные строки-столбцы с нулевыми элементами. Вроде поэффективней будет.

Добавлено через 2 минуты
И да, Nuril, вы неправильно удаляете двумерный массив.
И не выводите на консоль результирующую матрицу, поэтому оценить работу по прореживанию будет сложно
0
2 / 2 / 0
Регистрация: 07.11.2018
Сообщений: 89
31.07.2019, 21:31  [ТС] 4
Цитата Сообщение от L0M Посмотреть сообщение
Примитивная реализация: первая функция ищет нулевой элемент и при нахождении такового вызывает вторую функцию, которая удаляет строки-столбцы, изменяя матрицу и изменяя размерность матрицы (это надо учитывать при сканировании матрицы).
Я приблизительно так и делал но я не могу понять как при удалении не задеть другие нули в данных рядах.
Цитата Сообщение от L0M Посмотреть сообщение
И не выводите на консоль результирующую матрицу, поэтому оценить работу по прореживанию будет сложно
Это только макет
0
1542 / 889 / 414
Регистрация: 01.10.2018
Сообщений: 1,864
Записей в блоге: 2
31.07.2019, 21:50 5
Лучший ответ Сообщение было отмечено Nuril как решение

Решение

Цитата Сообщение от Nuril Посмотреть сообщение
Я приблизительно так и делал но я не могу понять как при удалении не задеть другие нули в данных рядах.
Сканируем матрицу построчно слева направо и сверху вниз (в естественном порядке индексов).
При нахождении нулевого элемента: если ниже (по столбцу) имеется другой нулевой элемент, то столбец не удалять; если правее (по строке) имеется другой нулевой элемент, то строку не удалять.
Т.е. строку удаляет самый правый нуль, а столбец - самый нижний.
Вроде так.
1
2 / 2 / 0
Регистрация: 07.11.2018
Сообщений: 89
31.07.2019, 21:54  [ТС] 6
Цитата Сообщение от L0M Посмотреть сообщение
Т.е. строку удаляет самый правый нуль, а столбец - самый нижний.
А понял спасибо.
0
1542 / 889 / 414
Регистрация: 01.10.2018
Сообщений: 1,864
Записей в блоге: 2
01.08.2019, 05:00 7
Nuril, я немножко прикинул... Получилось, что "более интересная реализация", похоже, не только эффективнее, но и явно попроще, чем "примитивная".

В "примитивной реализации" будет геморрой с циклами по матрице из-за постоянно меняющихся размеров матрицы при удалении строк или столбцов. И циклов как-то многовато получается.

А в "более интересной" в самом худшем случае всё укладывается в два двойных цикла по матрице, если координаты нулей хранить в std::set. Так что подумайте в этом направлении.
0
716 / 654 / 123
Регистрация: 10.08.2015
Сообщений: 2,849
01.08.2019, 10:01 8
удалять из статического массива - ну, такое
1
56 / 41 / 15
Регистрация: 06.03.2018
Сообщений: 181
01.08.2019, 11:59 9
Может не эффективно и не элегантно, но...
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
#include <iostream>
#include <locale>
#include <vector>
 
using namespace std;
 
void PrintArray(int ** arr, const unsigned int& n, const unsigned int& m)
{
    if (arr == NULL) return;
    for (unsigned int i = 0; i < n; ++i)
    {
        for (unsigned int j = 0; j < m; ++j)
            cout << arr[i][j] << " ";
        cout << endl;
    }
    cout << endl;
}
 
void TransformArray(int ** arr, unsigned int&n, unsigned int& m)
{
    vector<bool> x(n,true);
    vector<bool> y(m,true);
    
    unsigned int nchange = 0, mchange = 0;
    for (unsigned int i = 0; i < n; ++i)
    {
        for (unsigned int j = 0; j < m; ++j)
        {
            if (arr[i][j] == 0)
            {
                if (x[i])
                {
                    nchange++;
                    x[i] = false;
                }
                if (y[j])
                {
                    mchange++;
                    y[j] = false;
                }
            }
        }
    }
    // строим новый массив
    int** NewArray = new int*[n - nchange];
    for (unsigned int i = 0; i < n - nchange; ++i)
    {
        NewArray[i] = new int[m - mchange];
    }
    int ii = 0;
    for (unsigned int i = 0; i < n; ++i)
    {
        if (x[i])
        {
            int jj = 0;
            for (unsigned int j = 0; j < m; ++j)
            {
                if (y[j])
                {
                    NewArray[ii][jj] = arr[i][j];
                    ++jj;
                }
            }
            ++ii;
        }
    }
    n -= nchange;
    m -= mchange;
    // копируем новый массив поверх старого
    for (unsigned int i = 0; i < n; ++i)
        for (unsigned int j = 0; j < m; ++j)
            arr[i][j] = NewArray[i][j];
 
    delete[] NewArray;
}
 
int main()
{
    setlocale(LC_ALL, "ru-RU");
    srand(time(NULL));
    // Создаем и заполняем начальный массив;
    int** Array = NULL;
    unsigned int M = 0, N = 0;
    cout << "Введите размерность массива N M :";
    cin >> N >> M;
    cout << endl;
 
    Array = new int*[N];
    for (unsigned int i = 0; i < N; ++i)
        Array[i] = new int[M];
    // заполняем массив
    for (unsigned int i = 0; i < N; ++i)
        for (unsigned int j = 0; j < M; ++j)
        {
            Array[i][j] = rand() % 10;
        }
    PrintArray(Array, N, M);
    TransformArray(Array, N, M);
    PrintArray(Array, N, M);
    delete[] Array;
    system("Pause");
    return 0;
}
0
1542 / 889 / 414
Регистрация: 01.10.2018
Сообщений: 1,864
Записей в блоге: 2
01.08.2019, 12:52 10
galeks1, у вас как раз вариация на тему "найти всё и убрать сразу". Только NewArray здесь лишний. Всё можно сделать на одном массиве.

Кстати, вы тоже удаляете двухмерные динамические массивы неправильно (и Array, и NewArray). Посмотрите как вы их создаёте.
0
56 / 41 / 15
Регистрация: 06.03.2018
Сообщений: 181
01.08.2019, 15:13 11
Цитата Сообщение от L0M Посмотреть сообщение
Кстати, вы тоже удаляете двухмерные динамические массивы неправильно (и Array, и NewArray). Посмотрите как вы их создаёте.
на счет удаления таким способом черт попутал.
Обычно удаляю тоже в цикле.

Добавлено через 1 минуту
отладчик не ругался на утечки и подумал может компилятор сам определил что нужно удалить все N массивов

Добавлено через 1 час 25 минут
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
#include <iostream>
#include <locale>
#include <vector>
 
using namespace std;
 
void PrintArray(int ** arr, const unsigned int& n, const unsigned int& m)
{
    if (arr == NULL) return;
    for (unsigned int i = 0; i < n; ++i)
    {
        for (unsigned int j = 0; j < m; ++j)
            cout << arr[i][j] << " ";
        cout << endl;
    }
    cout << endl;
}
 
void TransformArray(int ** arr, unsigned int&n, unsigned int& m)
{
    vector<bool> x(n,true);
    vector<bool> y(m,true);
    
    unsigned int nchange = 0, mchange = 0;
    for (unsigned int i = 0; i < n; ++i)
    {
        for (unsigned int j = 0; j < m; ++j)
        {
            if (arr[i][j] == 0)
            {
                if (x[i])
                {
                    nchange++;
                    x[i] = false;
                }
                if (y[j])
                {
                    mchange++;
                    y[j] = false;
                }
            }
        }
    }
    // строим новый массив
    int** NewArray = new int*[n - nchange];
    for (unsigned int i = 0; i < n - nchange; ++i)
    {
        NewArray[i] = new int[m - mchange];
    }
    int ii = 0;
    for (unsigned int i = 0; i < n; ++i)
    {
        if (x[i])
        {
            int jj = 0;
            for (unsigned int j = 0; j < m; ++j)
            {
                if (y[j])
                {
                    NewArray[ii][jj] = arr[i][j];
                    ++jj;
                }
            }
            ++ii;
        }
    }
    n -= nchange;
    m -= mchange;
    // копируем новый массив поверх старого
    for (unsigned int i = 0; i < n; ++i)
        for (unsigned int j = 0; j < m; ++j)
            arr[i][j] = NewArray[i][j];
 
    for (unsigned int i = 0; i < n; ++i)
    {
        delete[] NewArray[i];
    }
    delete[] NewArray;
}
 
int main()
{
    setlocale(LC_ALL, "ru-RU");
    srand(time(NULL));
    // Создаем и заполняем начальный массив;
    int** Array = NULL;
    unsigned int M = 0, N = 0;
    cout << "Введите размерность массива N M :";
    cin >> N >> M;
    cout << endl;
 
    Array = new int*[N];
    for (unsigned int i = 0; i < N; ++i)
        Array[i] = new int[M];
    // заполняем массив
    for (unsigned int i = 0; i < N; ++i)
        for (unsigned int j = 0; j < M; ++j)
        {
            Array[i][j] = rand() % 10;
        }
    PrintArray(Array, N, M);
    TransformArray(Array, N, M);
    PrintArray(Array, N, M);
    for (unsigned int i = 0; i < N; ++i)
    {
        delete[] Array[i];
    }
    delete[] Array;
    system("Pause");
    return 0;
}
0
499 / 340 / 129
Регистрация: 22.11.2017
Сообщений: 983
01.08.2019, 15:28 12
Nuril, привет!
Реализация кода на идею L0M. Ты это имел в виду?

Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <string>
#include <windows.h>
#include <random>
#include <set>
#include <algorithm>
#include <iomanip>
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    std::random_device rd;
    std::mt19937 g{ rd() };
    std::uniform_int_distribution<> dist(0, 10);
    auto gen = [&g, &dist]() { return dist(g); };
    
    std::cout << "Введите размеры массива ";
    size_t n, m;
    std::cin >> n >> m;
 
    std::set<size_t> del_columns;
    std::set<size_t> del_rows;
 
    int** arr = new int*[n];
    std::cout << "Исходное содержание массива\n";
    for (size_t row = 0u; row < n; ++row)
    {
        int* line = new int[m];
        arr[row] = line;
        for (size_t column = 0u; column < m; ++column)
        {
            std::cout << std::setw(3u) << (arr[row][column] = gen()) << " ";
            if (!arr[row][column])
            {
                del_columns.insert(column);
                del_rows.insert(row);
            }
        }
        std::cout << "\n";
    }
    std::cout << "\n";
 
    int** arr2 = new int* [n - del_rows.size()];
    std::cout << "Содержание обработанного массива\n";
    size_t row_arr2 = 0u;
    for (size_t row_arr = 0u; row_arr < n; ++row_arr)
    {
        if (!del_rows.count(row_arr))
        {
            int* line = new int[m - del_columns.size()];
            arr2[row_arr2] = line;
            size_t column_arr2 = 0u;
            for (size_t column_arr = 0u; column_arr < m; ++column_arr)
            {
                if (!del_columns.count(column_arr))
                {
                    std::cout << std::setw(3u) << (arr2[row_arr2][column_arr2] = arr[row_arr][column_arr]) << " ";
                    ++column_arr2;
                }
            }
            std::cout << "\n";
            ++row_arr2;
        }
    }
 
    for (size_t row = 0u; row < n; ++row)
    {
        delete[] arr[row];
    }
    delete[] arr;
    for (size_t row = 0u; row < n - del_rows.size(); ++row)
    {
        delete[] arr2[row];
    }
    delete[] arr2;
 
    return 0;
}
0
Миниатюры
Многомерные динамические массивы  
56 / 41 / 15
Регистрация: 06.03.2018
Сообщений: 181
01.08.2019, 15:47 13
Цитата Сообщение от L0M Посмотреть сообщение
Только NewArray здесь лишний. Всё можно сделать на одном массиве.
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
#include <iostream>
#include <locale>
#include <vector>
 
using namespace std;
 
void PrintArray(int ** arr, const unsigned int& n, const unsigned int& m)
{
    if (arr == NULL) return;
    for (unsigned int i = 0; i < n; ++i)
    {
        for (unsigned int j = 0; j < m; ++j)
            cout << arr[i][j] << " ";
        cout << endl;
    }
    cout << endl;
}
 
void TransformArray(int ** arr, unsigned int&n, unsigned int& m)
{
    vector<bool> x(n,true);
    vector<bool> y(m,true);
    
    unsigned int nchange = 0, mchange = 0;
    for (unsigned int i = 0; i < n; ++i)
    {
        for (unsigned int j = 0; j < m; ++j)
        {
            if (arr[i][j] == 0)
            {
                if (x[i])
                {
                    nchange++;
                    x[i] = false;
                }
                if (y[j])
                {
                    mchange++;
                    y[j] = false;
                }
            }
        }
    }
    int ii = 0;
    for (unsigned int i = 0; i < n; ++i)
    {
        if (x[i])
        {
            int jj = 0;
            for (unsigned int j = 0; j < m; ++j)
            {
                if (y[j])
                {
                    arr[ii][jj] = arr[i][j];
                    ++jj;
                }
            }
            ++ii;
        }
    }
    n -= nchange;
    m -= mchange;
}
 
int main()
{
    setlocale(LC_ALL, "ru-RU");
    srand(time(NULL));
    // Создаем и заполняем начальный массив;
    int** Array = NULL;
    unsigned int M = 0, N = 0;
    cout << "Введите размерность массива N M :";
    cin >> N >> M;
    cout << endl;
 
    Array = new int*[N];
    for (unsigned int i = 0; i < N; ++i)
        Array[i] = new int[M];
    // заполняем массив
    for (unsigned int i = 0; i < N; ++i)
        for (unsigned int j = 0; j < M; ++j)
        {
            Array[i][j] = rand() % 10;
        }
    PrintArray(Array, N, M);
    TransformArray(Array, N, M);
    PrintArray(Array, N, M);
    for (unsigned int i = 0; i < N; ++i)
    {
        delete[] Array[i];
    }
    delete[] Array;
    system("Pause");
    return 0;
}
0
499 / 340 / 129
Регистрация: 22.11.2017
Сообщений: 983
01.08.2019, 15:48 14
Подредактировал код.

Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <random>
#include <set>
#include <iomanip>
 
int main()
{
    setlocale(LC_ALL, "Rus");
    std::random_device rd;
    std::mt19937 g{ rd() };
    std::uniform_int_distribution<> dist(0, 10);
    auto gen = [&g, &dist]() { return dist(g); };
    std::set<size_t> del_columns, del_rows;
    
    std::cout << "Введите размеры массива ";
    size_t n, m;
    std::cin >> n >> m;
 
    std::cout << "Исходное содержание массива\n";
    int** arr = new int*[n];
    for (size_t row = 0u; row < n; ++row)
    {
        arr[row] = new int[m];
        for (size_t column = 0u; column < m; ++column)
        {
            std::cout << std::setw(3u) << (arr[row][column] = gen()) << " ";
            if (!arr[row][column])
            {
                del_columns.insert(column);
                del_rows.insert(row);
            }
        }
        std::cout << "\n";
    }
    std::cout << "\n";
 
    std::cout << "Содержание обработанного массива\n";
    int** arr2 = new int* [n - del_rows.size()];
    size_t row_arr2 = 0u;
    for (size_t row_arr = 0u; row_arr < n; ++row_arr)
        if (!del_rows.count(row_arr))
        {
            arr2[row_arr2] = new int[m - del_columns.size()];
            size_t column_arr2 = 0u;
            for (size_t column_arr = 0u; column_arr < m; ++column_arr)
                if (!del_columns.count(column_arr))
                    std::cout << std::setw(3u) << (arr2[row_arr2][column_arr2++] = arr[row_arr][column_arr]) << " ";
            std::cout << "\n";
            ++row_arr2;
        }
 
    for (size_t row = 0u; row < n; ++row)
        delete[] arr[row];
    delete[] arr;
    for (size_t row = 0u; row < n - del_rows.size(); ++row)
        delete[] arr2[row];
    delete[] arr2;
 
    return 0;
}
0
1542 / 889 / 414
Регистрация: 01.10.2018
Сообщений: 1,864
Записей в блоге: 2
02.08.2019, 03:00 15
SomniPhobia, да, что-то типа такого, но на одном массиве. Посмотрите чуть выше у galeks1 сделано на одном.

Вообще данная задача, если её делать с двумя массивами - тривиальна. С одним массивом - уже надо шевелить мозгами. А если строго без дополнительных затрат памяти, то надо сильно потрахаться. Вот кстати это в этом комменте - как раз без дополнительной памяти: только стековые переменные.
0
2 / 2 / 0
Регистрация: 07.11.2018
Сообщений: 89
08.08.2019, 08:08  [ТС] 16
Я делал задание без векторов и получилось достаточно много ошибок можете подсказать как их исправить?

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
138
139
140
141
142
143
144
145
146
#include <iostream>
#include <ctime>
using namespace std;
 
int dellzeroline(int** ptr, int* M, int* N, int x, int y)
{
    bool z = false;
    int** matrix;
    for (long j = y + 1; j < *N; j++)
    {
        if (ptr[x][j] == 0)
        {
            z = true;
        }
    }
    if (z == false)
    {
        *M -= 1;
        matrix = new int* [*M];
        for (long i = 0; i != *M; i++) {
            matrix[i] = new int[*N];
        }
        cout << endl;
        for (long i = 0; i < x; i++) {
            for (long j = 0; j < *N; j++) {
                matrix[i][j] = ptr[i][j];
                cout << matrix[i][j] << " ";
            }
            cout << endl;
        }
 
        for (long i = x + 1; i < *M + 1; i++) {
            for (long j = 0; j < *N; j++) {
                matrix[i - 1][j] = ptr[i][j];
                cout << matrix[i-1][j] << " ";
            }
                cout << endl;
        }
        for (unsigned int i = 0; i < *M; ++i)
            for (unsigned int j = 0; j < *N; ++j)
                ptr[i][j] = matrix[i][j];
        delete[] matrix;
    }
    return z;
}
 
int dellzerorow(int** ptr, int* M, int* N, int x, int y)
{
    bool z = false;
    int** matrix;
    for (long j = x+1; j < *M; j++)
    {
        if (ptr[j][y] == 0)
        {
            z = true;
        }
    }
    if (z == false)
    {
        *N -= 1;
        matrix = new int* [*M];
        for (long i = 0; i != *M; i++) {
            matrix[i] = new int[*N];
        }
        cout << endl;
 
        for (long i = 0; i < y; i++) {
            for (long j = 0; j < *M; j++) {
                matrix[j][i] = ptr[j][i];
                cout << matrix[j][i] << " ";
            }
            cout << endl;
        }
 
        for (long i = y + 1; i < *N+1; i++) {
            for (long j = 0; j < *M; j++) {
                matrix[j][i-1] = ptr[j][i];
                cout << matrix[j][i-1] << " ";
            }
            cout << endl;
        }
        for (unsigned int i = 0; i < *M; ++i)
            for (unsigned int j = 0; j < *N; ++j)
                ptr[i][j] = matrix[i][j];
        delete[] matrix;
    }
    return z;
}
 
void findzero(int** ptr, int* M, int* N)
{
    for (long i = 0; i < *M; i++)
    {
        for (long j = 0; j < *N; j++)
        {
            if (ptr[i][j] == 0)
            {
                if (!dellzeroline(ptr, M, N, i, j)&& i != 0||j == *N-1)
                {
                    --i;
                }
                if (!dellzerorow(ptr, M, N, i, j) && i != 0)
                {
                    --j;
                }
            }
 
        }
    }
}
 
int main() {
    srand(time(NULL));
    srand(24);
 
    int** ptr = NULL;
    int m = 5, n = 5;
    int *M = &m;
    int *N=&n;
    ptr = new int* [*M];
    for (long i = 0; i != *M; i++)
        ptr[i] = new int[*N];
    for (long i = 0; i != *M; i++) {
        for (long j = 0; j != *N; j++) {
            ptr[i][j] = rand() % 5;
            cout << ptr[i][j] << " ";
        }
        cout << endl;
    }
    findzero(ptr, M, N);
    cout << endl;
    for (long i = 0; i < *M; i++) {
        for (long j = 0; j < *N; j++) {
            cout << ptr[i][j] << " ";
        }
        cout << endl;
    }
    delete[] ptr;
    ptr = NULL;
 
 
 
 
    system("pause");
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.08.2019, 08:08

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Многомерные массивы
Здравствуйте, уважаемые форумчане! Давненько я не задавал здесь своих глупых вопросов по плюсам....

Многомерные массивы (матрицы)
Не могу понять как написать код. Если не сложно напишите подробнее цикл. Вот начало. ...

Многомерные массивы. Матрица.
Всем привет. Прошу помочь с заданием по программированию, не до конца понимаю кое-что… Задание:...

Задача на Многомерные Массивы
Фирма имеет 5 магазинов. Информация о доходе каждого магазина за каждый месяц хранится в двухмерном...


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

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

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