0 / 0 / 2
Регистрация: 28.04.2016
Сообщений: 58

Найти максимальные элементы главной и побочной диагоналей матрицы и поменять их местами

28.04.2016, 18:38. Показов 2759. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дана матрица nxn. Найти максимальные элементы главной и побочной диагоналей матрицы и поменять их местами.
Нашел максимальные элементы, но не могу поменять их местами.
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
#include <stdio.h>
 
int main(int argc, const char * argv[])
{
    int i, j, n, m, b[30][30], maxg, maxp;
    do{
        printf("vvedite kol-vo strok (<30)\n");
        scanf("%d", &n);
        printf("vvedite kol-vo stolbcov matrici (<30)\n");
        scanf("%d", &m);
    }while (n >= 30 || m >= 30);
    for(i = 0; i < n; i++)
        for(j = 0; j < m; j++)
        {
            printf("vvedite element [%d, %d]\n", i + 1, j + 1);
            scanf("%d", &b[i][j]);
        }
    
    maxp = b[0][n-1];
    for(i = 0; i < n; i++)
        if(b[i][n-1-i] > maxp)
            maxp = b[i][n-1-i];
     printf("max el pb diag = %.d\n", maxp);
    
    maxg = b[0][0];
    for (i = 0; i < n; i++)
        if(b[i][i] > maxg)
            maxg = b[i][i];
    printf("max el gl diag = %.d\n", maxg);
    printf("MATRICA\n");
    for(i = 0; i < n; i++)
    {
        for(j = 0; j < m; j++)
            printf("%.d ", b[i][j]);
        printf("\n");
    }
 
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.04.2016, 18:38
Ответы с готовыми решениями:

Поменять местами элементы главной и побочной диагоналей матрицы
помогите пожайлуста. Поменять местами элементы главной и побочной диагоналей матрицы. делал так, но не работает, просто выдаёт...

7*7 вещественный Поменять местами элементы главной и побочной диагоналей матрицы
7*7 вещественный Поменять местами элементы главной и побочной диагоналей матрицы.

Поменять местами элементы главной и побочной диагоналей, симметричные относительно центра матрицы
Задана квадратичная матрица размером nxn поменять местами элементы главной и побочной диагоналей симметричные относительно центра...

14
 Аватар для Соловьёв_Егор
60 / 60 / 53
Регистрация: 17.02.2013
Сообщений: 242
28.04.2016, 19:25
Запомнить номера строк, в которых находятся максимальные элементы. У максимального элемента главной диагонали он будет равен номеру столбца, а у побочное - порядок матрицы минус номер столбца и минус один. Отсюда выразите номер столбца и дальше функция swap() или обмен значениями с использованием вспомогательной переменной.
0
0 / 0 / 2
Регистрация: 28.04.2016
Сообщений: 58
28.04.2016, 20:11  [ТС]
Я их запомнил
C++
1
2
3
4
5
6
7
8
9
10
11
maxp = b[0][n-1];
    for(i = 0; i < n; i++)
        if(b[i][n-1-i] > maxp)
            maxp = b[i][n-1-i];
     printf("max el pb diag = %.d\n", maxp);
    
    maxg = b[0][0];
    for (i = 0; i < n; i++)
        if(b[i][i] > maxg)
            maxg = b[i][i];
    printf("max el gl diag = %.d\n", maxg);
, а вот как дальше - не знаю. Можете показать, как делать с помощью функции или обмена?
0
 Аватар для Соловьёв_Егор
60 / 60 / 53
Регистрация: 17.02.2013
Сообщений: 242
28.04.2016, 21:04
Переменные pMax и gMax объявить не забудьте. Вот вы запомнили номер строки того и другого масимального элемента. Теперь функцией swap() меняете их значения местами.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
maxp = b[0][n-1];
    for(i = 0; i < n; i++)
        if(b[i][n-1-i] > maxp){
            maxp = b[i][n-1-i];
            pMax=i;
        }
     printf("max el pb diag = %.d\n", maxp);
    
    maxg = b[0][0];
    for (i = 0; i < n; i++)
        if(b[i][i] > maxg){
            maxg = b[i][i];
            gMax=i;
        }
    printf("max el gl diag = %.d\n", maxg);
 
    swap(b[gMax][gMax], b[pMax][n-1-pMax]);
1
0 / 0 / 2
Регистрация: 28.04.2016
Сообщений: 58
29.04.2016, 22:05  [ТС]
а можете продемонстрировать способ с обменом, а то что-то не совсем понятно с функцией.
0
 Аватар для Соловьёв_Егор
60 / 60 / 53
Регистрация: 17.02.2013
Сообщений: 242
29.04.2016, 22:41
C++
1
2
3
4
int temp;
temp=b[gMax][gMax];
b[gMax][gMax]=b[pMax][n-1-pMax];
b[pMax][n-1-pMax]=temp;
0
0 / 0 / 2
Регистрация: 28.04.2016
Сообщений: 58
29.04.2016, 23:09  [ТС]
вот такой код в итоге, но не меняется. Или это с выводом проблемы?
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
#include <stdio.h>
 
int main(int argc, const char * argv[])
{
    int i, j, n, m, b[30][30], maxg, maxp;
    do{
        printf("vvedite kol-vo strok (<30)\n");
        scanf("%d", &n);
        printf("vvedite kol-vo stolbcov matrici (<30)\n");
        scanf("%d", &m);
    }while (n >= 30 || m >= 30);
    for(i = 0; i < n; i++)
        for(j = 0; j < m; j++)
        {
            printf("vvedite element [%d, %d]\n", i + 1, j + 1);
            scanf("%d", &b[i][j]);
        }
    
    maxp = b[0][n-1];
    for(i = 0; i < n; i++)
        if(b[i][n-1-i] > maxp)
            maxp = b[i][n-1-i];
     printf("max el pb diag = %.d\n", maxp);
    
    maxg = b[0][0];
    for (i = 0; i < n; i++)
        if(b[i][i] > maxg)
            maxg = b[i][i];
    printf("max el gl diag = %.d\n", maxg);
    printf("MATRICA\n");
    for(i = 0; i < n; i++)
    {
        for(j = 0; j < m; j++)
            printf("%.d ", b[i][j]);
        printf("\n");
    }
    
    int temp;
    temp=b[maxg][maxg];
    b[maxg][maxg]=b[maxp][n-1-maxp];
    b[maxp][n-1-maxp]=temp;
 
    printf("MATRICA\n");
    for(i = 0; i < n; i++)
    {
        for(j = 0; j < m; j++)
            printf("%.d ", b[i][j]);
        printf("\n");
    }
    return 0;
}
0
 Аватар для Соловьёв_Егор
60 / 60 / 53
Регистрация: 17.02.2013
Сообщений: 242
29.04.2016, 23:12
Посмотрите на мой код. Я не только запоминаю максимальное и минимальное значение, но и номер строки, в которой они располагаются. А при замене в качестве индексов я использую выражения с номерами строк.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
maxp = b[0][n-1];
    for(i = 0; i < n; i++)
        if(b[i][n-1-i] > maxp){
            maxp = b[i][n-1-i];
            pMax=i;
        }
     printf("max el pb diag = %.d\n", maxp);
    
    maxg = b[0][0];
    for (i = 0; i < n; i++)
        if(b[i][i] > maxg){
            maxg = b[i][i];
            gMax=i;
        }
    printf("max el gl diag = %.d\n", maxg);
 
int temp;
temp=b[gMax][gMax];
b[gMax][gMax]=b[pMax][n-1-pMax];
b[pMax][n-1-pMax]=temp;
0
0 / 0 / 2
Регистрация: 28.04.2016
Сообщений: 58
29.04.2016, 23:27  [ТС]
Да, точно. Я невнимательно прочитал ваш код в первый раз. Спасибо большое.

Добавлено через 6 минут
А вот если я захочу поменять местами максимальные и минимальные элементы в каждой строке, это так же делается?! Только цикл будет вот таким?!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
max = b[0][0];
    for(i = 0; i < n; i++)
for(j = 0; j < m; j++)
        if(b[i][j] > max){
            max = b[i][j];
            Max=i;
        }
     printf("max el  = %.d\n", max);
    
    min = b[0][0];
    for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
        if(b[i][j] < min){
            min = b[i][j];
            Min=i;
        }
    printf("min el = %.d\n", min);
0
 Аватар для Соловьёв_Егор
60 / 60 / 53
Регистрация: 17.02.2013
Сообщений: 242
30.04.2016, 08:15
Вообще, поиск элементов можно было в один цикл поместить.
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
#include <iostream>
#include <clocale>
#include <cstdio>
#include <climits>
 
using namespace std;
 
int main(int argc, const char * argv[]){
    setlocale(LC_ALL, "RUSSIAN");
    int n, m, b[30][30], maxg=INT_MIN, maxp=INT_MIN, pMax, gMax, temp;
 
    do{
        cout<<"Введите количество строк (<30): ";
        cin>>n;
        cout<<"Введите количество столбцов (<30): ";
        cin>>m;
    }while ((n >= 30) || (m >= 30));
 
    cout<<"\n";
 
    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++){
            cout<<"Введите элемент ["<<i + 1<<"]["<< j + 1<<"]: ";
            cin>>b[i][j];
        }
 
    for(int i = 0; i < n; i++){
        if(b[i][n-1-i] > maxp){
            maxp = b[i][n-1-i];
            pMax=i;
        }
 
        if(b[i][i] > maxg){
            maxg = b[i][i];
            gMax=i;
        }
    }
 
    cout<<"\nМаксимальный элемент побочной диагонали = "<<maxp<<".";
    cout<<"\nМаксимальный элемент главной диагонали = "<<maxg<<".\n";
 
    cout<<"\nВывод матрицы:\n";
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            cout.width(4);
            cout<<b[i][j];
        }
        cout<<"\n";
    }
 
    temp=b[gMax][gMax];
    b[gMax][gMax]=b[pMax][n-1-pMax];
    b[pMax][n-1-pMax]=temp;
 
    cout<<"\nВывод матрицы:\n";
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            cout.width(4);
            cout<<b[i][j];
        }
        cout<<"\n";
    }
 
    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
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
#include <iostream>
#include <clocale>
#include <cstdio>
#include <climits>
 
