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

Найти количество столбцов, где все элементы упорядочены по возрастанию - C++

Восстановить пароль Регистрация
 
milka495
2 / 2 / 0
Регистрация: 12.12.2013
Сообщений: 73
12.12.2013, 00:28     Найти количество столбцов, где все элементы упорядочены по возрастанию #1
1. Дан двумерный массив А размера mxn. Найти количество столбцов, где все элементы упорядочены по возрастанию.
С комментариями и объяснением. Пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2013, 00:28     Найти количество столбцов, где все элементы упорядочены по возрастанию
Посмотрите здесь:

Вычислить количество строк матрицы, элементы которых упорядочены по возрастанию C++
Найти количество строк матрицы, элементы которых упорядочены по возрастанию. C++
Дана матрица размера M × N. Найти количество ее строк, элементы которых упорядочены по возрастанию. C++
Найти количество строк матрицы, элементы которых упорядочены по возрастанию. C++
C++ Найти количество строк матрицы, элементы которых упорядочены по возрастанию
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
StackOverflow
All rights reserved.
91 / 81 / 5
Регистрация: 03.08.2013
Сообщений: 258
12.12.2013, 04:04     Найти количество столбцов, где все элементы упорядочены по возрастанию #2
milka495,
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
//StackOverflow
//All rights reserved.
 
#include <iostream>
using namespace std;
 
int main()
{
    // для начала, создадим двумерный массив, который будет играть роль нашей
    // матрицы, и заполним его по своему вкусу.
 
    int arrayOfIntegers[ 4 ][ 5 ] = { { 11, 23, 77, 31, 5 },
                                    { 14, 7, 19, 33, 9 },
                                    { 17, 98, 22, 44, 3 },
                                    { 18, 45, 29, 49, 12 } };
    
    // теперь переменную, которая будет подсчитывать "правильные" столбцы
    // и инициализируем её нулём. 
 
    int counter = 0;
 
    // создадим цикл, который позволит нам пройтись по всем элементам в матрице.
 
    for ( int column = 0; column < 5; column++ )
    {
 
        // создадим переменную логического типа, которая просто будет следить
        // за ходом работы программы, и если в стольце не окажется "правильной"
        // последовательности, она позволит нам немедленно прервать работу
        // вложенного цикла, и приступить к проверки следующего столбца.
 
        bool sequence = true;
 
        for ( int row = 1; row < 4; row++ )
        {
 
            // условие гласит: если элемент матрицы в столбце j меньше предыдущего
            // элемента из этого же столбца,
 
            if ( arrayOfIntegers[ i ][ j ] < arrayOfIntegers[ i - 1 ][ j ] )
            {
 
                // то дальнейшая проверка смысла не имеет, последовательность нарушена
                // можно приступить к проверке следующего столбца, но для этого
                // присвоим нашей переменной ложное значение.
 
                sequence = false;
            }
 
            // если у переменной sequence ложное значение, то мы прерываем работу цикла
            // при помощи оператора break
 
            if ( !sequence )
                break;
        }
 
        // теперь мы вышли из цикла, нужно проверить, была ли обнаружена "правильная"
        // последовательность, и если это так, то счётчик обнаруженных последовательностей
        // необходимо пополнить на единицу.
        
        if ( sequence )
            ++counter;
    }
 
    // теперь давай просто посмотрим, что у нас получилось, и выведем результат на экран.
 
    cout << "We have " << counter << " right sequences." << endl;
 
    return 0;
}
milka495
2 / 2 / 0
Регистрация: 12.12.2013
Сообщений: 73
12.12.2013, 11:57  [ТС]     Найти количество столбцов, где все элементы упорядочены по возрастанию #3
Почему то пришла Только часть программы
StackOverflow
All rights reserved.
91 / 81 / 5
Регистрация: 03.08.2013
Сообщений: 258
12.12.2013, 15:37     Найти количество столбцов, где все элементы упорядочены по возрастанию #4
milka495, то есть?
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
12.12.2013, 17:29     Найти количество столбцов, где все элементы упорядочены по возрастанию #5
StackOverflow, StackOverflow, У вас опечатка в 24и 34 строках вместо
C++
1
  for ( int column = 0; column < 5; column++ )
и
C++
1
for ( int row = 1; row < 4; row++ )
должно быть
C++
1
for ( int i = 0; i < 5; i++ )
и
C++
1
for ( int j = 1; j < 4; j++ )
StackOverflow
All rights reserved.
91 / 81 / 5
Регистрация: 03.08.2013
Сообщений: 258
12.12.2013, 17:35     Найти количество столбцов, где все элементы упорядочены по возрастанию #6
Genn55, спасибо вам!
milka495
2 / 2 / 0
Регистрация: 12.12.2013
Сообщений: 73
12.12.2013, 18:22  [ТС]     Найти количество столбцов, где все элементы упорядочены по возрастанию #7
А если нужно задать динамический массив, то он будет записываться так:
int m,n;
cin>>m>>n;
int **mas;
mas=new int *[m];
for (int i=0; i<m; i++)
mas[i]=new int[n];

