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

Найти наибольшее значение матрицы выше главной диагонали

19.10.2014, 20:56. Показов 4194. Ответов 7
Метки нет (Все метки)

Добрый день. Условие такое: дана квадратная матрица порядка N. Необходимо найти найбольшее из значений элементов, расположенных выше главной диагонали.

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


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
srand(time(NULL));
int const n=5;
int arr[n][n];
 
//инициализация массива и вывод на экран
for(int i=0; i<n; i++)
{
 
    for(int j=0; j<n; j++)
    {
        //Выбираем диапазон от 10 до 99, чтобы матрица была ровная
        arr[i][j]=rand()%89+10;
        cout<<arr[i][j]<<"  ";      
    }
    cout<<"\n\n";
}
cout<<"\n";
 
//Находим максимальный элемент в диапазоне, согласно условию "А".
 
//предположим, что максимальный элемент массива - нулевой
int max=arr[0][0];
for(int i=0; i<n; i++)
{
    //Предположим, что максимальный элемент в каждой строке матрицы - нулевой
    int max_str = arr[i][0];
    for(int j=0; j<n; j++)
    {
        
        if(arr[i][j]>max_str) max_str=arr[i][j];
        
    }
 
    //если максимальный элемент каждой строки больше нулевого, то меняем его на действующий
    if(max_str>max) max=max_str;
 
}
cout<<"Найбольший в заданной области - "<<max<<endl;
cout<<"\n";
Добавлено через 3 часа 2 минуты
Я предполагаю, как надо это сделать. Надо чтобы каждую следующую строку проверяла программа с элемента "+1", но реализовать...увы.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.10.2014, 20:56
Ответы с готовыми решениями:

Найти среднее значение элементов матрицы выше главной и обратной диагонали
Вот задание: Дана квадратная матрица целых чисел размером N&lt;=12. Заполнить матрицу случайными...

Матрицы: заполнить случайными числами от 0 до 100, найти среднее значение выше главной и обратной диагонали
Дана квадратная матрица целых чисел размером N&lt;=12. Заполнить матрицу случайными числами от 0 до...

Найти сумму каждой диагонали матрицы выше главной диагонали
Дана матрица n*m, найти сумму каждой диагонали отдельно, выше главной диагонали. Не могу понять...

Найти сумму элементов матрицы, расположенных выше главной диагонали и ниже побочной диагонали
не соображу В среде MS Visual C++ разработать программу, которая формирует матрицу размером n х n...

7
Эксперт CЭксперт С++
5084 / 2269 / 332
Регистрация: 20.02.2013
Сообщений: 5,598
Записей в блоге: 19
19.10.2014, 21:45 2
Вот смотрите. Дана, к примеру, квадратная матрица размером 6х6:

[0][0] [0][1] [0][2] [0][3] [0][4] [0][5]
[1][0] [1][1] [1][2] [1][3] [1][4] [1][5]
[2][0] [2][1] [2][2] [2][3] [2][4] [2][5]
[3][0] [3][1] [3][2] [3][3] [3][4] [3][5]
[4][0] [4][1] [4][2] [4][3] [4][4] [4][5]
[5][0] [5][1] [5][2] [5][3] [5][4] [5][5]

Какую диагональ Вы называете "главной"? Синюю или красную?
0
_Ivana
19.10.2014, 21:48
  #3

Не по теме:

gru74ik, если вы не шутите, то это общепринятый термин линейной алгебры - главная диагональ матрицы.

0
Эксперт CЭксперт С++
5084 / 2269 / 332
Регистрация: 20.02.2013
Сообщений: 5,598
Записей в блоге: 19
19.10.2014, 21:51 4
Загуглил, нашёл. Главная - красная.

Добавлено через 1 минуту
Цитата Сообщение от _Ivana Посмотреть сообщение
gru74ik, если вы не шутите, то это общепринятый термин линейной алгебры - главная диагональ матрицы.
Не шучу. Я - неуч-гуманитарий. Многие базовые вещи узнаю "заново", занимаясь алгеброй вместе со своим сыном-восьмиклассником. Или вот так, как сейчас - мучая гугл.
1
_Ivana
19.10.2014, 21:59
  #5

Не по теме:

gru74ik, тогда не стесняйтесь создавать темы с возможными вопросами - чем можем, поможем. Приятнее помогать человеку, желающему учиться, нежели халявщикам которым только сдать задание чужими руками. Я сам линейную алгебру за ненадобностью забывать начал, вон в соседней теме про пересечение 3d треугольников навскидку наверное не решу, придется подумать с ручкой немного. Кстати, если есть желание - приглашаю подумать над той задачкой, это обещает быть интересным. Вот тема Пересечение треугольников в 3d