using namespace std;
 
int main(int argc, const char * argv[]){
    setlocale(LC_ALL, "RUSSIAN");
    int n, m, b[30][30], maximum, minimum, minIndex, maxIndex, temp;
 
    do{
        cout<<"Введите количество строк (<30): ";
        cin>>n;
        cout<<"Введите количество столбцов (<30): ";
        cin>>m;
    }while ((n >= 30) || (m >= 30));
 
    cout<<"\n";
 
    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++){
            cout<<"Введите элемент ["<<i + 1<<"]["<< j + 1<<"]: ";
            cin>>b[i][j];
        }
 
    cout<<"\nВывод матрицы:\n";
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            cout.width(4);
            cout<<b[i][j];
        }
        cout<<"\n";
    }
 
    for(int i = 0; i < n; i++){
        maximum=INT_MIN;
        minimum=INT_MAX;
 
        for(int j=0; j<m; j++){
            if(b[i][j] > maximum){
                maximum = b[i][j];
                maxIndex=j;
            }else if(b[i][j] < minimum){
                minimum = b[i][j];
                minIndex=j;
            }
        }
 
        cout<<"\nМаксимальный элемент строки = "<<maximum<<".";
        cout<<"\nМинимальный элемент строки = "<<minimum<<".\n";
 
        temp=b[i][maxIndex];
        b[i][maxIndex]=b[i][minIndex];
        b[i][minIndex]=temp;
    }
 
    cout<<"\nВывод матрицы:\n";
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            cout.width(4);
            cout<<b[i][j];
        }
        cout<<"\n";
    }
 
    return 0;
}
Добавлено через 2 минуты
В вашем коде будут сохранены только максимальное и минимальное значения последней строки. Нужно в одном цикле всё делать.
1
0 / 0 / 2
Регистрация: 28.04.2016
Сообщений: 58
30.04.2016, 08:27  [ТС]
Спасибо большое. А что вот этот оператор делает?
C++
1
cout.width(4);
0
 Аватар для Соловьёв_Егор
