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

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

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

Студворк — интернет-сервис помощи студентам
Допоможіть розвязати задачу на С++.Задана квадратна матриця А=(Aij)i=1,...4;j=1,...4.Знайти min i max цієї матриці.
Перевод:
Помогите решить задачу на с++. Задана квадратная матрица А=(Aij)i=1,...4;j=1,...4., найти min и max этой матрицы
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.09.2009, 12:31
Ответы с готовыми решениями:

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

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

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

18
3 / 3 / 0
Регистрация: 23.03.2009
Сообщений: 38
17.09.2009, 13:00
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Эксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
17.09.2009, 13:06
Вот
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Эксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
17.09.2009, 13:22
Цитата Сообщение от M128K145 Посмотреть сообщение
а если я введу матрицу со значениями все больше 1000, тогда что? Или все меньше 0?
C
1
2
3
4
5
#include <limits.h>
...
min = INT_MAX;
max = INT_MIN;
...
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
17.09.2009, 13:26
easybudda, посмотри 6 строку моего кода
0
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
17.09.2009, 13:26
Цитата Сообщение от M128K145 Посмотреть сообщение
а если я введу матрицу со значениями все больше 1000, тогда что? Или все меньше 0?
для этого я обычно делаю так
C++
1
2
3
min=a[0][0];
max=a[0][0];
for .. ...
а вообще на любителя кому что нравится
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
17.09.2009, 13:31
mamedovvms, вариант хороший, но он отлично подходит для одномерных массивов. Иначе в твоем варианте идет на первой итерации сравнение себя с собой. Так что лучше инициализировать как минимальное и максимальное значение типа
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
17.09.2009, 13:31
M128K145, я в том смысле - в с++ limits.h не нужно включать? (ну или <climits> какой-нибудь) в с не работало бы...

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

PS я не жадный, я экономный
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
17.09.2009, 13:39
а и действительно никакого 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
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
17.09.2009, 13:45
Цитата Сообщение от M128K145 Посмотреть сообщение
mamedovvms, вариант хороший, но он отлично подходит для одномерных массивов. Иначе в твоем варианте идет на первой итерации сравнение себя с собой. Так что лучше инициализировать как минимальное и максимальное значение типа
ну а если у тебя будет первый элемент равен int_max или int_min, что тогда, да ничего тоже самое и в моем случае, там же идет только сравнение и никакого присваивания, так что все нормально, я не раз так делал, и все нормально работает
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
17.09.2009, 13:52
Цитата Сообщение от 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
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
17.09.2009, 13:57
зато если у тебя все элементы будут одинаковы то при использовании моего кода не будет ни одной операции присвоение в цикле в отличие если использовать твой код )))
0
81 / 81 / 6
Регистрация: 14.09.2009
Сообщений: 252
17.09.2009, 13:58
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
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
17.09.2009, 14:03
да и вообще в твоем коде присваивание происходит на две операции больше раз, так как в начале цикла минимальный и максимальный все равно присваиваются первому элементу, так что получается что у меня даже как бы эффективнее

Добавлено через 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
mamedovvms, я про это и говорю - только не на 2 а на 1. Одно из 2-х условий не выполняется...

Добавлено через 1 минуту
mamedovvms, первый вариант - это твой) я их считаю с поста M128K145, где оба варианта приведены)
0
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
17.09.2009, 14:12
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от 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
mamedovvms, Опаньки) и правда - 2) Ну, собсна я сразу говорил что твое эффективнее) просто не учел что сравнение с минимальным значением тоже присвоит...

Добавлено через 1 минуту
PS хорошо, если тока присвоение, а если по каждому условию 100500 строк кода))
0
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
17.09.2009, 14:35
ну тогда конечно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.09.2009, 14:35
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru