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

В матрице NxM найти все седловые точки

02.10.2016, 19:14. Показов 9594. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Для матрицы размером NxM вывести на экран все седловые точки. (Элемент матрицы называется седловой, если он является наименьшим в своей строке и одновременно наибольшим в своем столбце или наоборот.)
C++ уже как 3 недели изучаю.

Работаю в Visual Studio Ulimate 2013
Набросал кода, но что-то не работает.

Если матрица 2x2
1 2
3 4

Выдаст число 2 и 3, это правильно.

А вот если сделать матрицу 3x3
1 2 3
4 5 6
7 8 9

Выдаст только 3, хотя и 7 должно.

В чем моя ошибка ?
Кликните здесь для просмотра всего текста

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
#include <iostream>
using namespace std;
int main()
{
    setlocale(0, "rus");
    int N,x,y;
    cout << "Введите кол-во строк: ";// Вводим кол-во строк
    cin >> N;
    
    int M;
    cout << "Введите кол-во столбцов: ";// Вводим кол-во столбцов
    cin >> M;
 
    // Выделяем память под матрицу
    int **A = new int *[N];
    for (int i = 0; i < N; i++)
        A[i] = new int[M];
 
    // Вводим элементы матрицы
    cout << "Введите матрицу:\n ";
    for (int i = 0; i < N; i++)
        {
            for (int j = 0; j < M; j++)
            {
                cout << "A[" << i + 1 << "][" << j + 1 << "] = ";
                cin >> A[i][j];
            }
        }
 
    for (int j = 0; j < N; j++)
        {
            for (int k = 0; k < M; k++)
                {
                    int aMin = 0, aMax = 0;
                    for (int i = 0; i < M; i++)
                        {
                            if (A[j][k] > A[j][i] || A[j][k] == A[j][i]) { aMax++; x = j; y = k; }
                            else { aMax--; }
                        }
                    if (aMax == M) 
                        {
                            for (int i = 0; i < N; i++) 
                                {
                                    if (A[x][y] < A[i][y] || A[x][y] == A[i][y]) { aMin++; }
                                    else { aMin--; }
                                }
                            if (aMin == N) { cout << " A[" << x + 1 << "][" << y + 1 << "] = " << A[x][y] << " седловая точка\n"; }
                        }
                    else 
                        {   
                            for (int i = 0; i < M; i++) 
                                {
                                    if (A[x][y] < A[x][i] || A[x][y] == A[x][i]) { aMin++; }
                                    else { aMin--; }
                                }
                            if (aMin == M)
                                {
                                    for (int i = 0; i < N; i++)
                                        {
                                            if (A[x][y] > A[i][y] || A[x][y] == A[i][y]) { aMax++; }
                                            else { aMax--; }
                                        }
                                    if (aMax == N) { cout << " A[" << x + 1 << "][" << y + 1 << "] = " << A[x][y] << " седловая точка\n"; }
                                }
                        }
                }
        }
    system("pause");
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.10.2016, 19:14
Ответы с готовыми решениями:

Для матрицы размером NxM вывести на экран все седловые точки.
Для матрицы размером NxM вывести на экран все седловые точки. Элемент матрицы называется седловой...

Для матрицы размером NxM вывести на экран все ее седловые точки
Для матрицы размером NxM вывести на экран все ее седловые точки. Элемент матрицы называется...

В матрице найти все седловые точки, либо установить, что таких точек нет
Седловой точкой в матрице называется элемент, являющийся одновременно наибольшим в столбце и...

Для матрицы размером NxM(N и M пользователь вводит вручную) вывести на экран все седловые точки
заранее спасибо!

3
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
02.10.2016, 19:32 2
один из случаев
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 for (int i = 0; i < N; i++)
        {
            int min_col=0;
            bool fl=false;
            for (int j = 1; j < M; j++)
               if (A[i][j]<A[i][min_col]) min_col=j;
            for (int t=0;t<N;t++)
                if (A[t][min_col]>A[i][col]) 
                {
                    fl=true;
                    break;
                }
            if (!fl) cout<< "sedlovoy element "<< A[i][min_col];
        }
1
Объявлятель переменных
1220 / 406 / 320
Регистрация: 24.09.2011
Сообщений: 1,274
02.10.2016, 19:50 3
C++
1
2
3
4
5
6
7
8
9
10
void printSaddlePoints(double **M, unsigned rows, unsigned cols){
    for (unsigned i = 1; i < rows-1; i++){
        for (unsigned j = 1; j < cols-1; j++){
            if (    (M[i-1][j]>M[i][j] && M[i+1][j]>M[i][j] && M[i][j-1]<M[i][j] && M[i][j+1]<M[i][j])||
                    (M[i-1][j]<M[i][j] && M[i+1][j]<M[i][j] && M[i][j-1]>M[i][j] && M[i][j+1]>M[i][j])){
                cout << i << ' ' << j << endl;
            }
        }
    }
}
1
1 / 1 / 0
Регистрация: 02.10.2016
Сообщений: 3
02.10.2016, 20:29  [ТС] 4
К счастью сам разобрался
Ошибка была в том, что переменные aMin и aMax не приравнивались к нулю после того, как проходили 49 строку. Я приравнял aMin = 0, aMax = 0, и все.
Вот рабочий код:
Кликните здесь для просмотра всего текста

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>
using namespace std;
int main()
{
    setlocale(0, "rus");
    int N;
    cout << "Введите кол-во строк: ";// Вводим кол-во строк
    cin >> N;
 
    int M;
    cout << "Введите кол-во столбцов: ";// Вводим кол-во столбцов
    cin >> M;
 
    // Выделяем память под матрицу
    int **A = new int *[N];
    for (int i = 0; i < N; i++)
        A[i] = new int[M];
 
    // Вводим элементы матрицы
    cout << "Введите матрицу:\n ";
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            cout << "A[" << i + 1 << "][" << j + 1 << "] = ";
            cin >> A[i][j];
        }
    }
 
    for (int j = 0; j < N; j++)
    {
        for (int k = 0, x, y; k < M; k++)
        {
            int aMin = 0, aMax = 0;
            for (int i = 0; i < M; i++)
            {
                if (A[j][k] > A[j][i] || A[j][k] == A[j][i]) { aMax++; x = j; y = k; }
                else { aMax--; }
            }
            if (aMax == M)
            {
                for (int i = 0; i < N; i++)
                {
                    if (A[x][y] < A[i][y] || A[x][y] == A[i][y]) { aMin++; }
                    else { aMin--; }
                }
                if (aMin == N) { cout << " A[" << x + 1 << "][" << y + 1 << "] = " << A[x][y] << " седловая точка\n"; }
            }
            else
            {
                int aMin = 0, aMax = 0;
                for (int i = 0; i < M; i++)
                {
                    if (A[x][y] < A[x][i] || A[x][y] == A[x][i]) { aMin++; }
                    else { aMin--; }
                }
                if (aMin == M)
                {
                    for (int i = 0; i < N; i++)
                    {
                        if (A[x][y] > A[i][y] || A[x][y] == A[i][y]) { aMax++; }
                        else { aMax--; }
                    }
                    if (aMax == N) { cout << " A[" << x + 1 << "][" << y + 1 << "] = " << A[x][y] << " седловая точка\n"; }
                }
            }
        }
    }
    system("pause");
    return 0;
}
1
02.10.2016, 20:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.10.2016, 20:29
Помогаю со студенческими работами здесь

Для матрицы А размером NxM вывести на экран все ее седловые точки. Элемент матрицы называется седловой точкой,
Для матрицы А размером NxM вывести на экран все ее седловые точки. Элемент матрицы называется...

Найти все седловые точки матрицы
Для матрицы А размером NxM вывести на экран все ее седловые точки. Элемент матрицы называется...

Найти все седловые точки матрицы
Для заданной целой матрицы размером NxM вывести на экран все ее седловые точки. Элемент матрицы...

Найти все седловые точки матрицы
Для матрицы m на n вывести на экран все седловые точки. Элемент матрицы называется седловой точкой,...


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

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

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