60 / 60 / 53
Регистрация: 17.02.2013
Сообщений: 242
30.04.2016, 08:29
itema, устанавливает ширину поля вывода. Аналогично:
C
1
printf("%4i");
1
0 / 0 / 2
Регистрация: 28.04.2016
Сообщений: 58
02.05.2016, 21:42  [ТС]
Спасибо большое.
0
 Аватар для Соловьёв_Егор
60 / 60 / 53
Регистрация: 17.02.2013
Сообщений: 242
02.05.2016, 21:46
Не совсем понял, что вы имеете в виду. Для чего оттуда убирать INT_MIN и INT_MAX? b[0][0] не выходит потому, что он располагается в первой строке, а менять нужно элементы каждой строки.
0
0 / 0 / 2
Регистрация: 28.04.2016
Сообщений: 58
03.05.2016, 15:58  [ТС]
Да, разобрался с этим. Только почему-то не всегда правильно работает прога. vvedite kolichestvo stork (<30): 3

vvedite kolichestvo stolbcov (<30): 3
vvedite element [1, 1] : 3
vvedite element [1, 2] : 6
vvedite element [1, 3] : 4
vvedite element [2, 1] : 8
vvedite element [2, 2] : 6
vvedite element [2, 3] : 5
vvedite element [3, 1] : 6
vvedite element [3, 2] : 9
vvedite element [3, 3] : 5
summa elementov glavnoi diagonali = 14

MATRIX
3 6 4
8 6 5
6 9 5

max element stroki = 6
min element stroki = 3
max element stroki = 8
min element stroki = 5
max element stroki = 9
min element stroki = 5
MATRIX
6 3 4
8 5 6
6 5 9
Не правильно меняются элементы второй строки.

