Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 15

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

01.06.2013, 16:45. Показов 2095. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите сделать пожалуйста)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.06.2013, 16:45
Ответы с готовыми решениями:

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

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

Матрицы: поменять местами первую строку и строку, содержащую максимальный элемент
1)В матрице поменять местами 1 строку и строку содержащие последнее вхождение элемента максимального где максимальный- максимальный элем...

12
С++ Beginner
 Аватар для MarVaL
120 / 120 / 77
Регистрация: 28.02.2013
Сообщений: 246
01.06.2013, 18:30
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 минут
Еще память забыл освободить
1
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
01.06.2013, 18:43
В строке 52 напишите
C++
1
 int index = -1;
0
С++ Beginner
 Аватар для MarVaL
120 / 120 / 77
Регистрация: 28.02.2013
Сообщений: 246
01.06.2013, 18:45
Цитата Сообщение от Genn55 Посмотреть сообщение
В строке 52 напишите
C++
1
 int index = -1;
Зачем? пусть заменяет саму себя в случае сами знаете каком
0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
01.06.2013, 18:51
Не верно определяется индекс.У вас индекс будет на 1 больше и заменяться будет с первой строки а не с нулевой.
0
С++ Beginner
 Аватар для MarVaL
120 / 120 / 77
Регистрация: 28.02.2013
Сообщений: 246
01.06.2013, 18:54
Ну вот смотри, заменяет нормально.
Изображения
 
0
С++ Beginner
 Аватар для MarVaL
120 / 120 / 77
Регистрация: 28.02.2013
Сообщений: 246
01.06.2013, 19:03
Блин при 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;
}
0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
01.06.2013, 19:04
Может я не верно понял? Вот результат работы в моем случае
Вложения
Тип файла: docx скрин 2.docx (23.5 Кб, 8 просмотров)
1
С++ Beginner
 Аватар для MarVaL
120 / 120 / 77
Регистрация: 28.02.2013
Сообщений: 246
01.06.2013, 19:13
Цитата Сообщение от 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 минуту
Должно корректно работать
0
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 15
01.06.2013, 19:54  [ТС]
Спасибо большое!!! Я понимаю и так жирно, код написали, но если не сложно можете прокомментировать действия)
0
С++ Beginner
 Аватар для MarVaL
120 / 120 / 77
Регистрация: 28.02.2013
Сообщений: 246
01.06.2013, 20:05
Цитата Сообщение от 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
}
1
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
03.06.2013, 01:20
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 байт, 11 просмотров)
0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
03.06.2013, 01:24
Ошибка при загрузке
Вложения
Тип файла: docx Исправленный вариант.docx (55.1 Кб, 12 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.06.2013, 01:24
Помогаю со студенческими работами здесь

Поменять местами первую строку матрицы и строку, содержащую максимальный отрицательный элемент
:cry: Ребята выручайте. Без вас мне край. У меня не было С++ ,но мне надо сделать задачку и отбодаться:-[ напишите по возможности с...

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

В заданной матрице поменять местами первую строку со строкой, содержащей максимальный отрицательный элемент матрицы
Помогите, кто может! Нигде помощи не нашла, хотя подобные темы есть; не получается, а скоро сдавать. Динамический или статический- не...

В заданной матрице поменять местами строку, содержащую максимальный элемент со строкой, содержащей минимальный
Надо сделать к понедельнику. Задание по ПЯВУ, состоит из двух частей. Если первую часть я понимаю, как одномерный массив, то вторую нет....

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru