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

В матрице найти наибольший элемент среди наименьших каждой строки

20.10.2014, 19:26. Показов 2640. Ответов 8
Метки нет (Все метки)

Здравствуйте! Помогите пожалуйста написать код для задачи:
"Дана действительная матрица размера nxm, все элементы которой различны. В каждой строке выбирается элемент с наименьшим значением, затем среди этих чисел выбирается наибольшее. Указать индексы элемента с найденным значением."
Все решения которые есть на форуме не родходят, слишком код огромный.
Спасибо
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2014, 19:26
Ответы с готовыми решениями:

В матрице найти наименьший элемент среди наибольших элементов каждой строки
Данная действительная матрица размером n * m, все элементы которой разные. В каждой строке...

Найти наибольший элемент среди наименьших значений каждой строки матрицы
Пусть дана вещественная матрица размером n x m, все элементы которой различны. В каждой строке...

В матрице найти в каждой строке наибольший элемент, а потом среди них найти наименьший (задача минимакса)
помогите пожалуйста срочно надо , В матрице найти в каждой строке наибольший элемент, а потом среди...

В матрице найти наибольший элемент КАЖДОЙ строки
Ребят, такой вопрос. Как в одной матрице найти наибольший элемент КАЖДОЙ строки и перегнать его в...

8
Модератор
Эксперт С++
12081 / 9760 / 5902
Регистрация: 18.12.2011
Сообщений: 26,202
20.10.2014, 19:31 2
1.Возьмите любое из них как образец.
Например это
2. Составляете алгоритм решения своей задачи.
3. заменяете алгоритм образца на свой.
0
1 / 1 / 0
Регистрация: 06.10.2014
Сообщений: 23
20.10.2014, 19:38  [ТС] 3
Если бы я понимал тот код, не то чтобы я его вообще не понимаю, только некоторые части. Просто с большей частью кода я еще не знаком, в процессе обучения
0
Модератор
Эксперт С++
12081 / 9760 / 5902
Регистрация: 18.12.2011
Сообщений: 26,202
20.10.2014, 19:54 4
Цитата Сообщение от Bardo Посмотреть сообщение
Если бы я понимал тот код
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
void maximum(double**a,double *result,int n,int m)
// a[n][m] матрица, result[n] - массив для максимумов
{
    for(int i=0;i<n;i++) // цикл по номерам строк
    {
                result[i]=a[i][0]; // считаем сначала, что максимум в первом столбце
                for(int j=1;j<m;j++)// цикл по номерам столбцов
                    if(result[i]<a[i][j]) // нашли больший
                      result[i]=a[i][j];  // запомнили
    }
}
int main()
{
    int N,M;cin>>N>>M; // ввели к-во строк и столбцов
        double **x=new double*[N]; // создали N указателей для строк
    for(int i=0;i<N;i++)
              x[i]=new double[M]; // для каждого указателя выделили память, чтобы поместились все столбцы
// Тут заполнить x
    double* res=new double[N]; // создали массив для максимумов 
    maximum(x,res,N,M); // вызвали функцию поиска максимумов
    for(int i=0;i<N;i++)    // вывели что получилось
             cout<<res[i]<<endl;
    delete[] res;    // удалили все что создавали
    for(int i=0;i<N;i++)
            delete[] x[i];
    delete[] x;
    system("pause");
    return 0;
}
1
1 / 1 / 0
Регистрация: 06.10.2014
Сообщений: 23
21.10.2014, 20:15  [ТС] 5
"void maximum(double**a,double *result,int n,int m)"
Можно попросить объяснить почему запись именно такая? Просто нас учат писать только int main(), а другое не обїясняют
1
Модератор
Эксперт С++
12081 / 9760 / 5902
Регистрация: 18.12.2011
Сообщений: 26,202
21.10.2014, 20:21 6
синтаксис функций
C++
1
2
3
4
5
Возвращаемый_тип имя_функции(список параметров)
{
   код функции
   return выражение;
}
void означает, что возвращать ничего не надо.
выражение должно иметь возвращаемый_тип.
1
1 / 1 / 0
Регистрация: 06.10.2014
Сообщений: 23
22.10.2014, 21:17  [ТС] 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
#include <conio.h>
#include <math.h>
#include <iostream>
 
using namespace std;
 
void minimum(double**a,double *result,int n,int m)
// a[n][m] матрица, result[n] - массив для максимумов
{
    for(int i=0;i<n;i++) // цикл по номерам строк
    {
                result[i]=a[i][0]; // считаем сначала, что максимум в первом столбце
                for(int j=1;j<m;j++)// цикл по номерам столбцов
                    if(result[i]>a[i][j]) // нашли больший
                      result[i]=a[i][j];  // запомнили
    }
}
 
 
int main()
{
    int N,M;cin>>N>>M; // ввели к-во строк и столбцов
        double **x=new double*[N]; // создали N указателей для строк
    for(int i=0;i<N;i++)
              x[i]=new double[M]; // для каждого указателя выделили память, чтобы поместились все столбцы
 
    for (int i=0;i < N; i++){
        for (int j=0;j < M; j++){
            cout << "Enter element [" << i << "]" << "[" << j << "]:";
            cin >> x[i][j];
        }
    }
 
    for (int i=0;i < N; i++){
        for (int j=0;j < M; j++){
            cout << x[i][j] << ' ';
        }
        cout << endl;
    }
 
    cout << endl;
 
    double* res=new double[N]; // создали массив для максимумов 
    minimum(x,res,N,M); // вызвали функцию поиска максимумов
    for(int i=0;i<N;i++)    // вывели что получилось
             cout<<"Minimum sredi strok:" << res[i]<<endl;
 
    double* maxres = new double[N] ;
 
     for ( int i = 0; i < maxres[i];i++){
         if ( res[i] > maxres){                         // невозможно преобразовать "double *" в "double"
             maxres = res[i];
         }
     }
 
 
 
   
 
    system("pause");
    return 0;
}
Спасибо заранее.
0
Модератор
Эксперт С++
12081 / 9760 / 5902
Регистрация: 18.12.2011
Сообщений: 26,202
22.10.2014, 22:17 8
Вы получили массив res.
Теперь найдите в нем максимум.
Поскольку он одномерный, то это еще проще
C++
1
2
3
4
5
6
7
8
9
10
11
double maximum(double *result,int n)
// result[n] - массив? где ищем максимум
{
    double mx=result[0];// считаем сначала, что максимум в первом элементе
    for(int i=1;i<n;i++) // цикл по всем элементам начиная со второго
    {
         if(result[i]>mx // нашли больший
            mx=result[i];  // запомнили
    }
    return mx;
}
0
1 / 1 / 0
Регистрация: 06.10.2014
Сообщений: 23
22.10.2014, 23:26  [ТС] 9
Спасибо, но опять ошибка. Обязательно чтобы найти максимум в нем нужно создавать новую функцию?

Вот код который получился:
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
#include <conio.h>
#include <math.h>
#include <iostream>
 
using namespace std;
 
void minimum(double**a,double *result,int n,int m)
// a[n][m] матрица, result[n] - массив для максимумов
{
    for(int i=0;i<n;i++) // цикл по номерам строк
    {
                result[i]=a[i][0]; // считаем сначала, что максимум в первом столбце
                for(int j=1;j<m;j++)// цикл по номерам столбцов
                    if(result[i]>a[i][j]) // нашли больший
                      result[i]=a[i][j];  // запомнили
    }
}
 
 
    double maximum(double *result,int n)
{
    double mx=result[0];// считаем сначала, что максимум в первом элементе
    for(int i=1;i<n;i++) // цикл по всем элементам начиная со второго
    {
         if(result[i]>mx) // нашли больший
            mx=result[i];  // запомнили
    }
    return mx;
}
 
int main()
{
    int N,M;cin>>N>>M; // ввели к-во строк и столбцов
        double **x=new double*[N]; // создали N указателей для строк
    for(int i=0;i<N;i++)
              x[i]=new double[M]; // для каждого указателя выделили память, чтобы поместились все столбцы
 
    for (int i=0;i < N; i++){
        for (int j=0;j < M; j++){
            cout << "Enter element [" << i << "]" << "[" << j << "]:";
            cin >> x[i][j];
        }
    }
 
    for (int i=0;i < N; i++){
        for (int j=0;j < M; j++){
            cout << x[i][j] << ' ';
        }
        cout << endl;
    }
 
    cout << endl;
 
    double* res=new double[N]; // создали массив для максимумов 
    minimum(x,res,N,M); // вызвали функцию поиска максимумов
    for(int i=0;i<N;i++)    // вывели что получилось
             cout<<"Minimum sredi strok:" << res[i]<<endl;
 
    maximum(result); // вызвали функцию поиска максимумов
    for(int i=0;i<N;i++)    // вывели что получилось
             cout<<"Minimum sredi strok:" << mx[i]<<endl;
 
 
 
    system("pause");
    return 0;
}
Добавлено через 10 минут
Все разобрался с этим максимумом. Теперь нужны индексы элементов

Добавлено через 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
#include <conio.h>
#include <math.h>
#include <iostream>
 
using namespace std;
 
void minimum(double**a,double *result,int n,int m)
// a[n][m] матрица, result[n] - массив для максимумов
{
    for(int i=0;i<n;i++) // цикл по номерам строк
    {
                result[i]=a[i][0]; // считаем сначала, что максимум в первом столбце
                for(int j=1;j<m;j++)// цикл по номерам столбцов
                    if(result[i]>a[i][j]) // нашли больший
                      result[i]=a[i][j];  // запомнили
    }
}
 
 
 
int main()
{
    int N,M;cin>>N>>M; // ввели к-во строк и столбцов
        double **x=new double*[N]; // создали N указателей для строк
    for(int i=0;i<N;i++)
              x[i]=new double[M]; // для каждого указателя выделили память, чтобы поместились все столбцы
 
    for (int i=0;i < N; i++){
        for (int j=0;j < M; j++){
            cout << "Enter element [" << i << "]" << "[" << j << "]:";
            cin >> x[i][j];
        }
    }
 
    for (int i=0;i < N; i++){
        for (int j=0;j < M; j++){
            cout << x[i][j] << ' ';
        }
        cout << endl;
    }
 
    cout << endl;
 
    double* res=new double[N]; // создали массив для макvv
    minimum(x,res,N,M); // вызвали функцию поиска мvbybv
    for(int i=0;i<N;i++)    // вывели что получилось
             cout<<"Minimum sredi strok:" << res[i]<<endl;
 
    double max;
    int i=0;
    int stroka=0;
    int stolbec=0;
    max = res[i];
 
    for ( int i=0; i < N; i++){
        if(max < res[i]){
            max = res[i];
        }
    }
    cout <<"Maximum sredi minimumov:" <<  max << endl;
    
 
    
 
 
 
    system("pause");
    return 0;
}
Вот код. Все работает. Необходимо только указать индекс максимума (В коде переменная max).Подскажете?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.10.2014, 23:26
Помогаю со студенческими работами здесь

Среди элементов каждой строки матрицы, отличных от данного B, найти наибольший элемент и его номер
Задана матрица размерности M*N. Среди элементов каждой строки, отличных от данного B, найти...

Матрица: среди элементов каждой строки, отличных от заданного В, найти наибольший элемент и его номер
Задана матрица размерности M×N. Среди элементов каждой строки, отличных от заданного В, найти...

[КуМир] Найти в каждой столбце матрице наибольший элемент
Здравствуйте, помогите пожалуйста с этим заданием. Найти в каждой столбце матрице наибольший...

Матрица. В каждой строке найти наименьший элемент, затем среди найденных - наибольший
Дана действительная матрица размера n х m, все элементы которой различны. В каждой строке...


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

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

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