Добавлено через 39 секунд
Да, разобрался с этим. Только почему-то не всегда правильно работает прога. vvedite kolichestvo stork (<30): 3

vvedite kolichestvo stolbcov (<30): 3
vvedite element [1, 1] : 3
vvedite element [1, 2] : 6
vvedite element [1, 3] : 4
vvedite element [2, 1] : 8
vvedite element [2, 2] : 6
vvedite element [2, 3] : 5
vvedite element [3, 1] : 6
vvedite element [3, 2] : 9
vvedite element [3, 3] : 5
summa elementov glavnoi diagonali = 14

MATRIX
3 6 4
8 6 5
6 9 5

max element stroki = 6
min element stroki = 3
max element stroki = 8
min element stroki = 5
max element stroki = 9
min element stroki = 5
MATRIX
6 3 4
8 5 6
6 5 9
Не правильно меняются элементы второй строки.

Добавлено через 16 часов 54 минуты
Разобрался.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.05.2016, 15:58
Помогаю со студенческими работами здесь

Поменять местами максимальные элементы главной и побочной диагоналей.
В заданном целочисленном массиве Ann поменять местами максимальные элементы главной и побочной диагоналей. подправьте код)) uses...

В квадратной матрице А(7,7) поменять местами минимальные элементы первой и третьей строк, максимальные элементы главной и побочной диагоналей
Составил программу, но похоже неправильно. При вводе пишет ошибка проверки диапазона и курсор мигает на строчке if (i=j). Program...

Поменять местами элементы главной и побочной диагоналей матрицы
Задача 2. Дана матрица целых чисел . Поменять местами элементы главной и побочной диагоналей.

Поменять местами максимальные элементы главной и побочной диагонали матрицы
В матрице А(7x7) поменять местами максимальные элементы главной и побочной диогонали. Помогите решить задачу!!!!!!!!!!!!!!!!!!

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


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

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

Новые блоги и статьи
MVC фреймворк в PHP
Jason-Webb 19.04.2025
Архитектурный паттерн Model-View-Controller (MVC) – это не просто модный термин из мира веб-разработки. Для PHP-программистов это фундаментальный подход к организации кода, который радикально меняет. . .
Dictionary Comprehensions в Python
py-thonny 19.04.2025
Python славится своей выразительностью и лаконичностью, что позволяет писать чистый и понятный код. Среди множества синтаксических конструкций языка особое место занимают словарные включения. . .
Шаблоны и протоколы для создания устойчивых микросервисов
ArchitectMsa 19.04.2025
Микросервисы — архитектурный подход, разбивающий сложные приложения на небольшие, независимые компоненты. Вместо монолитного гиганта, система превращается в созвездие небольших взаимодействующих. . .
Изменяемые и неизменяемые типы в Python
py-thonny 19.04.2025
Python славится своей гибкостью и интуитивной понятностью, а одна из главных его особенностей — это система типов данных. В этом языке все, включая числа, строки, функции и даже классы, является. . .
Интеграция Hangfire с RabbitMQ в проектах C#.NET
stackOverflow 18.04.2025
Разработка современных . NET-приложений часто требует выполнения задач "за кулисами". Это может быть отправка email-уведомлений, генерация отчётов, обработка загруженных файлов или синхронизация. . .
Построение эффективных запросов в микросервисной архитектуре: Стратегии и практики
ArchitectMsa 18.04.2025
Микросервисная архитектура принесла с собой много преимуществ — возможность независимого масштабирования сервисов, технологическую гибкость и четкое разграничение ответственности. Но как часто бывает. . .
Префабы в Unity: Использование, хранение, управление
GameUnited 18.04.2025
Префабы — один из краеугольных элементов разработки игр в Unity, представляющий собой шаблоны объектов, которые можно многократно использовать в различных сценах. Они позволяют создавать составные. . .
RabbitMQ как шина данных в интеграционных решениях на C# (с MassTransit)
stackOverflow 18.04.2025
Современный бизнес опирается на множество специализированных программных систем, каждая из которых заточена под решение конкретных задач. CRM управляет отношениями с клиентами, ERP контролирует. . .
Типы в TypeScript
run.dev 18.04.2025
TypeScript представляет собой мощное расширение JavaScript, которое добавляет статическую типизацию в этот динамический язык. В JavaScript, где переменная может свободно менять тип в процессе. . .
Погружение в Kafka: Концепции и примеры на C# с ASP.NET Core
stackOverflow 18.04.2025
Apache Kafka изменила подход к обработке данных в распределенных системах. Эта платформа потоковой передачи данных выходит далеко за рамки обычной шины сообщений, предлагая мощные возможности,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru