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

Индексы седловых точек - C++

Восстановить пароль Регистрация
 
Concelvin
 Аватар для Concelvin
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 15
30.04.2012, 16:24     Индексы седловых точек #1
Помогите пожалуйста! Буду премного благодарен за решение этой задачи на языке C++:

Элемент матрицы назовём седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в своём столбце или, наоборот, является наибольшим в своей строке и наименьшим в своём столбце. Для заданной целой матрицы размером nxm напечатать индексы всех её седловых точек.

Ах да, если вас не затруднит, то можно было бы добавить к задаче комментарии.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
30.04.2012, 17:47     Индексы седловых точек #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
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
#define N 4
 
int main()
{
    srand( time( NULL ) );
    int a[N][N], max_str[N], min_str[N], max_stolb[N], min_stolb[N], i, j, i_max, i_min;
    cout<<"Ishodn matr:"<<endl;
    for(i=0; i<N; i++)
    {
        i_max=i_min=0;
        for(j=0; j<N; j++)
        {
            a[i][j]=rand()%10;
            cout<<a[i][j]<<" ";
            if(a[i][j]<a[i][i_min])
                i_min=j;
            if(a[i][j]>a[i][i_max])
                i_max=j;
        }
        cout<<endl;
        max_str[i]=a[i][i_max];
        min_str[i]=a[i][i_min];
    }
    for(j=0; j<N; j++)
    {
        i_min=i_max=0;
        for(i=0; i<N; i++)
        {
            if(a[i][j]<a[i_min][j])
                i_min=i;
            if(a[i][j]>a[i_max][j])
                i_max=i;
        }
        max_stolb[j]=a[i_max][j];
        min_stolb[j]=a[i_min][j];
    }
    cout<<"Index sedl tochek:"<<endl;
    for(i=0; i<N; i++)
        for(j=0; j<N; j++)
            if((a[i][j]==max_str[i] && a[i][j]==min_stolb[j]) || (a[i][j]==min_str[i] && a[i][j]==max_stolb[j]))
                cout<<i<<" "<<j<<endl; 
    return 0;
}
Concelvin
 Аватар для Concelvin
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 15
30.04.2012, 18:03  [ТС]     Индексы седловых точек #3
Спасибо, всё работает! Но не могли бы вы написать комментарии к данной программе?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
30.04.2012, 18:09     Индексы седловых точек #4
Цитата Сообщение от Concelvin Посмотреть сообщение
Но не могли бы вы написать комментарии к данной программе?
не вижу смысла:
в массиве max_str[] хранятся максимальные значения массива по строкам
в массиве min_str[] хранятся минимальные значения массива по строкам
в массиве max_stolb[] хранятся максимальные значения массива по столбцам
в массиве min_stolb[] хранятся минимальные значения массива по столбцам
Остальное все просто - если выполняется условие:
Цитата Сообщение от Concelvin Посмотреть сообщение
если он является наименьшим в своей строке и одновременно наибольшим в своём столбце или, наоборот, является наибольшим в своей строке и наименьшим в своём столбце
выводим индексы элемента в очередной строке.
Concelvin
 Аватар для Concelvin
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 15
30.04.2012, 18:17  [ТС]     Индексы седловых точек #5
И кстати, здесь всегда получается квадратная матрица. А по условию nxm. Как с этим быть?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
30.04.2012, 18:26     Индексы седловых точек #6
Цитата Сообщение от Concelvin Посмотреть сообщение
И кстати, здесь всегда получается квадратная матрица. А по условию nxm. Как с этим быть?
серьезная проблема:
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
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
#define N 4
#define M 5 
int main()
{
    srand( time( NULL ) );
    int a[N][M], max_str[N], min_str[N], max_stolb[M], min_stolb[M], i, j, i_max, i_min;
    cout<<"Ishodn matr:"<<endl;
    for(i=0; i<N; i++)
    {
        i_max=i_min=0;
        for(j=0; j<M; j++)
        {
            a[i][j]=rand()%10;
            cout<<a[i][j]<<" ";
            if(a[i][j]<a[i][i_min])
                i_min=j;
            if(a[i][j]>a[i][i_max])
                i_max=j;
        }
        cout<<endl;
        max_str[i]=a[i][i_max];
        min_str[i]=a[i][i_min];
    }
    for(j=0; j<M; j++)
    {
        i_min=i_max=0;
        for(i=0; i<N; i++)
        {
            if(a[i][j]<a[i_min][j])
                i_min=i;
            if(a[i][j]>a[i_max][j])
                i_max=i;
        }
        max_stolb[j]=a[i_max][j];
        min_stolb[j]=a[i_min][j];
    }
    cout<<"Index sedl tochek:"<<endl;
    for(i=0; i<N; i++)
        for(j=0; j<M; j++)
            if((a[i][j]==max_str[i] && a[i][j]==min_stolb[j]) || (a[i][j]==min_str[i] && a[i][j]==max_stolb[j]))
                cout<<i<<" "<<j<<endl; 
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2012, 18:30     Индексы седловых точек
Еще ссылки по теме:

C++ Найти и вывести индексы всех седловых точек матрицы
C++ Найти индексы всех седловых точек заданной матрицы, и вывести их в порядке возрастания
C++ Для заданной матрицы напечатать индексы всех ее седловых точек

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

Или воспользуйтесь поиском по форуму:
Concelvin
 Аватар для Concelvin
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 15
30.04.2012, 18:30  [ТС]     Индексы седловых точек #7
Благодарю за решение
Yandex
Объявления
30.04.2012, 18:30     Индексы седловых точек
Ответ Создать тему
Опции темы

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