0 / 0 / 0
Регистрация: 22.12.2016
Сообщений: 4
1

Двумерный массив. Удалить строки с нулевыми элементами

24.12.2016, 20:03. Показов 2354. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Нужна функция, которая удаляет строки двумерного массива, в которых содержится хотя бы один нулевой элемент.
(Знаю, что есть похожие вопросы и ответы, но нужного я не нашел, извините).
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2016, 20:03
Ответы с готовыми решениями:

Удалить из матрицы строки с нулевыми элементами выше главной диагонали
Уменьшить размер матрицы A, удалив из неё строки с нулевыми элементами выше главной диагонали. Я...

В матрице удалить строки с нулевыми элементами выше главной диагонали
Помогите разобраться: В матрице удалить строки с нулевыми элементами выше главной диагонали. Код...

Из массива удалить элементы, стоящие между первым и вторым нулевыми элементами
Из массива удалить элементы, стоящие между первым и вторым нулевыми элементами, а затем вставить...

Удалить из массива элементы, расположенные между первым и последним нулевыми элементами
Задан массив действительных чисел b1,...b30. Удалить из него элементы, расположенные между первым и...

3
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
24.12.2016, 21:17 2
мне кажется это можно сделать если использовать векторы
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
#include <vector>
#include <iostream>
 
using namespace std;
 
typedef std::vector<int> V1D;
typedef std::vector<V1D> V2D;
 
void PrintVector2D(const V2D & v)
{
    for (int i=0; i<v.size(); ++i)
    {
        for (int j=0; j<v[i].size(); ++j)
        {
            cout << v[i][j] << " ";
        }
        cout << endl;
    }
}
 
 
int main()
{
    V2D v(3,V1D(3));  // 3 x 3
    int ic = 0;
    for (int i=0; i<v.size(); ++i)
    {
        for (int j=0; j<v[i].size(); ++j)
        {
            v[i][j] = ++ic;
        }
    }
 
    cout << "\n\nThe original matrix is \n\n";
    PrintVector2D(v);
 
    v.erase(v.begin()+1); // erase 2nd row
 
    cout << "\n\nThe matrix after erasing second row is \n\n";
    PrintVector2D(v);
 
     return 0;
}
1
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
24.12.2016, 23:58 3
Лучший ответ Сообщение было отмечено K-real как решение

Решение

K-real, я удалял через сдвиг. Вот код. Может быть, это то, что вам нужно.

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
#include <iostream>
 
using namespace std;
 
int MatrixInput(int** A, int N, int M)
{
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            cin >> A[i][j];
        }
    }
}
 
void DeleteRows(int** A, int N, int M, int j)
{
    for (int i = j; i < N - 1; i++)
    {
        for (int j = 0; j < M; j++)
        {
            A[i][j] = A[i + 1][j];
        }
    }
}
 
int main()
{
    int N, M, k, num, p, t;
    cout << "Введите размерность квадратной матрицы:" << endl;
    cout << "N = ";
    cin >> N;
    cout << "M = ";
    cin >> M;
    int** A = new int*[N];
    int* B = new int[N];
    for (int i = 0; i < N; i++)
    {
        A[i] = new int[M];
    }
    cout << "Введите матрицу:" << endl;
    MatrixInput(A, N, M);
    p = 0;
    for (int i = 0; i < N; i++)
    {
        k = 0;
        for (int j = 0; j < M; j++)
        {
            if (A[i][j] == 0)
                k++;
        }
        if (k > 0)
        {
            num = i;
            B[p] = num;
            p++;
        }
    }
    t = 0;
    while (t < p)
    {
        DeleteRows(A, N, M, B[t] - t);
        t++;
    }
    cout << "Матрица после удаления:" << endl;
    for (int i = 0; i < N - t; i++)
    {
        for (int j = 0; j < M; j++)
        {
            cout << A[i][j] << " ";
        }
        cout << endl;
    }
    for (int i = 0; i < N; i++)
    {
        delete[] A[i];
    }
    delete[] B;
    system("pause");
    return 0;
}
1
0 / 0 / 0
Регистрация: 22.12.2016
Сообщений: 4
25.12.2016, 15:23  [ТС] 4
Всем спасибо!
0
25.12.2016, 15:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.12.2016, 15:23
Помогаю со студенческими работами здесь

Заполнить массив нулевыми элементами
1. заполнить массив нулевыми элементами

Двумерный массив. Удалить строки без 0 элемента
Дан массив B(n*m).Элементы массива ввести в программе.Удалить все строки, в которых нет нулевого...

Одномерный массив. Произведение значений между первым и вторым нулевыми элементами
Условие: В одномерном массиве перемножить элементы которые стоят между первым и вторым нулевыми...

Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами.
Люди добрые, кто может помощь лабу в С. Буду очень признателен и благодарен! В одномерном...


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

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

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