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

Из существующей матрицы n*m записать в новую матрицу все элементы исходной матрицы, кроме максимального и минимального элемента из каждой строки - C++

Восстановить пароль Регистрация
 
Scatten
0 / 0 / 0
Регистрация: 28.04.2013
Сообщений: 50
20.06.2013, 15:14     Из существующей матрицы n*m записать в новую матрицу все элементы исходной матрицы, кроме максимального и минимального элемента из каждой строки #1
Здравствуйте! У меня такая задача: мне надо из существующей матрицы n*m запсать в новую матрицу все элементы исходной матрицы, кроме максимального и минимального элемента из каждой строки.
Я вот запутался с циклами если честно. Как правильно сделать?

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
void diag()
{   int min, max;
    int **p;
    p = new int*[n];
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            if (max > t[i][j]) max = j;
            if (min > t[i][j]) min = j;
        }
        p[i] = new int[2];
        for (int j = 0; j < m; j++)
        {
            while (j == max || j == min)
            p[i][j] = t[i][j];
        }
    }
 
    for (int i = 0; i < n; i++)
    {   for (int j = 0; j < m; j++)
        {
        if (j == 0) cout << "[ ";
        cout << setw(2) << p[i][j] << " ";
        if (j == m - 1) cout << " ]\n"; } }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2013, 15:14     Из существующей матрицы n*m записать в новую матрицу все элементы исходной матрицы, кроме максимального и минимального элемента из каждой строки
Посмотрите здесь:

Образовать матрицу A(nxn), сгенерировав элементы случайным образом. Определить индексы минимального элемента матрицы. Определить индексы максимального C++
C++ сортировка каждой строки матрицы по убыванию до минимального элемента
C++ Даны две действительные квадратные матрицы порядка n. Получить новую матрицу: путем умножения элементов каждой строки первой матрицы на наибольшее из
1)Даны две действительные квадратные матрицы порядка n. Получить новую матрицу : А) умножение элементов каждой строки первой матрицы на наибольшее из C++
Даны две действительные квадратные матрицы порядка n. Получить новую матрицу: а) умножением элементов каждой строки первой матрицы на наибольш C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
tzeentch
 Аватар для tzeentch
25 / 25 / 2
Регистрация: 13.04.2013
Сообщений: 79
20.06.2013, 16:13     Из существующей матрицы n*m записать в новую матрицу все элементы исходной матрицы, кроме максимального и минимального элемента из каждой строки #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
57
58
59
#include <iostream>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
int main() {
  srand( time( 0 ) );
  const int N = 10, M = 10;
 
  int mat[N][M], mat2[N][M];
 
    // Заполняем матрицу 1
  for( int i = 0; i < N; i++ )
    for( int j = 0; j < M; j++ )
      mat[i][j] = (rand() % 89) + 10;
 
    // Выводим матрицу 1
  for( int i = 0; i < N; i++ ) {
    cout << '\n';
    for( int j = 0; j < M; j++ )
      cout << mat[i][j] << ' ';
  }
 
  int nmax, nmin;
  int max[M], min[M];
 
    // Для каждой строки ищем максимальный элемент, и запоминаем его индекс
  for( int i = 0; i < N; i++ ) {
    nmax = mat[i][0];
    nmin = mat[i][0];
    max[i] = 0;
    min[i] = 0;
    for( int j = 1; j < M; j++ ) {
      if( mat[i][j] > nmax ) { nmax = mat[i][j]; max[i] = j; };
      if( mat[i][j] < nmin ) { nmin = mat[i][j]; min[i] = j; };
    }
  }
 
    // Заполняем матрицу 2
  for( int i = 0; i < N; i++ ) {
    for( int j = 0; j < M; j++ ) {
      if( j != max[i] && j != min[i] ) // Если это НЕ минимальный или максимальный элемент...
        mat2[i][j] = mat[i][j];  //копируем его
      else
        mat2[i][j] = 0;
    }
  }
 
  cout << "\n\n";
 
    // Выводим матрицу 2
  for( int i = 0; i < N; i++ ) {
    cout << '\n';
    for( int j = 0; j < M; j++ )
      if( mat2[i][j] ) cout << mat2[i][j] << ' ';
      else cout << "-- ";
  }
}
Добавлено через 16 минут
Из любви к искусству: вариант с сортировкой.

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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
int main() {
  srand( time( 0 ) );
  const int N = 5, M = 5;
 
  int mat[N][M], mat2[N][M];
 
    // Заполняем матрицу 1
  for( int i = 0; i < N; i++ )
    for( int j = 0; j < M; j++ )
      mat[i][j] = (rand() % 89) + 10;
 
    // Выводим матрицу 1
  for( int i = 0; i < N; i++ ) {
    cout << '\n';
    for( int j = 0; j < M; j++ )
      cout << mat[i][j] << ' ';
  }
 
    // Сортируем строки
  for( int k = 0; k < N; k++ )
    for( int i = 0; i < M-1; i++ )
      for( int j = i+1; j < M; j++ )
        if( mat[k][i] > mat[k][j] )
          swap( mat[k][i], mat[k][j] );
 
    // Заполняем матрицу 2
  for( int i = 0; i < N; i++ ) {
    mat2[i][0] = mat2[i][M-1] = 0;
    for( int j = 1; j < M - 1; j++ ) {
      mat2[i][j] = mat[i][j];
    }
  }
 
  cout << "\n\n";
 
    // Выводим матрицу 2
  for( int i = 0; i < N; i++ ) {
    cout << '\n';
    for( int j = 0; j < M; j++ )
      if( mat2[i][j] ) cout << mat2[i][j] << ' ';
      else cout << "-- ";
  }
}
Правда препод может придраться, что элементы исходной матрицы перемешаны, но в условии не сказано, что так нельзя...
Scatten
0 / 0 / 0
Регистрация: 28.04.2013
Сообщений: 50
20.06.2013, 16:28  [ТС]     Из существующей матрицы n*m записать в новую матрицу все элементы исходной матрицы, кроме максимального и минимального элемента из каждой строки #3
tzeentch, C сортировкой кончено как-то лучше, но препод скажет, что массив должен быть m - 2, сказав а что это за черточки... ну хотя их убрать конечно не проблема.

Массив ввода должен быть динамический....
tzeentch
 Аватар для tzeentch
25 / 25 / 2
Регистрация: 13.04.2013
Сообщений: 79
20.06.2013, 16:39     Из существующей матрицы n*m записать в новую матрицу все элементы исходной матрицы, кроме максимального и минимального элемента из каждой строки #4
Ну, это уже несложно изменить, я просто предложил вам алгоритм, нет, два алгоритма отсеивания лишних элементов.
А способ ввода/вывода или тип массива можно изменить, на результат это не повлияет.

"Черточками" я обозначил выпиленные элементы, имхо так нагляднее)
Scatten
0 / 0 / 0
Регистрация: 28.04.2013
Сообщений: 50
20.06.2013, 23:27  [ТС]     Из существующей матрицы n*m записать в новую матрицу все элементы исходной матрицы, кроме максимального и минимального элемента из каждой строки #5
,tzeentch, Ну да спасибо вам большое! Мне главное сейчас запихнуть это в функцию класса.

Добавлено через 6 часов 46 минут
Как-то странно получается. нули вообще не видит...

Bash
1
2
3
4
5
6
7
8
9
10
11
[  8  8  8  8  ]
[  0  1 -1  2  ]
[  3  4 23  1  ]
[  8  8  0  3  ]
 
 
 
-- 8 8 -- 
-- -- 1 -- 
-- 3 4 -- 
-- 3 8 --
Bash
1
2
3
4
5
6
7
8
9
[  1  0 -1  ]
[  2  3  0  ]
[ -4  4  0  ]
 
 
 
-- -- -- 
-- 2 -- 
-- -- --
tzeentch
 Аватар для tzeentch
25 / 25 / 2
Регистрация: 13.04.2013
Сообщений: 79
20.06.2013, 23:28     Из существующей матрицы n*m записать в новую матрицу все элементы исходной матрицы, кроме максимального и минимального элемента из каждой строки #6
Да, нули он не видит))
Я выпиленными элементами считаю те, которые равны нулю, обратите внимание на генерацию и вывод.
Yandex
Объявления
20.06.2013, 23:28     Из существующей матрицы n*m записать в новую матрицу все элементы исходной матрицы, кроме максимального и минимального элемента из каждой строки
Ответ Создать тему
Опции темы

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