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

В матрице поменять местами строку, содержащую наибольший элемент, со строкой, содержащей наименьший - C++

Восстановить пароль Регистрация
 
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 97
22.04.2014, 18:28     В матрице поменять местами строку, содержащую наибольший элемент, со строкой, содержащей наименьший #1
Задание:
Кликните здесь для просмотра всего текста

В данной действительной матрице размера mn поменять местами строку, содержащую элемент с наибольшим значением, со строкой, содержащей элемент с наименьшим значением. Предполагается, что такой элемент единственный.


Подскажите... почему-то не работает.

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
87
88
89
90
91
#include <iostream>
 
using namespace std;
 
int main()
{
    int a[3][3],b[3][3],i,j,min,max;
 
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            cout << "Vvedite [" << i+1 << "][" << j+1 << "] element:";
            cin  >> a[i][j];
        }
    }
 
    system("cls");
 
    cout << "\n";
 
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            cout << a[i][j] << "  ";
        }
        cout << "\n";
    }
 
 
    for(i=0;i<3;i++)   // ищем минимум
    {
        for(j=0;j<3;j++)
        {
            if ( a[0][0] >= a[i][j] )
            {
                min = i;
            }
 
        }
    }
 
 
    for(i=0;i<3;i++)   // ищем максимум
    {
        for(j=0;j<3;j++)
        {
            if ( a[0][0] <= a[i][j] )
            {
                max = i;
            }
 
        }
    }
 
    a[i][j] = b[i][j];
 
 
    for(i=0;i<3;i++)   // заменяем 1 строку
    {
        for(j=0;j<3;j++)
        {
            if ( i == min)
            b[i][j] = a[max][j];
        }
    }
 
 
 
    for(i=0;i<3;i++)   // заменяем 2 строку
    {
        for(j=0;j<3;j++)
        {
            if ( i == max)
            b[i][j] = a[min][j];
        }
    }
 
 
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            cout << b[i][j] << "  ";
        }
        cout << "\n";
    }
 
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2014, 18:28     В матрице поменять местами строку, содержащую наибольший элемент, со строкой, содержащей наименьший
Посмотрите здесь:

В данной действительной матрице размера 3Х3 поменять местами строку, содержащую элемент с наибольшим значе-нием, со строкой, содержащей элемент с наим C++
C++ Поменять местами строку, содержащую элемент с наибольшим значением, со строкой, содержащей элемент с наименьшим значением
C++ В квадратной действительной матрице порядка N поменять местами строку, содержащую наибольшее значение, со строкой, содержащей наименьшее значение
C++ В матрице из целых чисел поменять местами первую строку и строку, содержащую самый большой по абсолютной величине элемент матрицы
C++ В матрице из действительных чисел поменять местами первую строку и строку, содержащую наименьший элемент матрицы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
bogdan_017
 Аватар для bogdan_017
21 / 21 / 11
Регистрация: 18.03.2014
Сообщений: 147
22.04.2014, 18:40     В матрице поменять местами строку, содержащую наибольший элемент, со строкой, содержащей наименьший #2
алгоритм поиска минимума, допустим у вас а[0][0]=5, a[1][0]=1, a[2][0]=3; по вашему алгоритму среди этих чисел получится что min=2, т.к. а[0][0]>a[2][0], и a[2][0] - последний. попробуйте чуть чуть иначе :
C++
1
2
3
4
5
6
7
8
9
     int minstr;
for(i=0;i<3;i++)   // ищем минимум
    {
        for(j=0;j<3;j++)
        {  
            a[0][0]=min; 
            if ( min >= a[i][j] )  { min = a[i][j]; minstr=i;}
        }
    }
аналогично и с максимумом.
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 97
22.04.2014, 18:48  [ТС]     В матрице поменять местами строку, содержащую наибольший элемент, со строкой, содержащей наименьший #3
У меня проблема в том, что не правильно выводит строку с которой ничего не происходит!
bogdan_017
 Аватар для bogdan_017
21 / 21 / 11
Регистрация: 18.03.2014
Сообщений: 147
22.04.2014, 21:55     В матрице поменять местами строку, содержащую наибольший элемент, со строкой, содержащей наименьший #4
tibeg, от руки набросал, возможно нужно будет отладить)
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 <stdlib>
 
using namespace std;
int Data (int arr[3][3]) // заполнить массив рандомно числами от 0 до 9
 {
   for (int i=0; i<3; i++)
     for (int j=0; j<3; j++)
       arr[i][j]=rand()%10; 
  return 0;
  }
int Print (int arr[3][3]) // вывести массив на экран
   {
     cout<<"\n Print array:\n";
      for (int i=0; i<3; i++)
       {
          for (int j=0; j<3; j++)
          cout<<arr[i][j]<<" \t";
          cout<<"\n";
        }
      return 0;
    }
int swap(int &a, int &b) // поменять местами два элемента
  {
     int temp=a;
     a=b;
     b=temp;
     return 0;
   }
int main()
{
    int a[3][3],b[3][3],i,j,min,max,minstr, maxstr;
 
    clrscr();
    randommize();
    Data(a);   //заполняем массив рандомно
    Print(a);   //выводим массив на экран
 
    min=a[0][0];   
    for(i=0;i<3;i++)   // ищем минимум
    {
        for(j=0;j<3;j++)
            if ( min >= a[i][j] )
            {
                min = a[i][j]; minstr=i;
            }
    }
 
    max=a[0][0];
 
    for(i=0;i<3;i++)   // ищем максимум
    {
        for(j=0;j<3;j++)
            if ( max <= a[i][j] )
            {
                max = a[i][j]; maxstr=i;
            }
 
    }
 
 
 for(j=0; j<3; j++)
 swap(a[maxstr][j], a[minstr][j]);  //меняем местами элементы массива в каждом столбце из из строк minstr и maxstr
 
 Print(a); // выводим массив на экран
 
 return 0;
}
Yandex
Объявления
22.04.2014, 21:55     В матрице поменять местами строку, содержащую наибольший элемент, со строкой, содержащей наименьший
Ответ Создать тему
Опции темы

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