Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/14: Рейтинг темы: голосов - 14, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 17.09.2009
Сообщений: 5
1

Найти min и max матрицы

17.09.2009, 12:31. Просмотров 2636. Ответов 18
Метки нет (Все метки)

Допоможіть розвязати задачу на С++.Задана квадратна матриця А=(Aij)i=1,...4;j=1,...4.Знайти min i max цієї матриці.
Перевод:
Помогите решить задачу на с++. Задана квадратная матрица А=(Aij)i=1,...4;j=1,...4., найти min и max этой матрицы
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.09.2009, 12:31
Ответы с готовыми решениями:

Найти max и min, если min левее max, то среднее арифметическое между ними
#include <iostream.h> #include <stdio.h> #include <conio.h> #include <math.h> void main() {...

Найти max, min ниже главной диагонали матрицы
Найти max, min ниже главной диагонали. Помогитее)!

Найти суму недиагональных элементов квадратной матрицы. Среди них найти max min значения
#include <iostream> #include <ctime> using namespace std; void main() { setlocale(0,...

Найти min по каждой строке матрицы и max по каждому столбцу
Вводится порядок квадратной матрицы n. Вводятся элементы квадратной матрицы построчно. Необходимо...

18
3 / 3 / 0
Регистрация: 23.03.2009
Сообщений: 36
17.09.2009, 13:00 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];
}
0
Эксперт JavaЭксперт С++
8360 / 3581 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
17.09.2009, 13:06 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?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10842 / 6681 / 1614
Регистрация: 25.07.2009
Сообщений: 12,446
17.09.2009, 13:22 4
Цитата Сообщение от M128K145 Посмотреть сообщение
а если я введу матрицу со значениями все больше 1000, тогда что? Или все меньше 0?
C
1
2
3
4
5
#include <limits.h>
...
min = INT_MAX;
max = INT_MIN;
...
0
Эксперт JavaЭксперт С++
8360 / 3581 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
17.09.2009, 13:26 5
easybudda, посмотри 6 строку моего кода
0
2920 / 841 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
17.09.2009, 13:26 6
Цитата Сообщение от M128K145 Посмотреть сообщение
а если я введу матрицу со значениями все больше 1000, тогда что? Или все меньше 0?
для этого я обычно делаю так
C++
1
2
3
min=a[0][0];
max=a[0][0];
for .. ...
а вообще на любителя кому что нравится
0
Эксперт JavaЭксперт С++
8360 / 3581 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
17.09.2009, 13:31 7
mamedovvms, вариант хороший, но он отлично подходит для одномерных массивов. Иначе в твоем варианте идет на первой итерации сравнение себя с собой. Так что лучше инициализировать как минимальное и максимальное значение типа
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10842 / 6681 / 1614
Регистрация: 25.07.2009
Сообщений: 12,446
17.09.2009, 13:31 8
M128K145, я в том смысле - в с++ limits.h не нужно включать? (ну или <climits> какой-нибудь) в с не работало бы...

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

PS я не жадный, я экономный
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10842 / 6681 / 1614
Регистрация: 25.07.2009
Сообщений: 12,446
17.09.2009, 13:39 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 Извините, погорячился
0
2920 / 841 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
17.09.2009, 13:45 11
Цитата Сообщение от M128K145 Посмотреть сообщение
mamedovvms, вариант хороший, но он отлично подходит для одномерных массивов. Иначе в твоем варианте идет на первой итерации сравнение себя с собой. Так что лучше инициализировать как минимальное и максимальное значение типа
ну а если у тебя будет первый элемент равен int_max или int_min, что тогда, да ничего тоже самое и в моем случае, там же идет только сравнение и никакого присваивания, так что все нормально, я не раз так делал, и все нормально работает
0
Эксперт JavaЭксперт С++
8360 / 3581 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
17.09.2009, 13:52 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 и экономился бы один проход цикла. А здесь первый проход впустую, поэтому я так и сказал, чтобы это сравнение не было пустым и не было так обидно
0
2920 / 841 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
17.09.2009, 13:57 13
зато если у тебя все элементы будут одинаковы то при использовании моего кода не будет ни одной операции присвоение в цикле в отличие если использовать твой код )))
0
81 / 81 / 6
Регистрация: 14.09.2009
Сообщений: 252
17.09.2009, 13:58 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 присвоение лишнее))))
0
2920 / 841 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
17.09.2009, 14:03 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]; // на первой итерации есть присвоение. в первом варианте - нет) }
вот как раз в первом варианте будет присваивание а во втором нет
0
81 / 81 / 6
Регистрация: 14.09.2009
Сообщений: 252
17.09.2009, 14:06 16
mamedovvms, я про это и говорю - только не на 2 а на 1. Одно из 2-х условий не выполняется...

Добавлено через 1 минуту
mamedovvms, первый вариант - это твой) я их считаю с поста M128K145, где оба варианта приведены)
0
2920 / 841 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
17.09.2009, 14:12 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;
}
0
81 / 81 / 6
Регистрация: 14.09.2009
Сообщений: 252
17.09.2009, 14:25 18
mamedovvms, Опаньки) и правда - 2) Ну, собсна я сразу говорил что твое эффективнее) просто не учел что сравнение с минимальным значением тоже присвоит...

Добавлено через 1 минуту
PS хорошо, если тока присвоение, а если по каждому условию 100500 строк кода))
0
2920 / 841 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
17.09.2009, 14:35 19
ну тогда конечно
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.09.2009, 14:35

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

В каждой строке матрицы найти min и max, поменять местами
Условие: В каждой строке матрицы A=(aij)mxn найти максимальный и минимальный элементы. Сформировать...

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

Найти min и max элементы на главной диагонали матрицы и поменять местами соответствующие столбцы
Составить программу поиска минимального и максимального элементов массива расположенных на главной...

Найти сумму элементов той строки матрицы, в которой разница между max и min элементами максимальна
Дана вещественная, квадратная матрица порядка N. Найти сумму элементов той строки в которой разница...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.