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

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

Восстановить пароль Регистрация
 
GenaForum
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 15
01.06.2013, 16:45     В матрице из действительных чисел поменять местами первую строку и строку, содержащую наименьший элемент матрицы #1
Помогите сделать пожалуйста)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2013, 16:45     В матрице из действительных чисел поменять местами первую строку и строку, содержащую наименьший элемент матрицы
Посмотрите здесь:

Поменять местами строку с максимальный элемент и строку с минимальным элементом матрицы C++
В данной действительной матрице размера 3Х3 поменять местами строку, содержащую элемент с наибольшим значе-нием, со строкой, содержащей элемент с наим C++
Поменять местами первую строку и строку, в которой находится первый нулевой элемент. Принять, что массив просматривается слева направо и сверху вниз. C++
Матрицы: поменять местами первую строку и строку, содержащую максимальный элемент C++
В массиве из 25 действительных чисел найти наименьший элемент и поменять его местами с первым элементом(Borland C++) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
01.06.2013, 18:30     В матрице из действительных чисел поменять местами первую строку и строку, содержащую наименьший элемент матрицы #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
60
61
62
63
64
65
66
67
#include <iostream>
#include <cstdlib>
#include <ctime>
 
int** createMatrix(int, int);
void fillMatrix(int**, int, int);
void printMatrix(int **, int, int);
int getIndexOfMinElement(int **, int, int);
void reverseFirstWithMin(int **, int, int, int);
 
int main() {
  srand(time(0));
  int n, m, index;
  std::cout << "n = ";
  std::cin >> n;
  std::cout << "m = ";
  std::cin >> m;
  int **matrix = createMatrix(n, m);
  fillMatrix(matrix, n, m);
  printMatrix(matrix, n, m);
  index = getIndexOfMinElement(matrix, n, m);
  reverseFirstWithMin(matrix, n, m, index);
  printMatrix(matrix, n, m);
  return 0;
}
 
int** createMatrix(int n, int m) {
  int **matrix = new int*[n];
  for(int i = 0; i < n; ++i)
    matrix[i] = new int[m];
  return matrix;
}
 
void fillMatrix(int **matrix, int n, int m) {
  for(int i = 0; i < n; ++i)
    for(int j = 0; j < m; ++j)
      matrix[i][j] = 1 + rand() % 9;
}
 
void printMatrix(int **matrix, int n, int m) {
  std::cout << "Matrix:" << std::endl;
  for(int i = 0; i < n; ++i) {
    for(int j = 0; j < m; ++j)
      std::cout << matrix[i][j] << ' ';
    std::cout << std::endl;
  }
  std::cout << std::endl;
}
 
int getIndexOfMinElement(int **matrix, int n, int m) {
  int min = matrix[0][0];
  int index = 0;
  for(int i = 0; i < n; ++i) {
    for(int j = 0; j < m; ++j)
      if(min > matrix[i][j])
        index = i;
  }
  return index;
}
 
void reverseFirstWithMin(int **matrix, int n, int m, int index) {
  for(int j = 0; j < m; ++j) {
    int tmp = matrix[0][j];
    matrix[0][j] = matrix[index][j];
    matrix[index][j] = tmp;
  }
}
Добавлено через 9 минут
Еще память забыл освободить
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
01.06.2013, 18:43     В матрице из действительных чисел поменять местами первую строку и строку, содержащую наименьший элемент матрицы #3
В строке 52 напишите
C++
1
 int index = -1;
MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
01.06.2013, 18:45     В матрице из действительных чисел поменять местами первую строку и строку, содержащую наименьший элемент матрицы #4
Цитата Сообщение от Genn55 Посмотреть сообщение
В строке 52 напишите
C++
1
 int index = -1;
Зачем? пусть заменяет саму себя в случае сами знаете каком
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
01.06.2013, 18:51     В матрице из действительных чисел поменять местами первую строку и строку, содержащую наименьший элемент матрицы #5
Не верно определяется индекс.У вас индекс будет на 1 больше и заменяться будет с первой строки а не с нулевой.
MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
01.06.2013, 18:54     В матрице из действительных чисел поменять местами первую строку и строку, содержащую наименьший элемент матрицы #6
Ну вот смотри, заменяет нормально.
Изображения
 
MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
01.06.2013, 19:03     В матрице из действительных чисел поменять местами первую строку и строку, содержащую наименьший элемент матрицы #7
Блин при n = 4 работает некорректно не пойму почему, если в самой первой строке есть минимальный элемент, с последней заменяет

Добавлено через 4 минуты
Код сейчас такой, не всегда корректно работает, не могу понять почему..
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
int** createMatrix(int, int);
void fillMatrix(int**, int, int);
void printMatrix(int **, int, int);
int getIndexOfMinElement(int **, int, int);
void reverseFirstWithMin(int **, int, int);
void deleteMatrix(int **, int);
 
int main() {
  srand(time(0));
  int n, m, index;
  std::cout << "n = ";
  std::cin >> n;
  std::cout << "m = ";
  std::cin >> m;
  int **matrix = createMatrix(n, m);
  fillMatrix(matrix, n, m);
  printMatrix(matrix, n, m);
  index = getIndexOfMinElement(matrix, n, m);
  reverseFirstWithMin(matrix, n, m, index);
  printMatrix(matrix, n, m);
  deleteMatrix(matrix, n, m);
  return 0;
}
 
int** createMatrix(int n, int m) {
  int **matrix = new int*[n];
  for(int i = 0; i < n; ++i)
    matrix[i] = new int[m];
  return matrix;
}
 
void fillMatrix(int **matrix, int n, int m) {
  for(int i = 0; i < n; ++i)
    for(int j = 0; j < m; ++j)
      matrix[i][j] = 1 + rand() % 9;
}
 
void printMatrix(int **matrix, int n, int m) {
  std::cout << "Matrix:" << std::endl;
  for(int i = 0; i < n; ++i) {
    for(int j = 0; j < m; ++j)
      std::cout << matrix[i][j] << ' ';
    std::cout << std::endl;
  }
  std::cout << std::endl;
}
 
int getIndexOfMinElement(int **matrix, int n, int m) {
  int min = matrix[0][0];
  int index = 0;
  for(int i = 0; i < n; ++i) {
    for(int j = 0; j < m; ++j)
      if(min > matrix[i][j])
        index = i;
  }
  return index;
}
 
void reverseFirstWithMin(int **matrix, int m, int index) {
  for(int j = 0; j < m; ++j) {
    int tmp = matrix[0][j];
    matrix[0][j] = matrix[index][j];
    matrix[index][j] = tmp;
  }
}
 
void deleteMatrix(int **matrix, int n) {
  for(int i = 0; i < n; ++i)
    delete[] matrix[i];
  delete[] matrix;
}
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
01.06.2013, 19:04     В матрице из действительных чисел поменять местами первую строку и строку, содержащую наименьший элемент матрицы #8
Может я не верно понял? Вот результат работы в моем случае
Вложения
Тип файла: docx скрин 2.docx (23.5 Кб, 6 просмотров)
MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
01.06.2013, 19:13     В матрице из действительных чисел поменять местами первую строку и строку, содержащую наименьший элемент матрицы #9
Цитата Сообщение от Genn55 Посмотреть сообщение
Может я не верно понял? Вот результат работы в моем случае
В четвертой строке минимальный элемент 1, поэтому с ней и заменяет

Добавлено через 2 минуты
Немного изменил reverseFirstWithMin
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
int** createMatrix(int, int);
void fillMatrix(int**, int, int);
void printMatrix(int **, int, int);
int getIndexOfMinElement(int **, int, int);
void reverseFirstWithMin(int **, int, int);
void deleteMatrix(int **, int);
 
int main() {
  srand(time(0));
  int n, m, index;
  std::cout << "n = ";
  std::cin >> n;
  std::cout << "m = ";
  std::cin >> m;
  int **matrix = createMatrix(n, m);
  fillMatrix(matrix, n, m);
  printMatrix(matrix, n, m);
  index = getIndexOfMinElement(matrix, n, m);
  reverseFirstWithMin(matrix, m, index);
  printMatrix(matrix, n, m);
  deleteMatrix(matrix, n);
  return 0;
}
 
int** createMatrix(int n, int m) {
  int **matrix = new int*[n];
  for(int i = 0; i < n; ++i)
    matrix[i] = new int[m];
  return matrix;
}
 
void fillMatrix(int **matrix, int n, int m) {
  for(int i = 0; i < n; ++i)
    for(int j = 0; j < m; ++j)
      matrix[i][j] = 1 + rand() % 9;
}
 
void printMatrix(int **matrix, int n, int m) {
  std::cout << "Matrix:" << std::endl;
  for(int i = 0; i < n; ++i) {
    for(int j = 0; j < m; ++j)
      std::cout << matrix[i][j] << ' ';
    std::cout << std::endl;
  }
  std::cout << std::endl;
}
 
int getIndexOfMinElement(int **matrix, int n, int m) {
  int min = matrix[0][0];
  int index = 0;
  for(int i = 0; i < n; ++i) {
    for(int j = 0; j < m; ++j)
      if(min > matrix[i][j])
        index = i;
  }
  return index;
}
 
void reverseFirstWithMin(int **matrix, int m, int index) {
  if(index == 0)
    return;
  for(int j = 0; j < m; ++j) {
    int tmp = matrix[0][j];
    matrix[0][j] = matrix[index][j];
    matrix[index][j] = tmp;
  }
}
 
void deleteMatrix(int **matrix, int n) {
  for(int i = 0; i < n; ++i)
    delete[] matrix[i];
  delete[] matrix;
}


Добавлено через 2 минуты
Всё исправил revereFirsthWithMin, нужно было заменять min каждый раз как мы найдём минимальный элемент
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
int** createMatrix(int, int);
void fillMatrix(int**, int, int);
void printMatrix(int **, int, int);
int getIndexOfMinElement(int **, int, int);
void reverseFirstWithMin(int **, int, int);
void deleteMatrix(int **, int);
 
int main() {
  srand(time(0));
  int n, m, index;
  std::cout << "n = ";
  std::cin >> n;
  std::cout << "m = ";
  std::cin >> m;
  int **matrix = createMatrix(n, m);
  fillMatrix(matrix, n, m);
  printMatrix(matrix, n, m);
  index = getIndexOfMinElement(matrix, n, m);
  reverseFirstWithMin(matrix, m, index);
  printMatrix(matrix, n, m);
  deleteMatrix(matrix, n);
  return 0;
}
 
int** createMatrix(int n, int m) {
  int **matrix = new int*[n];
  for(int i = 0; i < n; ++i)
    matrix[i] = new int[m];
  return matrix;
}
 
void fillMatrix(int **matrix, int n, int m) {
  for(int i = 0; i < n; ++i)
    for(int j = 0; j < m; ++j)
      matrix[i][j] = 1 + rand() % 9;
}
 
void printMatrix(int **matrix, int n, int m) {
  std::cout << "Matrix:" << std::endl;
  for(int i = 0; i < n; ++i) {
    for(int j = 0; j < m; ++j)
      std::cout << matrix[i][j] << ' ';
    std::cout << std::endl;
  }
  std::cout << std::endl;
}
 
int getIndexOfMinElement(int **matrix, int n, int m) {
  int min = matrix[0][1];
  int index = 0;
  for(int i = 0; i < n; ++i) {
    for(int j = 0; j < m; ++j)
      if(min > matrix[i][j]) {
        index = i;
        min = matrix[i][j];
      }
  }
  return index;
}
 
void reverseFirstWithMin(int **matrix, int m, int index) {
  if(index == 0)
    return;
  for(int j = 0; j < m; ++j) {
    int tmp = matrix[0][j];
    matrix[0][j] = matrix[index][j];
    matrix[index][j] = tmp;
  }
}
 
void deleteMatrix(int **matrix, int n) {
  for(int i = 0; i < n; ++i)
    delete[] matrix[i];
  delete[] matrix;
}


Добавлено через 1 минуту
Должно корректно работать
GenaForum
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 15
01.06.2013, 19:54  [ТС]     В матрице из действительных чисел поменять местами первую строку и строку, содержащую наименьший элемент матрицы #10
Спасибо большое!!! Я понимаю и так жирно, код написали, но если не сложно можете прокомментировать действия)
MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
01.06.2013, 20:05     В матрице из действительных чисел поменять местами первую строку и строку, содержащую наименьший элемент матрицы #11
Цитата Сообщение от GenaForum Посмотреть сообщение
Спасибо большое!!! Я понимаю и так жирно, код написали, но если не сложно можете прокомментировать действия)
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <cstdlib>
#include <ctime>
/* Prototipi */
int** createMatrix(int, int);
void fillMatrix(int**, int, int);
void printMatrix(int **, int, int);
int getIndexOfMinElement(int **, int, int);
void reverseFirstWithMin(int **, int, int);
void deleteMatrix(int **, int);
 
int main() {
  srand(time(0));                                     // Ustanavlivaem "Zerno" dlya randomnih chisel
  int n, m, index;
  std::cout << "n = ";
  std::cin >> n;                                      // Vvod n (n strok)
  std::cout << "m = ";
  std::cin >> m;                                      // Vvod m (m stolbcov)
  int **matrix = createMatrix(n, m);                  // Vizivaem funkciu createMatrix i prisvaivaem ukazatelu matrix rez-tat ee raboti
  fillMatrix(matrix, n, m);                           // zapolnyaem matricu
  printMatrix(matrix, n, m);                          // vivodim matricu
  index = getIndexOfMinElement(matrix, n, m);         // poluchaem index stroki gde nahoditsya minimalnij element
  reverseFirstWithMin(matrix, m, index);              // menyaem mestami
  printMatrix(matrix, n, m);                          // vivodim matricu
  deleteMatrix(matrix, n);                            // osvobojdaem pamyat
  return 0;
}
 
int** createMatrix(int n, int m) {
  int **matrix = new int*[n];                        // videlyaem pamyat pod stroki
  for(int i = 0; i < n; ++i)
    matrix[i] = new int[m];                          // videlyaem pamyat pod stolbci
  return matrix;                                     // vozvrashaem matricu(ukazatel na ukazateli) (ukazatel na stroki)
}
 
void fillMatrix(int **matrix, int n, int m) {
  for(int i = 0; i < n; ++i)                        // zapolnyaem matricu randomnimi chislami [1,9];
    for(int j = 0; j < m; ++j)
      matrix[i][j] = 1 + rand() % 9;
}
 
void printMatrix(int **matrix, int n, int m) {
  std::cout << "Matrix:" << std::endl;
  for(int i = 0; i < n; ++i) {
    for(int j = 0; j < m; ++j)
      std::cout << matrix[i][j] << ' ';               // Vovodim matricu
    std::cout << std::endl;
  }
  std::cout << std::endl;
}
 
int getIndexOfMinElement(int **matrix, int n, int m) {
  int min = matrix[0][1];                            // predpologaem 4to minimalnij element matrix[0][1]    
  int index = 0;                                     // index stroki s minimalnim elementom 0
  for(int i = 0; i < n; ++i) {
    for(int j = 0; j < m; ++j)
      if(min > matrix[i][j]) {                       // Esli min > matrix[i][j] to min = matrix[i][j];
        index = i;                                   // zapominaem index
        min = matrix[i][j];                          // obnovlyaem minimalnij element
      }
  }
  return index;                                     // vozvrashaem index
}
 
void reverseFirstWithMin(int **matrix, int m, int index) {
  if(index == 0)                                    // Esli index = 0 to 
    return;                                        // zakanchivaem rabotu funkcii
  for(int j = 0; j < m; ++j) {
    int tmp = matrix[0][j];                        // zakidivaem v tmp matrix[0][j]
    matrix[0][j] = matrix[index][j];               // teper mojem v nego zapisat matrix[index][j]
    matrix[index][j] = tmp;                        // a v matrix[index][j] = tmp (gde lejut matrix[0][j])
  }
}
 
void deleteMatrix(int **matrix, int n) {
  for(int i = 0; i < n; ++i)
    delete[] matrix[i];                           // osvobojdaem pamyat is pod ukazatelya na stolbci(elementi matrici)
  delete[] matrix;                                // osvobojdaem pamyat is pod ukazatelya na stroki
}
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
03.06.2013, 01:20     В матрице из действительных чисел поменять местами первую строку и строку, содержащую наименьший элемент матрицы #12
MarVaL я, с вашего позволения подправил ваш код.В таком виде все работает правильно.
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
int getIndexOfMinElement(int **matrix, int n, int m) {
  int min = matrix[0][0];
  int index = -1;//индексация начинается с 0
  for(int i = 0; i < n; i++) {
    for(int j = 0; j < m; j++)
      if(matrix[i][j]< min)//находим минимальный элемент и его индекс
     {
         min = matrix[i][j];
        index = i;
     }
 
  }
  std::cout<< " min =   "<< min << ' ';//контрольный вывод минимального элемента
  std::cout<< " index =   "<< index << ' ';//контрольный вывод его минимального индекса
  return index;
}
 
void reverseFirstWithMin(int **matrix, int n, int m, int index) {
  for(int j = 0; j < m; ++j) {
    int tmp = matrix[0][j];
    matrix[0][j] = matrix[index][j];
    matrix[index][j] = tmp;
  }
}
C++
1
2
3
  fillMatrix(matrix, n, m);
  std::cout << std::endl;//для контрольного вывода
  printMatrix(matrix, n, m);
C++
1
 matrix[i][j] = 1 + rand() % 99;//для большей наглядности
только те,что изменил.Сравните результаты работы.
Вложения
Тип файла: docx ~$правленный вариант.docx (162 байт, 9 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2013, 01:24     В матрице из действительных чисел поменять местами первую строку и строку, содержащую наименьший элемент матрицы
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
03.06.2013, 01:24     В матрице из действительных чисел поменять местами первую строку и строку, содержащую наименьший элемент матрицы #13
Ошибка при загрузке
Вложения
Тип файла: docx Исправленный вариант.docx (55.1 Кб, 10 просмотров)
Yandex
Объявления
03.06.2013, 01:24     В матрице из действительных чисел поменять местами первую строку и строку, содержащую наименьший элемент матрицы
Ответ Создать тему
Опции темы

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