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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Iryna_Light
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 41
#1

Определить количество строк матрицы, которые не содержат ни одного нулевого элемента - C++

02.02.2014, 22:46. Просмотров 1905. Ответов 33
Метки нет (Все метки)

Пожалуйста помогите!
Данная прямоугольная целочисленная матрица. определить:
количество строк, которые не содержат ни одного нулевого элемента;
максимальное из чисел, встречающихся в заданной матрице более одного раза.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2014, 22:46     Определить количество строк матрицы, которые не содержат ни одного нулевого элемента
Посмотрите здесь:

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

Определить количество строк матрицы, не содержащих ни одного нулевого элемента - C++
Ввести с клавиатуры вещественную матрицу размерностью 5х5. Определить количество строк, не содержащих ни одного нулевого элемента. ...

Определить количество строк матрицы не содержащих ни одного нулевого элемента - C++
Дана целочисленная прямоугольная матрица. Определить: количество строк, не содержащих ни одного нулевого элемента;

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

Определить количество строк матрицы, не содержащих ни одного нулевого элемента - C++
Дана целочисленная квадратная матрица. Определить: • количество строк, не содержащих ни одного нулевого элемента; • максимальное из...

Определить количество строк матрицы, не содержащих ни одного нулевого элемента - C++
Дана целочисленная прямоугольная матрица.Определить: 1)Количество строк ,не содержащих ни одного нулевого элемента. 2)...

Определить количество строк матрицы, в которых нет ни одного нулевого элемента - C++
Помагите если не сложно. Дана матрица размером МxN. Определить количество строк, в которых нет ни одного нулевого элемента.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Iryna_Light
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 41
05.02.2014, 22:56  [ТС]     Определить количество строк матрицы, которые не содержат ни одного нулевого элемента #16
GuGo1991,
а если в строке будет два нулевых элементы, то что будет тогда считаться две строки вместо одной?
и что-то не понимаю отыскания макс. элем.
причем например min_counter
любой элемент может быть больше за мин.элем.
и при выполнении вывело НЕ макс. а мин. элемент.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
05.02.2014, 23:33     Определить количество строк матрицы, которые не содержат ни одного нулевого элемента #17
Цитата Сообщение от Iryna_Light Посмотреть сообщение
а если в строке будет два нулевых элементы, то что будет тогда считаться две строки вместо одной?
Нет, одна.
Цитата Сообщение от Iryna_Light Посмотреть сообщение
и что-то не понимаю отыскания макс. элем.
Строки 62 - 79. Берём первый элемент матрицы (с индексами [0][0]). Проходим по всей матрице и проверяем
имеется ли такой же элемент. Один раз он точно будет, столкнется сам с собой, поэтому проверяем
значение counter больше 1 и сравниваем значение result с этим элементом (result всегда будет меньше или равно
потому что мы ему присвоили значение min до начала цикла, это необходимо чтобы не потерять повторяющиеся отрицательные элементы,
если нет положительных).
Цитата Сообщение от Iryna_Light Посмотреть сообщение
причем например min_counter
min_counter проверяет сколько минимальных элементов имеется. В случае если нет повторяющихся
максимальных элементов (положительных и отрицательных) и минимальный элемент один, тогда повторяющихся
элементов нет. А если минимальных элементов больше одного, программа выведет его.
Грубо говоря, это страховка.
Цитата Сообщение от Iryna_Light Посмотреть сообщение
и при выполнении вывело НЕ макс. а мин. элемент.
Скопируйте вывод программы, сомневаюсь в ошибке
Iryna_Light
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 41
09.02.2014, 20:27  [ТС]     Определить количество строк матрицы, которые не содержат ни одного нулевого элемента #18
GuGo1991, Максимальное из чисел, встречающихся в заданной матрице более одного раза, неправильно определено. Правильный ответ должен быть 100
Миниатюры
Определить количество строк матрицы, которые не содержат ни одного нулевого элемента  
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
09.02.2014, 21:35     Определить количество строк матрицы, которые не содержат ни одного нулевого элемента #19
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <ctime>
#include <iomanip>
using namespace std;
 