0
Эксперт CЭксперт С++
5084 / 2269 / 332
Регистрация: 20.02.2013
Сообщений: 5,598
Записей в блоге: 19
19.10.2014, 23:39 6
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
// Дана квадратная матрица порядка N. Необходимо найти найбольшее
// из значений элементов, расположенных выше главной диагонали.
#include <iostream>
#include <ctime>
#include <cstdlib>
 
void show_matrix(int ** matrix, int matrixSize);
int find_max_above_main_diagonal(int ** matrix, int matrixSize);
 
int main()
{
    std::cout << "Please enter square matrix size: ";
    int n;
    std::cin >> n;
    int ** matrix = new int * [n];
    for (int i=0; i<n; ++i)
        matrix[i] = new int[n];
 
    srand(time(NULL));
    for(int i=0; i<n; ++i)
        for(int j=0; j<n; ++j)
            matrix[i][j] = rand()%89+10;
 
    std::cout << std::endl << std::endl;
 
    show_matrix(matrix, n);
 
    std::cout << "\nThe largest element located above the main diagonal is "
              << find_max_above_main_diagonal(matrix, n)
              << std::endl;
 
    for (int i = 0; i<n; ++i)
        delete [] matrix[i];
    delete [] matrix;
 
    return 0;
}
 
void show_matrix(int ** matrix, int matrixSize)
{
    for (int i=0; i<matrixSize; ++i)
    {
        for (int j=0; j<matrixSize; ++j)
        {
            if (i!=j)
                std::cout << " " << matrix[i][j] << " \t";
            else
                std::cout << "[" << matrix[i][j] << "]\t";
        }
        std::cout << std::endl;
    }
}
 
int find_max_above_main_diagonal(int ** matrix, int matrixSize)
{
    int maxValue = 0;
    for (int i=0; i<matrixSize-1; ++i)
        for (int j=i+1; j<matrixSize; ++j)
            if (maxValue<matrix[i][j])
                maxValue = matrix[i][j];
    return maxValue;
}
1
1 / 1 / 0
Регистрация: 04.01.2014
Сообщений: 13
22.10.2014, 21:42  [ТС] 7
А что надо поменять, чтобы главная диагональ была включена также в поиск?? Заранее, спасибо.
0
Эксперт CЭксперт С++
5084 / 2269 / 332
Регистрация: 20.02.2013
Сообщений: 5,598
Записей в блоге: 19
23.10.2014, 07:55 8
Цитата Сообщение от a1ukard Посмотреть сообщение
А что надо поменять, чтобы главная диагональ была включена также в поиск?
В определении функции find_max_above_main_diagonal() (59-я строка кода) во вложенном цикле for надо поменять
C++
1
for (int j=i+1; j<matrixSize; ++j)
на
C++
1
for (int j=i; j<matrixSize; ++j)
Вот переделанный под новую задачу вариант:
Кликните здесь для просмотра всего текста
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
// Дана квадратная матрица порядка N. Необходимо найти найбольшее
// из значений элементов, расположенных выше главной диагонали.
#include <iostream>
#include <ctime>
#include <cstdlib>
 
void show_matrix(int ** matrix, int matrixSize);
int find_max_above_main_diagonal(int ** matrix, int matrixSize);
 
int main()
{
    std::cout << "Please enter square matrix size: ";
    int n;
    std::cin >> n;
    int ** matrix = new int * [n];
    for (int i=0; i<n; ++i)
        matrix[i] = new int[n];
 
    srand(time(NULL));
    for(int i=0; i<n; ++i)
        for(int j=0; j<n; ++j)
            matrix[i][j] = rand()%89+10;
 
    std::cout << std::endl << std::endl;
 
    show_matrix(matrix, n);
 
    std::cout << "\nThe largest element located above the main diagonal\n"
              << " (including elements of main diagonal) is "
              << find_max_above_main_diagonal(matrix, n)
              << std::endl;
 
    for (int i = 0; i<n; ++i)
        delete [] matrix[i];
    delete [] matrix;
 
    return 0;
}
 
void show_matrix(int ** matrix, int matrixSize)
{
    for (int i=0; i<matrixSize; ++i)
    {
        for (int j=0; j<matrixSize; ++j)
        {
            if (i!=j)
                std::cout << " " << matrix[i][j] << " \t";
            else
                std::cout << "[" << matrix[i][j] << "]\t";
        }
        std::cout << std::endl;
    }
}
 
int find_max_above_main_diagonal(int ** matrix, int matrixSize)
{
    int maxValue = 0;
    for (int i=0; i<matrixSize-1; ++i)
        for (int j=i; j<matrixSize; ++j)
            if (maxValue<matrix[i][j])
                maxValue = matrix[i][j];
    return maxValue;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.10.2014, 07:55
Помогаю со студенческими работами здесь

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

Найти наименьшее число не выше главной диагонали матрицы
нужно из этого массива найти наименьшее число ниже главной диагонали (включая главную). Найти...

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

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


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

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

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