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

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

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

Определить, в какой из половин матрицы (верхней или нижней) больше нулевых элементов - C++

06.07.2015, 17:54. Просмотров 270. Ответов 7
Метки нет (Все метки)

Для матрицы А(n строк, m столбцов, n-четное) определить, в какой из ее половин (верхней или нижней) больше нулевых элементов. Для подсчета количества нулевых элементов в заданной части матрицы использовать подпрограмму.

Помогите пожалуйста! Неправильно считает нулевые элементы в нижней части.

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
#include <iostream>
 
using namespace std;
 
int f(int *Matr, int P, int str, int stlb)
{
    int NylElem = stlb*P;
    for (int i = NylElem; i < str*stlb; ++i)
        {
            if( Matr[i] == 0 )
            {
                ++NylElem;
            }
        }
    return NylElem;
 
}
 
int main()
{
    int n(100), m(100), NylElemV=0, NylElemN=0;
    cout << "Vvedite chislo strok matrici A: ";
    cin >> n;
    if (n&1)
    {
        cout << "Chislo strok nechetnoe. Vvedite chetnoe.";
        return -1;
    }
 
    cout << "Vvedite chislo stolbcov matrici A: ";
    cin >> m;
 
    int Matr[n*m];
 
    cout << "Vvedite matricy A. ";
    for (int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
        {
            cout << "A [" << i + 1 << ", " << j + 1 << "] = ";
            cin >> Matr[i*m+j];
        }
 
    NylElemV = f(Matr, 0, n/2, m);
    NylElemN = f(Matr, n/2, n, m);
 
    cout << "\nKolichestvo nylevix elementov v verxnei chasti matrici: " << NylElemV << endl;
    cout << "\nKolichestvo nylevix elementov v nignei chasti matrici: " << NylElemN << endl;
 
    if(NylElemV > NylElemN)
    {
        cout << "\nBolshe v verhnei.\n\n";
    }
    if(NylElemV < NylElemN)
    {
        cout << "\nBolshe v nignei.\n\n";
    }
    if (NylElemV == NylElemN)
    {
        cout << "\nOdinakovo.\n\n";
    }
 
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2015, 17:54     Определить, в какой из половин матрицы (верхней или нижней) больше нулевых элементов
Посмотрите здесь:

C++ Определить количество нулевых элементов на главной диагонали матрицы
Поменять местами элементы матрицы, расположенные в верхней и нижней четвертях C++
C++ Определить, есть ли в данном массиве строка (столбец), состоящая только из положительных или нулевых элементов
Поменять местами наибольшие элементы в верхней и нижней половинах матрицы C++
C++ Поменять местами наибольшие элементы в верхней и нижней половинах матрицы (подпрограммы)
C++ Проверить сумма какой из половин числа ЛЮБОЙ разрядности больше
C++ Циклы: проверить сумма какой из половин числа (любой разрядности) больше
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Krasiosoft
51 / 51 / 15
Регистрация: 01.06.2015
Сообщений: 189
06.07.2015, 21:58     Определить, в какой из половин матрицы (верхней или нижней) больше нулевых элементов #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
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
#include <iostream>
#include <iomanip>
 
using namespace std;
 
int topZeroCount(int *Matr, int n, int m){
    int count = 0;
    for (int i = 0; i < n*m/2; i++){
        if(!Matr[i]) count++;
    }
    return count;
}
 
int bottomZeroCount(int *Matr, int n, int m){
    int count = 0;
    for (int i = n*m/2; i < n*m; i++){
        if(!Matr[i]) count++;
    }
    return count;
}
 
int main()
{
    int n, m;
    do{
        cout << "Vvedite chislo strok matrici A: ";
        cin >> n;
    }while(n&1);
 
    cout << "Vvedite chislo stolbcov matrici A: ";
    cin >> m;
 
    int* Matr = new int[n*m];  //  но это не матрица, а массив, который мы представляем как матрицу
 
    cout << "Vvedite matricy A[" << n << "]["<< m << "]:" << endl;
 
    for (int i = 0; i < n*m; i++){
        cout << "A [" << i/m+1 << ", " << i%m+1 << "] = ";
        cin >> Matr[i];
    }
    //  вывод матрицы
    cout << "A[" << n << "]["<< m << "]:";
    for (int i = 0; i < n*m; i++){
        if(i%m==0) cout << endl;
        cout << setw(7) << Matr[i];
    }
    cout << endl;
 
    int NylElemV = topZeroCount(Matr, n, m);
    int NylElemN = bottomZeroCount(Matr, n, m);
 
    cout << "V verhnei: " << NylElemV << endl;
    cout << "V nignei: " << NylElemN << endl;
 
    if(NylElemV > NylElemN)
    {
        cout << "Bolshe v verhnei.";
    }
    if(NylElemV < NylElemN)
    {
        cout << "Bolshe v nignei.";
    }
    if (NylElemV == NylElemN)
    {
        cout << "\nOdinakovo.";
    }
 
    delete[]Matr;
 
    return 0;
}
Алинк
0 / 0 / 0
Регистрация: 16.04.2015
Сообщений: 33
06.07.2015, 22:45  [ТС]     Определить, в какой из половин матрицы (верхней или нижней) больше нулевых элементов #3
Да, правильно! Но нахождение нулевого элемента должно быть в одной только функции. А у Вас в двух..
Lovc
25 / 25 / 1
Регистрация: 19.06.2015
Сообщений: 46
06.07.2015, 23:02     Определить, в какой из половин матрицы (верхней или нижней) больше нулевых элементов #4
Алинк,
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
#include <iostream>
#define SIZE 100
 
using namespace std;
int elem0(int na, int ma, int matrix[][SIZE]);
 
int main()
{
    int n, m, num;
    int matrix[SIZE][SIZE];
    setlocale(LC_ALL, "Russian");
    do{
    cout << "Сколько строк должно быть в матрице?(Введите четное число)\n";
    cin >> n;
    cout << "Сколько столбцов должно быть в матрице?\n";
    cin >> m;
    }while((n <= 0) || (m <= 0) || (n % 2 != 0));
    cout << "Введите матрицу:\n";
    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
            cin >> matrix[i][j];
    num = elem0(n, m, matrix);
    if(num == 1)
        cout << "В верхней половине больше";
    if(num == 2)
        cout << "В нижней половине больше";
    if(num == 3)
        cout << "Их количество равно";
    return 0;
}
 
int elem0(int n, int m, int matrix[][SIZE])
{
    int counterTop = -1;
    int counterBottom = -1;
    int detector, i, j;
    for(i = 0; i < n/2; i++)
        for(j = 0; j < m; j++)
            if(matrix[i][j] == 0)
                counterTop++;
    for(; i < n; i++)
        for(j = 0; j < m; j++)
            if(matrix[i][j] == 0)
                counterBottom++;
    if(counterTop > counterBottom)
        return 1;
    if(counterTop < counterBottom)
        return 2;
    if(counterTop == counterBottom)
        return 3;
    return 0;
}
Добавлено через 9 минут
Ах, да, тестил, забыл лишнюю переменную неиспользуемую убрать: detector
Krasiosoft
51 / 51 / 15
Регистрация: 01.06.2015
Сообщений: 189
06.07.2015, 23:46     Определить, в какой из половин матрицы (верхней или нижней) больше нулевых элементов #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
#include <iostream>
#include <iomanip>
 
using namespace std;
 
 
int ZeroCount(int *Matr, int n, int m, bool top){
    int i, to, count = 0;
    if(top){
        i = 0;
        to = n*m/2;
    }else{
        i = n*m/2;
        to = n*m;
    }
    for (; i < to; i++){
        if(!Matr[i]) count++;
    }
    return count;
}
 
int main()
{
    int n, m;
    do{
        cout << "Vvedite chislo strok matrici A: ";
        cin >> n;
    }while(n&1);
 
    cout << "Vvedite chislo stolbcov matrici A: ";
    cin >> m;
 
    int* Matr = new int[n*m];  //  но это не матрица, а массив, который мы представляем как матрицу
 
    cout << "Vvedite matricy A[" << n << "]["<< m << "]:" << endl;
 
    for (int i = 0; i < n*m; i++){
        cout << "A [" << i/m+1 << ", " << i%m+1 << "] = ";
        cin >> Matr[i];
    }
    //  вывод матрицы
    cout << "A[" << n << "]["<< m << "]:";
    for (int i = 0; i < n*m; i++){
        if(i%m==0) cout << endl;
        cout << setw(7) << Matr[i];
    }
    cout << endl;
 
    int NylElemV = ZeroCount(Matr, n, m, true);  //  true  -  top
    int NylElemN = ZeroCount(Matr, n, m, false);  //  false  -  bottom
 
    cout << "V verhnei: " << NylElemV << endl;
    cout << "V nignei: " << NylElemN << endl;
 
    if(NylElemV > NylElemN)
    {
        cout << "Bolshe v verhnei.";
    }
    if(NylElemV < NylElemN)
    {
        cout << "Bolshe v nignei.";
    }
    if (NylElemV == NylElemN)
    {
        cout << "\nOdinakovo.";
    }
 
    delete[]Matr;
 
    return 0;
}
Алинк
0 / 0 / 0
Регистрация: 16.04.2015
Сообщений: 33
07.07.2015, 09:59  [ТС]     Определить, в какой из половин матрицы (верхней или нижней) больше нулевых элементов #6
Цитата Сообщение от Krasiosoft Посмотреть сообщение
for (; i < to; i++){
А почему в этой строке необходима ; ?

Добавлено через 22 минуты
Цитата Сообщение от Krasiosoft Посмотреть сообщение
if(!Matr[i]) count++;
А еще, зачем нужен "!" перед матрицей?
Krasiosoft
51 / 51 / 15
Регистрация: 01.06.2015
Сообщений: 189
07.07.2015, 15:18     Определить, в какой из половин матрицы (верхней или нижней) больше нулевых элементов #7
Цитата Сообщение от Алинк Посмотреть сообщение
А почему в этой строке необходима ; ?
Так построен цикл for:
C++
1
2
3
4
for (/*1*/; /*2*/; /*3*/ )
{
// ...
}
1) Объявление и/или инициализация, ранее объявленной переменной.
2) Условие продолжения цикла.
3) Изменение переменных.

Я просто пропустил 1 пункт.
Цитата Сообщение от Алинк Посмотреть сообщение
А еще, зачем нужен "!" перед матрицей?
"!" - логическая операция "НЕ"
Это то же самое, что if(Matr[i]==false) или if(Matr[i]==0)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2015, 15:42     Определить, в какой из половин матрицы (верхней или нижней) больше нулевых элементов
Еще ссылки по теме:

C++ менять местами символы в массиве в нижней и верхней четверти
C++ Проверить сумма какой из половин числа и какая из двух частей числа разрядности больше
C++ Проверить сумма какой из половин числа разрядности больше
Используя цикл for, проверить, сумма какой из половин числа любой разрядности больше C++
C++ Определить количество нулевых элементов в тех строках матрицы, которые не содержат положительных элементов

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

Или воспользуйтесь поиском по форуму:
Алинк
0 / 0 / 0
Регистрация: 16.04.2015
Сообщений: 33
07.07.2015, 15:42  [ТС]     Определить, в какой из половин матрицы (верхней или нижней) больше нулевых элементов #8
Krasiosoft, благодарю!
Yandex
Объявления
07.07.2015, 15:42     Определить, в какой из половин матрицы (верхней или нижней) больше нулевых элементов
Ответ Создать тему
Опции темы

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