int main()
{
    srand(time(0)); 
    int H, W, counter = 0, max, min, 
        min_counter = 0, result, row = 0;
    cout << "Matrix[H][W]\n";
    cout << "Enter H: "; cin >> H;
    cout << "Enter W: "; cin >> W;
    cout << "\n\n";
    int** M = new int*[H];
    for(int i = 0; i < H; i++)
        M[i] = new int[W];
    
    //Находим строки с нулевыми элементами
    for(int i = 0; i < H; i++)
    {
        for(int j = 0; j < W; j++)
        {
            M[i][j] = 100 - rand() % 200;
            cout << setw(4) << M[i][j];
            if(M[i][j] == 0)
                counter++;
        }
        cout << "\n\n";
        if(counter > 0)
            row++;
        counter = 0;
    }
    
    min = M[0][0];
    
    //Находим минимальный элемент
    for(int i = 0; i < H; i++)
    {
        for(int j = 0; j < W; j++)
        {
            if(M[i][j] < min)
            {
                min = M[i][j];
            }
        }
    }
    
    //min_counter понадобится в дальнейшем
    for(int i = 0; i < H; i++)
    {
        for(int j = 0; j < W; j++)
        {
            if(min == M[i][j])
                min_counter++;
        }
    }
    
    result = min;
    
    //Находим максимальный повторяющийся элемент
    for(int i = 0; i < H; i++)
    {
        for(int j = 0; j < W; j++)
        {
            max = M[i][j];
            for(int i = 0; i < H; i++)
            {
                for(int j = 0; j < W; j++)
                {
                    if(max == M[i][j])
                        counter++;
                }
            }
            if(counter > 1 && result < max)
                result = max;
            counter = 0;
        }
    }
    
    cout << "\nRows: " << H - row;
    cout << "\nMax element: ";
    
    //Если значение result не изменилось и min_counter равен 1,
    //то есть значение min не повторяется, значит максимального
    //повторяющегося элемента нет. Иначе выводим result.
    (result == min && min_counter == 1)? cout << "No such element!\n"
                                       : cout << result << endl;
     
    for(int i = 0; i < H; i++)
    {
        delete [] M[i];
    }      
    
    delete [] M;
    
    system("pause");
    return 0;
}


Iryna_Light, точно этот код компилируете? У меня работает корректно, не знаю чем помочь...
Iryna_Light
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 41
09.02.2014, 22:39  [ТС]     Определить количество строк матрицы, которые не содержат ни одного нулевого элемента #20
GuGo1991, так же он
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
09.02.2014, 23:32     Определить количество строк матрицы, которые не содержат ни одного нулевого элемента #21
Цитата Сообщение от GuGo1991 Посмотреть сообщение
У меня работает корректно, не знаю чем помочь...
Алгоритм можно упростить:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int repeat  = 0;
int maxElem = M[0][0];
for(int i = 0; i < H; ++i)
{
    for(int j = 0; j < W; ++j)
    {
        if(M[i][j] > maxElem)
        {
            maxElem = M[i][j];
            repeat = 1;
        }
        else if(M[i][j] == maxElem)
        {
            ++repeat;
        }
    }
}
При условии, что H и W больше 0.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
10.02.2014, 02:34     Определить количество строк матрицы, которые не содержат ни одного нулевого элемента #22
DrOffset, а вдруг не выполнится второе условие:
C++
1
2
3
4
else if(M[i][j] == maxElem)
{
    ++repeat;
}
Тогда у нас останется максимальный неповторяющийся элемент

Добавлено через 10 минут
Iryna_Light, у вас всё время неправильный ответ выдаёт или иногда?
Просто у меня всё работает... Напишите в личку мыло, пришлю свой откомпилированный .ехе
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
10.02.2014, 03:03     Определить количество строк матрицы, которые не содержат ни одного нулевого элемента #23
Цитата Сообщение от GuGo1991 Посмотреть сообщение
Тогда у нас останется максимальный неповторяющийся элемент
Ну и пусть остается. В задаче сказано, что надо вывести максимальный повторяющийся элемент.
C++
1
2
3
4
if(repeat > 1)
{
    // выводим
}
Добавлено через 10 минут
Хотя да. Невнимательно прочитал. Нужно вывести число максимальное из повторяющихся, а не максимальное и повторяющееся. Ночь.
Но ошибка в вашем алгоритме все равно есть. У меня воспроизводится так же, как и у ТС.

