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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
dimkachel
6 / 1 / 1
Регистрация: 18.11.2009
Сообщений: 172
#1

Матрица, найти и поменять местами минимальный и максимальный элемент - C++

19.06.2012, 18:24. Просмотров 1060. Ответов 11
Метки нет (Все метки)

Помогите с задачей:
В квадратной матрице A[N][N] найти среди элементов, расположенных ниже главной диагонали, минимальный элемент, а среди элементов выше побочной диагонали - максимальный. Поменять их местами. Вывести координаты этих элементов.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2012, 18:24     Матрица, найти и поменять местами минимальный и максимальный элемент
Посмотрите здесь:

Поменять местами минимальный и максимальный элемент C++
Поменять местами максимальный и минимальный элемент матрицы C++
C++ Найти максимальный отрицательный и минимальный положительный элемент и поменять их местами
Найти максимальный и минимальный элемент в каждой строке матрицы и поменять их местами C++
В двумерном массиве поменять местами максимальный и минимальный элемент местами C++
C++ Найти в массиве максимальный элемент и минимальный элемент, и поменять их местами
Поменять местами минимальный элемент с первым элементом массива, а максимальный элемент с последним C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zitxbit
Master C/C++
87 / 739 / 75
Регистрация: 11.04.2012
Сообщений: 971
19.06.2012, 18:42     Матрица, найти и поменять местами минимальный и максимальный элемент #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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <memory.h>
 
#define N 10
 
void swap(int& n1, int& n2);
 
int main()
{
    int** A = new int*[N];
    memset((void*)A, 0x00, 4 * N);
 
    for (int i = 0; i < N; i++)
    {
        A[i] = new int[N];
        for (int j = 0; j < N; j++)
        {
            A[i][j] = rand() % 9 + 1;
            printf("%d ",A[i][j]);
        }
 
        printf("\n");
    }
 
    int min_i = 0, min_j = 0;
    for (int t1 = 0; t1 < N; t1++)
        for (int t2 = 0; t2 < t1; t2++)
            if (A[t1][t2] < A[min_i][min_j])
             { min_i = t1; min_j = t2; }
 
    int max_i = 0, max_j = 0;
    for (int n1 = 0; n1 < N; n1++)
        for (int n2 = n1+1; n2 < N; n2++)
            if (A[n1][n2] > A[max_i][max_j])
             { max_i = n1; max_j = n2; }
    
    swap(A[min_i][min_j],A[max_i][max_j]);
 
    printf("\n");
 
    for (int z1 = 0; z1 < N; z1++)
    {
        for (int z2 = 0; z2 < N; z2++)
            printf("%d ",A[z1][z2]);
        printf("\n");
    }
 
    _getch();
 
    return 0;
}
 
void swap(int& n1, int& n2)
 { int _tn = n1; n1 = n2; n2 = _tn; }
http://liveworkspace.org/code/e61005...ec2c643ebcdae2
Root2x
12 / 12 / 0
Регистрация: 21.05.2012
Сообщений: 52
19.06.2012, 18:43     Матрица, найти и поменять местами минимальный и максимальный элемент #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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
 
using namespace std;
 
int main()
{
    const unsigned int W = 10, H = 10;
    unsigned int TM = 0, IT = 0, JT = 0, IB = 0, JB = 0;
    float MaxTop = 0, MaxBott = 0;
    float Matrix[H][W];
 
    int i = 0, j = 0;
    for( i = 0; i < H; ++i )
    {
        for( j = 0; j < W; ++j )
        {
            Matrix[i][j] = ( float )( rand() );
        }
    }
 
    for( i = 0; i < H; ++i )
    {
        for( j = 0; j < W; ++j )
        {
            if( j > i )
            {
                MaxTop = Matrix[i][j] > MaxTop ? Matrix[i][j] : MaxTop;
                IT = i;
                JT = j;
            }
            else if( j < i )
            {
                MaxBott = Matrix[i][j] > MaxBott ? Matrix[i][j] : MaxBott;
                IB = i;
                JB = j;
            }
        }
    }
 
    TM = Matrix[IT][JT];
    Matrix[IT][JT] = Matrix[IB][JB];
    Matrix[IB][JB] = TM;
 
    cout<< "Max top: " << MaxTop <<endl;
    cout<< "Indices: " << IT << "; " << JT <<endl;
    cout<< "Max botton: " << MaxBott <<endl;
    cout<< "Indices: " << IB << "; " << JB <<endl;
 
    cin>> MaxTop;
    return 0;
}
Добавлено через 15 секунд
Первый не успел)
dimkachel
6 / 1 / 1
Регистрация: 18.11.2009
Сообщений: 172
19.06.2012, 19:25  [ТС]     Матрица, найти и поменять местами минимальный и максимальный элемент #4
zitxbit,
Root2x,
Не запускаются, ошибки выдает.
Root2x
12 / 12 / 0
Регистрация: 21.05.2012
Сообщений: 52
19.06.2012, 19:30     Матрица, найти и поменять местами минимальный и максимальный элемент #5
Очень странно, так как у меня всё успешно и компилируется и запускается. Само приложение в архиве.

P.S. На что именно он ругается?
Вложения
Тип файла: rar simmetric.rar (4.5 Кб, 9 просмотров)
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
19.06.2012, 19:35     Матрица, найти и поменять местами минимальный и максимальный элемент #6
Уважаемый Root2X ваша программа работает не правильно. Вы не соблюли условия задачи, там сказано элементов расположенных ниже главной диагонали, минимальный элемент, а среди элементов выше побочной диагонали - максимальный.Ваша программа этого не делает.
dimkachel
6 / 1 / 1
Регистрация: 18.11.2009
Сообщений: 172
19.06.2012, 19:36  [ТС]     Матрица, найти и поменять местами минимальный и максимальный элемент #7
Root2x,
разобрался, #include "stdafx.h" не было в коде.
Жаль что матрицы не выводит.
Root2x
12 / 12 / 0
Регистрация: 21.05.2012
Сообщений: 52
19.06.2012, 19:37     Матрица, найти и поменять местами минимальный и максимальный элемент #8
David Sylva, да действительно, виноват, не внимательно прочел условие, секундочку, сейчас поправлю. dimkachel, за одно допишу вывод матриц.
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
19.06.2012, 19:56     Матрица, найти и поменять местами минимальный и максимальный элемент #9
Предлагаю свой вариант

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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <iostream> 
#include <ctime> 
#include <iomanip>
#include <cstdlib> 
using namespace std;
int main() 
{   
    setlocale(0, "rus");
    srand((unsigned) time(0));
    const int N = 5; // размер матрицы
    int matrix[N][N];  // матрица 
    int i, j;  
    int n = 2; 
    int min;  
    int max; 
    int temp;
    int index_max_i = 0, index_max_j = 0; // индексы
    int index_min_i = 1, index_min_j = 0;
 
    for ( i = 0; i < N; i++) 
        for ( j = 0; j < N; j++) 
            matrix[i][j] = rand() % 10; // заполняем матрицу случайными числами
 
    for ( i = 0; i < N; i++)  
    
        for ( j = 0; j < N; j++)  
        {
            if(j % 5 == 0) cout << endl; // выводим исходную матрицу
        cout << setw(3) << matrix[i][j];  
        } 
        cout << endl << endl; 
 
        min = matrix[1][0];  // мин первый элемент ниже главной диагонали
 
        for ( i = 1; i < n && n < N+1 ; i++)  
        { 
            for ( j = 0; j < i; j++)  
                 if(min > matrix[i][j]) // сравниваем с элементами ниже главной
                 {
                    min = matrix[i][j];  
                    index_min_i = i;  // сохраняем индексы
                    index_min_j = j; 
                 }
                     n++;
             }
     cout << " Минимальный элемент равен " << min << " Расположен      " << // выводим на экран
          index_min_i <<" " << index_min_j << endl;   
 
     cout << endl << endl; 
 
     max = matrix[0][0]; // первый элемент выше побочной
 
     for ( i = 0; i < N - 1; i++) 
         for ( j = 0; j < N - 1 - i; j++) 
             if(matrix[i][j] > max) 
             { 
                 max = matrix[i][j]; 
                 index_max_i = i; // сохраняем индексы
                 index_max_j = j; 
             } 
 
             cout << "Максимальный элемент равен " << max << " Расположен    " << 
                 index_max_i << " " << index_max_j << endl; 
 
             cout << endl << endl;
 
             temp = matrix[index_max_i][index_max_j];  // меняем местами
             matrix[index_max_i][index_max_j] = matrix[index_min_i][index_min_j]; 
             matrix[index_min_i][index_min_j] = temp;
 
 
             for ( i = 0; i < N; i++)  
             
                 for ( j = 0; j < N; j++)  // выводим  матрицу с изменениями
                 {
                     if(j % 10 == 0) 
                     cout << endl;  
                 cout << setw(3) << matrix[i][j]; 
               }
            cout << endl;
             return 0; 
 
              system("Pause");
}
Root2x
12 / 12 / 0
Регистрация: 21.05.2012
Сообщений: 52
19.06.2012, 20:28     Матрица, найти и поменять местами минимальный и максимальный элемент #10
Всё, поправил код. Еще раз прошу прощения за свою невнимательность.
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
#include <iostream>
 
using namespace std;
 
int main()
{
    const unsigned int W = 10, H = 10;
    unsigned int TM = 0, IG = 0, JG = 0, IP = 0, JP = 0, i = 0, j = 0;
    float MinG = 0, MaxP = 0;
    float Matrix[H][W];
 
    for( i = 0; i < H; ++i )
    {
        for( j = 0; j < W; ++j )
        {
            Matrix[i][j] = ( float )( rand() % 10 );
        }
    }
 
    for( i = 0; i < H; ++i )
    {
        for( j = 0; j < W; ++j )
        {
            if( j < i )
            {
                MinG = Matrix[i][j] > MinG ? Matrix[i][j] : MinG;
                IG = i;
                JG = j;
            }
            else if( ( W - i ) > j && ( H - j ) > i )
            {
                MaxP = Matrix[i][j] > MaxP ? Matrix[i][j] : MaxP;
                IP = i;
                JP = j;
            }
        }
    }
 
    TM = Matrix[IG][JG];
    Matrix[IG][JG] = Matrix[IP][JP];
    Matrix[IP][JP] = TM;
 
    cout<< "Min: " << MinG <<endl;
    cout<< "Indices: " << IG << "; " << IG <<endl <<endl;
 
    cout<< "Max: " << MaxP <<endl;
    cout<< "Indices: " << IP << "; " << JP <<endl <<endl;
 
    i = 0;
    j = 0;
    for( i = 0; i < H; ++i )
    {
        for( j = 0; j < W; ++j )
        {
            cout<< Matrix[i][j];
        }
        cout<< endl;
    }
 
    cin>> MaxP;
    return 0;
}
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
19.06.2012, 20:42     Матрица, найти и поменять местами минимальный и максимальный элемент #11
Ты не подумай, что я докапываюсь, но во первых максимальный элемент считает неправильно и мне кажется, что надо сначала выводить исходную матрицу, а потом матрицу с изменениями , что посмотреть корректно всё сработало или нет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2012, 23:21     Матрица, найти и поменять местами минимальный и максимальный элемент
Еще ссылки по теме:

C++ Дана матрица размера 6x9. Поменять местами строки содержащие минимальный и максимальный элемент
C++ Массивы: поменять местами минимальный по модулю элемент и максимальный отрицательный элемент
C++ В матрице поменять максимальный и минимальный элемент местами
Поменять местами максимальный и минимальный элемент массива C++
Найти максимальный и минимальный элемент массива и поменять их местами C++

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

Или воспользуйтесь поиском по форуму:
Root2x
12 / 12 / 0
Регистрация: 21.05.2012
Сообщений: 52
19.06.2012, 23:21     Матрица, найти и поменять местами минимальный и максимальный элемент #12
Не уж то я такой безрукий, вот до чего доводит излишняя спешка и самоуверенность! Благодарю, что указали на мои ошибки.
main.cpp
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
 
using namespace std;
 
int main()
{
    const unsigned int W = 4, H = 4;
    unsigned int TM = 0, IG = 0, JG = 0, IP = 0, JP = 0, i = 0, j = 0;
    float MinG = 0, MaxP = 0;
    float Matrix[H][W];
 
    for( i = 0; i < H; ++i )
    {
        for( j = 0; j < W; ++j )
        {
            Matrix[i][j] = ( float )( rand() % 10 );
        }
    }
 
    MinG = Matrix[1][0];
    IG = 1;
    JG = 0;
 
    for( i = 0; i < H; ++i )
    {
        for( j = 0; j < W; ++j )
        {
            if( j < i )
            {
                if( Matrix[i][j] < MinG )
                {
                    MinG = Matrix[i][j];
                    IG = i;
                    JG = j;
                }
            }
            if( ( ( W - ( i + 1 ) ) > j ) && ( ( H - ( j + 1 ) ) > i ) )
            {
                if( Matrix[i][j] > MaxP )
                {
                    MaxP = Matrix[i][j];
                    IP = i;
                    JP = j;
                }
            }
        }
    }
 
    cout<< "Min: " << MinG <<endl;
    cout<< "Indices: " << IG + 1 << "; " << JG + 1 <<endl <<endl;
 
    cout<< "Max: " << MaxP <<endl;
    cout<< "Indices: " << IP + 1 << "; " << JP + 1 <<endl <<endl;
 
    i = 0;
    j = 0;
    for( i = 0; i < H; ++i )
    {
        for( j = 0; j < W; ++j )
        {
            cout<< Matrix[i][j];
        }
        cout<< endl;
    }
    cout<< endl;
 
    TM = Matrix[IG][JG];
    Matrix[IG][JG] = Matrix[IP][JP];
    Matrix[IP][JP] = TM;
 
    i = 0;
    j = 0;
    cout<< endl;
    for( i = 0; i < H; ++i )
    {
        for( j = 0; j < W; ++j )
        {
            cout<< Matrix[i][j];
        }
        cout<< endl;
    }
 
    cin>> MaxP;
    return 0;
}
}
Yandex
Объявления
19.06.2012, 23:21     Матрица, найти и поменять местами минимальный и максимальный элемент
Ответ Создать тему
Опции темы

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