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

Найти min и max матрицы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Ernest
0 / 0 / 0
Регистрация: 17.09.2009
Сообщений: 5
17.09.2009, 12:31     Найти min и max матрицы #1
Допоможіть розвязати задачу на С++.Задана квадратна матриця А=(Aij)i=1,...4;j=1,...4.Знайти min i max цієї матриці.
Перевод:
Помогите решить задачу на с++. Задана квадратная матрица А=(Aij)i=1,...4;j=1,...4., найти min и max этой матрицы
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2009, 12:31     Найти min и max матрицы
Посмотрите здесь:

C++ В каждой строке матрицы найти min и max, поменять местами
Найти сумму элементов той строки матрицы, в которой разница между max и min элементами максимальна C++
Определить max и min элементы матрицы C++
C++ Найти max {min (a, b), min (c, d)}.
Найти y=max(a,b,c,d)*min(a,b,c,d) C++
ошибка в нахождении max и min значений в строке матрицы C++
Поменять столбцы матрицы с min и max элементами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vadyxa
3 / 3 / 1
Регистрация: 23.03.2009
Сообщений: 36
17.09.2009, 13:00     Найти min и max матрицы #2
C++
1
2
3
4
5
6
7
8
int min(100), max(0);
 
for(int i=1,i<=4, i++)
for(int j=1,j<=4,j++)
{
if(A[i][j]>max) max = A[i][j];
if(A[i][j]<min) min = A[i][j];
}
M128K145
Эксперт C++
 Аватар для M128K145
8276 / 3495 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
17.09.2009, 13:06     Найти min и max матрицы #3
Вот
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
#include <iostream>
int main()
{
    setlocale(LC_ALL, "Russian");
    const int n(4);
    int matr[n][n], i, j, min(INT_MAX), max(INT_MIN);
    std::cout<<"Введите матрицу:\n";
    for (i = 0; i < n; ++i)
        for(j = 0; j < n; ++j)
            std::cin>>matr[i][j];
    system("cls");
    std::cout<<"Введенная матрица:\n";
    for (i = 0; i < n; ++i, std::cout<<'\n')
        for(j = 0; j < n; ++j)
            std::cout<<matr[i][j]<<' ';
    for (i = 0; i < n; ++i)
        for(j = 0; j < n; ++j)
        {
            if(matr[i][j] > max)
                max = matr[i][j];
            if(matr[i][j] < min)
                min = matr[i][j];
        }
    std::cout<<"Максимальный элемент матрицы:\t"<<max;
    std::cout<<"\nМинимальный элемент матрицы:\t"<<min<<std::endl;
    system("pause");
    return 0;
}


Добавлено через 1 минуту
vadyxa, а если я введу матрицу со значениями все больше 1000, тогда что? Или все меньше 0?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9382 / 5432 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
17.09.2009, 13:22     Найти min и max матрицы #4
Цитата Сообщение от M128K145 Посмотреть сообщение
а если я введу матрицу со значениями все больше 1000, тогда что? Или все меньше 0?
C
1
2
3
4
5
#include <limits.h>
...
min = INT_MAX;
max = INT_MIN;
...
M128K145
Эксперт C++
 Аватар для M128K145
8276 / 3495 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
17.09.2009, 13:26     Найти min и max матрицы #5
easybudda, посмотри 6 строку моего кода
mamedovvms
2915 / 836 / 93
Регистрация: 30.04.2009
Сообщений: 2,614
17.09.2009, 13:26     Найти min и max матрицы #6
Цитата Сообщение от M128K145 Посмотреть сообщение
а если я введу матрицу со значениями все больше 1000, тогда что? Или все меньше 0?
для этого я обычно делаю так
C++
1
2
3
min=a[0][0];
max=a[0][0];
for .. ...
а вообще на любителя кому что нравится
M128K145
Эксперт C++
 Аватар для M128K145
8276 / 3495 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
17.09.2009, 13:31     Найти min и max матрицы #7
mamedovvms, вариант хороший, но он отлично подходит для одномерных массивов. Иначе в твоем варианте идет на первой итерации сравнение себя с собой. Так что лучше инициализировать как минимальное и максимальное значение типа
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9382 / 5432 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
17.09.2009, 13:31     Найти min и max матрицы #8
M128K145, я в том смысле - в с++ limits.h не нужно включать? (ну или <climits> какой-нибудь) в с не работало бы...

mamedovvms, я этого не говорил!
GAV_13
81 / 81 / 4
Регистрация: 14.09.2009
Сообщений: 252
17.09.2009, 13:38     Найти min и max матрицы #9
Цитата Сообщение от M128K145 Посмотреть сообщение
mamedovvms, вариант хороший, но он отлично подходит для одномерных массивов. Иначе в твоем варианте идет на первой итерации сравнение себя с собой.
А чем плохо? сравнение происходит, присвоения - нет) В твоем варианте - на первой итерации ты уже присваиваешь) +1 операция.

PS я не жадный, я экономный
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9382 / 5432 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
17.09.2009, 13:39     Найти min и max матрицы #10
а и действительно никакого limits.h не нужно включать, и так работает...
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
int main(){
    int imax(INT_MAX);
    int imin(INT_MIN);
    
    std::cout << "Max int: " << imax << "\tMin int: " << imin << std::endl;
    return(0);
}
M128K145 Извините, погорячился
mamedovvms
2915 / 836 / 93
Регистрация: 30.04.2009
Сообщений: 2,614
17.09.2009, 13:45     Найти min и max матрицы #11
Цитата Сообщение от M128K145 Посмотреть сообщение
mamedovvms, вариант хороший, но он отлично подходит для одномерных массивов. Иначе в твоем варианте идет на первой итерации сравнение себя с собой. Так что лучше инициализировать как минимальное и максимальное значение типа
ну а если у тебя будет первый элемент равен int_max или int_min, что тогда, да ничего тоже самое и в моем случае, там же идет только сравнение и никакого присваивания, так что все нормально, я не раз так делал, и все нормально работает
M128K145
Эксперт C++
 Аватар для M128K145
8276 / 3495 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
17.09.2009, 13:52     Найти min и max матрицы #12
Цитата Сообщение от GAV_13 Посмотреть сообщение
А чем плохо? сравнение происходит, присвоения - нет) В твоем варианте - на первой итерации ты уже присваиваешь) +1 операция.
А вот почему:
C++
1
2
3
4
5
6
7
8
9
10
        int matr[n][n], i, j, min(INT_MAX), max(INT_MIN);//два присвоения
        /* код */
        for (i = 0; i < n; ++i)//идет полная проверка
                for(j = 0; j < n; ++j)
                {
                        if(matr[i][j] > max)
                                max = matr[i][j];
                        if(matr[i][j] < min)
                                min = matr[i][j];
                }
C++
1
2
3
4
5
6
7
8
9
10
11
12
        int matr[n][n], i, j;
        /* код */
        min=a[0][0];//по количеству присвоений
        max=a[0][0];//сравнялись, здесь тоже два
        for (i = 0; i < n; ++i)//идет полная проверка
                for(j = 0; j < n; ++j)
                {
                        if(matr[i][j] > max)
                                max = matr[i][j];
                        if(matr[i][j] < min)
                                min = matr[i][j];
                }
Я не сказал, что плохо! Да и количество операций одинаково. Но суть присвоения первого элемента в том, чтоб меньше проходить элементов! В одномерном массиве индексация начиналась бы не с 0, а с 1 и экономился бы один проход цикла. А здесь первый проход впустую, поэтому я так и сказал, чтобы это сравнение не было пустым и не было так обидно
mamedovvms
2915 / 836 / 93
Регистрация: 30.04.2009
Сообщений: 2,614
17.09.2009, 13:57     Найти min и max матрицы #13
зато если у тебя все элементы будут одинаковы то при использовании моего кода не будет ни одной операции присвоение в цикле в отличие если использовать твой код )))
GAV_13
81 / 81 / 4
Регистрация: 14.09.2009
Сообщений: 252
17.09.2009, 13:58     Найти min и max матрицы #14
C++
1
2
3
4
5
6
7
8
9
10
11
12
 int matr[n][n], i, j;
        /* код */
        min=a[0][0];//по количеству присвоений
        max=a[0][0];//сравнялись, здесь тоже два
        for (i = 0; i < n; ++i)//идет полная проверка
                for(j = 0; j < n; ++j)
                {
                        if(matr[i][j] > max)
                                max = matr[i][j]; // на первой итерации есть присвоение. в первом варианте - нет)
                        if(matr[i][j] < min)
                                min = matr[i][j]; // на первой итерации есть присвоение. в первом варианте - нет)
                }
итого 1 присвоение лишнее))))
mamedovvms
2915 / 836 / 93
Регистрация: 30.04.2009
Сообщений: 2,614
17.09.2009, 14:03     Найти min и max матрицы #15
да и вообще в твоем коде присваивание происходит на две операции больше раз, так как в начале цикла минимальный и максимальный все равно присваиваются первому элементу, так что получается что у меня даже как бы эффективнее

Добавлено через 2 минуты
Цитата Сообщение от GAV_13 Посмотреть сообщение
int matr[n][n], i, j; /* код */ min=a[0][0];//по количеству присвоений max=a[0][0];//сравнялись, здесь тоже два for (i = 0; i < n; ++i)//идет полная проверка for(j = 0; j < n; ++j) { if(matr[i][j] > max) max = matr[i][j]; // на первой итерации есть присвоение. в первом варианте - нет) if(matr[i][j] < min) min = matr[i][j]; // на первой итерации есть присвоение. в первом варианте - нет) }
вот как раз в первом варианте будет присваивание а во втором нет
GAV_13
81 / 81 / 4
Регистрация: 14.09.2009
Сообщений: 252
17.09.2009, 14:06     Найти min и max матрицы #16
mamedovvms, я про это и говорю - только не на 2 а на 1. Одно из 2-х условий не выполняется...

Добавлено через 1 минуту
mamedovvms, первый вариант - это твой) я их считаю с поста M128K145, где оба варианта приведены)
mamedovvms
2915 / 836 / 93
Регистрация: 30.04.2009
Сообщений: 2,614
17.09.2009, 14:12     Найти min и max матрицы #17
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от GAV_13 Посмотреть сообщение
только не на 2 а на 1.
нет ты не прав именно на 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
#include <iostream>
int main()
{
        setlocale(LC_ALL, "Russian");
        const int n(4);
        int matr[n][n], i, j,min,max; //(INT_MAX), max(INT_MIN);
        std::cout<<"Введите матрицу:\n";
        for (i = 0; i < n; ++i)
                for(j = 0; j < n; ++j)
                        std::cin>>matr[i][j];
        system("cls");
        std::cout<<"Введенная матрица:\n";
        for (i = 0; i < n; ++i, std::cout<<'\n')
                for(j = 0; j < n; ++j)
                        std::cout<<matr[i][j]<<' ';
        int kol=0;
        min=matr[0][0];
        max=matr[0][0];
        for (i = 0; i < n; ++i)
                for(j = 0; j < n; ++j)
                {
                        if(matr[i][j] > max){
                                kol++;      
                                max = matr[i][j];}
                        if(matr[i][j] < min){
                                      kol++;
                                min = matr[i][j];}
                }
        std::cout<<"Максимальный элемент матрицы:\t"<<max;
        std::cout<<"\nМинимальный элемент матрицы:\t"<<min<<std::endl;
        std::cout<<kol;
        system("pause");
        return 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
#include <iostream>
int main()
{
        setlocale(LC_ALL, "Russian");
        const int n(4);
        int matr[n][n], i, j, min(INT_MAX), max(INT_MIN);
        std::cout<<"Введите матрицу:\n";
        for (i = 0; i < n; ++i)
                for(j = 0; j < n; ++j)
                        std::cin>>matr[i][j];
        system("cls");
        std::cout<<"Введенная матрица:\n";
        for (i = 0; i < n; ++i, std::cout<<'\n')
                for(j = 0; j < n; ++j)
                        std::cout<<matr[i][j]<<' ';
        int kol=0;
        for (i = 0; i < n; ++i)
                for(j = 0; j < n; ++j)
                {
                        if(matr[i][j] > max){
                                kol++;      
                                max = matr[i][j];}
                        if(matr[i][j] < min){
                                      kol++;
                                min = matr[i][j];}
                }
        std::cout<<"Максимальный элемент матрицы:\t"<<max;
        std::cout<<"\nМинимальный элемент матрицы:\t"<<min<<std::endl;
        std::cout<<kol;
        system("pause");
        return 0;
}
GAV_13
81 / 81 / 4
Регистрация: 14.09.2009
Сообщений: 252
17.09.2009, 14:25     Найти min и max матрицы #18
mamedovvms, Опаньки) и правда - 2) Ну, собсна я сразу говорил что твое эффективнее) просто не учел что сравнение с минимальным значением тоже присвоит...

Добавлено через 1 минуту
PS хорошо, если тока присвоение, а если по каждому условию 100500 строк кода))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2009, 14:35     Найти min и max матрицы
Еще ссылки по теме:

В каждом столбце матрицы найти min элемент, а потом среди найденных мин значений найти max значение C++
C++ Среднее арифметическое min и max элементов матрицы
Найти min по каждой строке матрицы и max по каждому столбцу C++
Найти сумму max элементов столбцов, и номер строки, в которой находится элемент матрицы с min значением C++
Найти min(max(x, y), max(x, z), max(z, d) C++

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

Или воспользуйтесь поиском по форуму:
mamedovvms
2915 / 836 / 93
Регистрация: 30.04.2009
Сообщений: 2,614
17.09.2009, 14:35     Найти min и max матрицы #19
ну тогда конечно
Yandex
Объявления
17.09.2009, 14:35     Найти min и max матрицы
Ответ Создать тему
Опции темы

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