Добавлено через 4 минуты
еще это забыла
for (int i=0; i<m; i++){
for (int j=0; j<n; j++) {
cout<<"mas ["<<i<<"]["<<j<<"]=";
cin>>mas[i][j];
}
}
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
12.12.2013, 18:30     Найти количество столбцов, где все элементы упорядочены по возрастанию #8
C++
1
2
3
4
5
6
7
И не забывайте очистить память в конце программы
//удаляем двумерный массив он больше не нужен
    for (int i = 0; i < n; i++)
    {
     delete[]mas[i]; // Удаляем каждый элемент
    }
    delete [] mas; // А потом массив
milka495
2 / 2 / 0
Регистрация: 12.12.2013
Сообщений: 73
12.12.2013, 18:50  [ТС]     Найти количество столбцов, где все элементы упорядочены по возрастанию #9
Почему-то программа выдает ошибку о том, что программа вызвала нарушение доступа (ошибку сегментации). Как это исправить?
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
12.12.2013, 20:37     Найти количество столбцов, где все элементы упорядочены по возрастанию #10
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
#include <iostream>
using namespace std;
 
int main()
{
    // для начала, создадим двумерный массив, который будет играть роль нашей
    // матрицы, и заполним его по своему вкусу.
 
int m,n;
cin>>m>>n;
int **mas;
mas=new int *[m];
for (int i=0; i<m; i++)
mas[i]=new int[n];
for (int i=0; i<m; i++)
{
for (int j=0; j<n; j++)
{
cout<<"mas ["<<i<<"]["<<j<<"]=";
cin>>mas[i][j];
}
}
 
    // теперь переменную, которая будет подсчитывать "правильные" столбцы
    // и инициализируем её нулём.
 
    int counter = 0;
 
    // создадим цикл, который позволит нам пройтись по всем элементам в матрице.
 
    for ( int i = 0; i< m; i++ )
    {
 
        // создадим переменную логического типа, которая просто будет следить
        // за ходом работы программы, и если в стольце не окажется "правильной"
        // последовательности, она позволит нам немедленно прервать работу
        // вложенного цикла, и приступить к проверки следующего столбца.
 
        bool sequence = true;
 
        for ( int j = 1; j < n-1; j++ )
        {
 
            // условие гласит: если элемент матрицы в столбце j меньше предыдущего
            // элемента из этого же столбца,
 
            if ( mas[ i ][ j ] < mas[ i - 1 ][ j ] )
            {
 
                // то дальнейшая проверка смысла не имеет, последовательность нарушена
                // можно приступить к проверке следующего столбца, но для этого
                // присвоим нашей переменной ложное значение.
 
                sequence = false;
            }
 
            // если у переменной sequence ложное значение, то мы прерываем работу цикла
            // при помощи оператора break
 
            if ( !sequence )
                break;
        }
 
        // теперь мы вышли из цикла, нужно проверить, была ли обнаружена "правильная"
        // последовательность, и если это так, то счётчик обнаруженных последовательностей
        // необходимо пополнить на единицу.
 
        if ( sequence )
            ++counter;
    }
 
    // теперь давай просто посмотрим, что у нас получилось, и выведем результат на экран.
 
    cout << "We have " << counter << " right sequences." << endl;
    //удаляем двумерный массив он больше не нужен
    for (int i = 0; i < n; i++)
    {
     delete[]mas[i]; // Удаляем каждый элемент
    }
    delete [] mas; // А потом массив
 
    return 0;
}
milka495
2 / 2 / 0
Регистрация: 12.12.2013
Сообщений: 73
12.12.2013, 20:59  [ТС]     Найти количество столбцов, где все элементы упорядочены по возрастанию #11
Я поняла почему не работала. Я пробовала ввести квадратную матрицу, и она зависала

Добавлено через 2 минуты
я могу только работать с этой программой, когда строк больше чем столбцов
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
12.12.2013, 21:14     Найти количество столбцов, где все элементы упорядочены по возрастанию #12
Замените
C++
1
 if ( mas[ i ][ j ] < mas[ i - 1 ][ j ] )
на
C++
1
if ( mas[ i ][ j ] > mas[ i + 1 ][ j ] )
или покажите свой код
milka495
2 / 2 / 0
Регистрация: 12.12.2013
Сообщений: 73
12.12.2013, 21:27  [ТС]     Найти количество столбцов, где все элементы упорядочены по возрастанию #13
Всё так же как у вас. Заменила то, о чем вы говорили. 2на 2 работает, 4 на 3 нет
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
12.12.2013, 22:06     Найти количество столбцов, где все элементы упорядочены по возрастанию #14
Это код не мой,я указал на явные ошибки но этот код может работать только с матрицей 2х2.
milka495
2 / 2 / 0
Регистрация: 12.12.2013
Сообщений: 73
12.12.2013, 22:33  [ТС]     Найти количество столбцов, где все элементы упорядочены по возрастанию #15
А может зависит от среды программирования? у меня DevC++
StackOverflow
All rights reserved.
91 / 81 / 5
Регистрация: 03.08.2013
Сообщений: 258
12.12.2013, 22:34     Найти количество столбцов, где все элементы упорядочены по возрастанию #16
Добавлено через 1 минуту
milka495, вот вам массив с "плавающей" размерностью, пользуйтесь на здоровье.
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
//StackOverflow
//All rights reserved.
 
#include <iostream>
using namespace std;
 
int main()
{
    // для начала, создадим двумерный массив, который будет играть роль нашей
    // матрицы, и заполним его по своему вкусу.
 
    int size1;
    int size2;
 
    cin >> size1 >> size2;
 
    int ** arrayOfIntegers = new int * [ size1 ];
 
    for ( int i = 0; i < size1; i++ )
    {
        arrayOfIntegers[ i ] = new int [ size2 ];
 
        int j = 0;
 
        while ( j < size2 )
        {
            cin >> arrayOfIntegers[ i ][ j ];
            ++j;
        }
        cout << endl;
    }
        
    
    // теперь переменную, которая будет подсчитывать "правильные" столбцы
    // и инициализируем её нулём. 
 
    int counter = 0;
 
    // создадим цикл, который позволит нам пройтись по всем элементам в матрице.
 
    for ( int column = 0; column < size2; column++ )
    {
 
        // создадим переменную логического типа, которая просто будет следить
        // за ходом работы программы, и если в стольце не окажется "правильной"
        // последовательности, она позволит нам немедленно прервать работу
        // вложенного цикла, и приступить к проверки следующего столбца.
 
        bool sequence = true;
 
        for ( int row = 1; row < size1; row++ )
        {
 
            // условие гласит: если элемент матрицы в столбце j меньше предыдущего
            // элемента из этого же столбца,
 
            if ( arrayOfIntegers[ row ][ column ] < arrayOfIntegers[ row - 1 ][ column ] )
            {
 
                // то дальнейшая проверка смысла не имеет, последовательность нарушена
                // можно приступить к проверке следующего столбца, но для этого
                // присвоим нашей переменной ложное значение.
 
                sequence = false;
            }
 
            // если у переменной sequence ложное значение, то мы прерываем работу цикла
            // при помощи оператора break
 
            if ( sequence == false )
                break;
        }
 
        // теперь мы вышли из цикла, нужно проверить, была ли обнаружена "правильная"
        // последовательность, и если это так, то счётчик обнаруженных последовательностей
        // необходимо пополнить на единицу.
        
        if ( sequence )
            ++counter;
    }
 
    // теперь давай просто посмотрим, что у нас получилось, и выведем результат на экран.
 
    cout << "We have " << counter << " right sequences." << endl;
 
    for ( int i = 0; i < size2; i++ )
    {
        delete arrayOfIntegers[ i ];
    }
 
    delete [] arrayOfIntegers;
 
    return 0;
}
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
12.12.2013, 23:18     Найти количество столбцов, где все элементы упорядочены по возрастанию #17
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
#include <iostream>
using namespace std;
 
int main()
{
 
    int n;
    int m;
 
    cin >> n >> m;
 
    int ** A = new int * [ n ];
 
    for ( int i = 0; i < n; i++ )
    {
        A[ i ] = new int [ m ];
       for (int j=0; j<m; j++)
        {
       cout<<"mas ["<<i<<"]["<<j<<"]=";
       cin>>A[i][j];
        }
     }
     cout <<"\n";
     for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
         {
          cout<<A[i][j]<<"\t";// выводим сформированный массив
         }
        cout<<"\n";
    }
 
    int counter = 0;
    for ( int i = 0; i < m; i++ )
    {
 
        bool cur = true;
 
        for ( int j = 1; j < n; j++ )
        {
            if ( A[ j ][ i ] < A[ j - 1 ][ i ] )
            {
 
                cur = false;
            }
 
            if ( cur == false )
                break;
        }
 
        if ( cur )
            ++counter;
    }
    cout<<"\n";
    cout << "We have " << counter << " right sequences." << endl;
 
    for ( int i = 0; i < m; i++ )
    {
        delete A[ i ];
    }
 
    delete [] A;
 
    return 0;
}
Работает
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2013, 23:02     Найти количество столбцов, где все элементы упорядочены по возрастанию
Еще ссылки по теме:

Дан двумерный массив A размера m×n. Найти количество столбцов, где все элементы упорядочены по возрастанию C++
C++ Найти номера строк, элементы которых упорядочены по возрастанию

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

Или воспользуйтесь поиском по форуму:
milka495
2 / 2 / 0
Регистрация: 12.12.2013
Сообщений: 73
28.12.2013, 23:02  [ТС]     Найти количество столбцов, где все элементы упорядочены по возрастанию #18
Добрый день! Мой преподаватель сказал мне, что в программе ошибка. В ней подсчитывается количество столбцов с упорядоченными по неубыванию элементами, а по условию задачи надо было найти количество столбцов с упорядоченными по возрастанию элементами. Как это исправить?
Yandex
Объявления
28.12.2013, 23:02     Найти количество столбцов, где все элементы упорядочены по возрастанию
Ответ Создать тему
Опции темы

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