Добавлено через 5 минут
Вообще, с сортировкой эту задачу решить проще всего. Все попытки решить ее без сортировки будут в совокупности сложнее, чем реализация простейшей пузырковой сортировки (на данном этапе большее и не нужно).
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
10.02.2014, 03:16     Определить количество строк матрицы, которые не содержат ни одного нулевого элемента #24
DrOffset, была у меня с сортировкой, пришлось убрать по просьбе ТС.
Цитата Сообщение от DrOffset Посмотреть сообщение
У меня воспроизводится так же, как и у ТС.
Вот этого я никак не пойму... Почему у меня всё правильно?!
У вас иногда выбивает неверно или при каждом запуске?
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
10.02.2014, 10:27     Определить количество строк матрицы, которые не содержат ни одного нулевого элемента #25
Цитата Сообщение от GuGo1991 Посмотреть сообщение
У вас иногда выбивает неверно или при каждом запуске?

Не по теме:

Иногда, где-то 1 из 4х. Хотел поисследовать сам, но уже поздно было.

Iryna_Light
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 41
10.02.2014, 11:07  [ТС]     Определить количество строк матрицы, которые не содержат ни одного нулевого элемента #26
я ничего не имела против сортировки, просто были вопросы по программе, чтобы лучше понять
И первый вариант проще, чем последний. Тем более в последнем выбивает ошибки. Лучше остановиться на первом (с сортировкой).
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
10.02.2014, 14:29     Определить количество строк матрицы, которые не содержат ни одного нулевого элемента #27
Цитата Сообщение от DrOffset Посмотреть сообщение
Иногда, где-то 1 из 4х. Хотел поисследовать сам, но уже поздно было.
Хоть раз у меня неправильно выбило бы, я с удовольствием поисследовал ))

Iryna_Light, для наглядности добавил вывод отсортированного массива (добавил комментарии).
Минус данного варианта, не сортируется динамический массив. Поэтому будет фиксированный 8х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
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
#include <iostream>
#include <ctime>
#include <iomanip>
using namespace std;
 
int main()
{
    srand(time(0));
    const int H = 8, W = 15; 
    int M[H][W], counter = 0, max, result, row = 0;
    cout << "Matrix[H][W]";   
    cout << "\n\n";
    
    //ГЌГ*õîäèì ñòðîêè Г± Г*óëåâûìè ýëåìåГ*ГІГ*ìè
    for(int i = 0; i < H; i++)
    {
        for(int j = 0; j < W; j++)
        {
            M[i][j] = 100 - rand() % 200;
            cout << setw(4) << M[i][j];
            if(M[i][j] == 0)
                counter++;
        }
        cout << "\n\n";
        if(counter > 0)
            row++;
        counter = 0;
    }
    
    //Ñîðòèðóåì Г¬Г*Г±Г±ГЁГў
    for(int loop = 0; loop <= (H * W); loop++)
    {
        for(int i = 0; i < H; i++) //Ñîðòèðóåì ñòðîêè
        {
            for(int j = 0; j < W - 1; j++)
            {
                if(M[i][j] < M[i][j + 1])
                {
                    int temp = M[i][j];
                    M[i][j] = M[i][j + 1];
                    M[i][j + 1] = temp;
                }
            }
        }
        for(int i = 0; i < W; i++) //Ñîðòèðóåì ñòîëáöû
        {
            for(int j = 0; j < H - 1; j++)
            {
                if(M[j][i] < M[j][i + 1])
                {
                    int temp = M[j][i];
                    M[j][i] = M[j][i + 1];
                    M[j][i + 1] = temp;
                }
            }
        }
    }
    
    cout << "----------------------------" <<
            "--------------------------------\n\n";
    
    //Âûâîä îòñîðòèðîâГ*Г*Г*îé Г¬Г*òðèöû
    for(int i = 0; i < H; i++)
    {
        for(int j = 0; j < W; j++)
        {
            cout << setw(4) << M[i][j];
        }
        cout << "\n\n";
    }
    
    result = M[H - 1][W - 1]; //ÏîñëåäГ*ГЁГ© ýëåìåГ*ГІ Г¬Г*òðèöû (ïåðâûé ñëåâГ*), ГІ.ГҐ. Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*ûé
    
    //ГЌГ*õîäèì Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*ûé ïîâòîðÿþùèéñÿ ýëåìåГ*ГІ
    for(int i = 0; i < H; i++)
    {
        for(int j = 0; j < W; j++)
        {
            max = M[i][j];
            for(int i = 0; i < H; i++)
            {
                for(int j = 0; j < W; j++)
                {
                    if(max == M[i][j])
                        counter++;
                }
            }
            if(counter > 1 && result <= max)
                result = max;
            counter = 0;
        }
    }
    
    cout << "\nRows: " << H - row <<
            "\nMax element: ";
    //Åñëè Г§Г*Г*Г·ГҐГ*ГЁГҐ result Г*ГҐ èçìåГ*èëîñü, ïðîâåðÿåì Г§Г*Г*Г·ГҐГ*ГЁГҐ ñëåäóþùåãî ýëåìåГ*ГІГ*.
    //Åñëè Г®Г*ГЁ Г*ГҐ Г°Г*ГўГ*Г», ñëåäîâГ*òåëüГ*Г® Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*îãî ïîâòîðÿþùåãîñÿ ýëåìåГ*ГІГ* Г*ГҐГІ.
    //Г€Г*Г*Г·ГҐ âûâîäèì result.
    (result == M[H - 1][W - 1] &&
     result != M[H - 2][W - 2])? cout << "No such elements\n\n"
                               : cout << result << "\n\n";
    
    system("pause");
    return 0;
}
Iryna_Light
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 41
10.02.2014, 22:19  [ТС]     Определить количество строк матрицы, которые не содержат ни одного нулевого элемента #28
GuGo1991, Огромное спасибо! а почему такой вид?
Iryna_Light
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 41
10.02.2014, 22:25  [ТС]     Определить количество строк матрицы, которые не содержат ни одного нулевого элемента #29
такой вид
Миниатюры
Определить количество строк матрицы, которые не содержат ни одного нулевого элемента  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2014, 22:39     Определить количество строк матрицы, которые не содержат ни одного нулевого элемента
Еще ссылки по теме:

Определить количество строк, не содержащих ни одного нулевого элемента - C++
#include &lt;iostream&gt; using namespace std; void main() { setlocale(LC_ALL, &quot;Russian&quot;); int mass=256;// обьявили двумерный...

Определить количество строк, не содержащих ни одного нулевого элемента - C++
Помогите написать программу,предмет просто не профильный Написать программу в соответствии с вариантом, выделив под массив динамически...

Определить количество строк, не содержащих ни одного нулевого элемента - C++
Заполнить целочисленный двухмерный массив размера NN случайными числами в диапазоне от -18 до 20 . Определить количество строк, не...

Определить количество строк не содержащих ни одного нулевого элемента - C++
создать в динамической памяти двумерный массив целых чисел. Определить количество строк не содержащих ни одного нулевого элемента

Определить: количество строк, не содержащих ни одного нулевого элемента; - C++
Составить функцию Run которая позволит выполнить следующие действия с двухмерными массивами (если задачу решить нельзя, то сообщит об...


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

Или воспользуйтесь поиском по форуму:
Iryna_Light
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 41
10.02.2014, 22:39  [ТС]     Определить количество строк матрицы, которые не содержат ни одного нулевого элемента #30
и почему (строка 100) мы сравниваем с элем. соседним по диагонали M[H - 2][W - 2], а не соседним по строке?
Yandex
Объявления
10.02.2014, 22:39     Определить количество строк матрицы, которые не содержат ни одного нулевого элемента
Ответ Создать тему
Опции темы

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