Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 30.03.2015
Сообщений: 8
1

Нужна небольшая правка в программе

09.12.2015, 15:04. Просмотров 845. Ответов 2
Метки нет (Все метки)

Здравствуйте! Задание: меняя местами строки матрицы, отсортировать по возрастанию ее первый столбец. (Динамический двумерный массив)
Есть код, который сортирует в массиве только указанную строку или столбец, но не привязывает ее к остальным элементам. Вот как получается:
4 0 9 5 3
6 8 8 7 2
1 7 0 2 4
3 2 6 7 7
3 3 6 4 0

6 0 9 5 3
4 8 8 7 2
3 7 0 2 4
3 2 6 7 7
1 3 6 4 0
Как видно, 1 столбец отсортировало, но не потянуло за собой соответствующие строки.
Должно быть так:
4 0 9 5 3
6 8 8 7 2
1 7 0 2 4
3 2 6 7 7
3 3 6 4 0

6 8 8 7 2
4 0 9 5 3
3 3 6 4 0
3 2 6 7 7
1 7 0 2 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
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <iostream>
 
using namespace std;
 
void sortColumn(int **matrix, int height, int columnId) {
  // пусть будет пузырек
  for (int i = 0; i < height - 1; ++i)
    for (int j = i + 1; j < height; ++j)
      if (matrix[i][columnId] < matrix[j][columnId]) {
        int temporary = matrix[i][columnId];
        matrix[i][columnId] = matrix[j][columnId];
        matrix[j][columnId] = temporary;
      }
}
 
// сортировка строки матрицы
void sortRow(int **matrix, int width, int rowId) {
  // еще раз пузырек
  for (int i = 0; i < width - 1; ++i)
    for (int j = i + 1; j < width; ++j)
      if (matrix[rowId][i] < matrix[rowId][j]) {
        int temporary = matrix[rowId][i];
        matrix[rowId][i] = matrix[rowId][j];
        matrix[rowId][j] = temporary;
      }
}
 
// вывод матрицы на экран
void printMatrix(int **matrix, int height, int width) {
  for (int i = 0; i < height; ++i) {
    for (int j = 0; j < width; ++j)
      cout << matrix[i][j] << " ";
    cout << endl;
  }
  cout << endl;
}
 
int main(int argc, char **argv) {
  srand(time(0));
  // размеры матрицы
  const int width = 5;
  const int height = 5;
 
  // создание матрицы
  int **matrix = new int*[height];
  for (int i = 0; i < height; ++i) {
    matrix[i] = new int[width];
    for (int j = 0; j < width; ++j)
      matrix[i][j] = rand() % 10;
  }
 
  printMatrix(matrix, height, width);
  // сортировка первого столбца
  sortColumn(matrix, height, 0);
  printMatrix(matrix, height, width);
  // сортировка первой строки матрицы
  sortRow(matrix, width, 0);
  printMatrix(matrix, height, width);
 
  for (int i = 0; i < height; ++i)
    delete matrix[i];
    delete matrix;
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
Добавлено через 13 часов 48 минут
Помогите, пожалуйста, нужно уже завтра.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2015, 15:04
Ответы с готовыми решениями:

Небольшая правка в рекурсии
Ребят, стоит такое задание &quot;Подсчитать сумму S = 1/1! + 1/2! + ... + 1/k!&quot;. Нужно сделать с...

Небольшая ошибка в программе
Я полный новичок в c++, написал программу, которая проверяет, какое число больше, первое, или...

Небольшая недоработка в программе
Задача была написать программу, которая читает введенную матрицу, делает проверку значений на...

Небольшая корректировка вывода в программе
Помогите немного переделать программу : под что она сделана: -...

2
49 / 49 / 31
Регистрация: 07.10.2015
Сообщений: 170
09.12.2015, 15:14 2
Лучший ответ Сообщение было отмечено dmitrydm как решение

Решение

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
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <iostream>
 
using namespace std;
 
void sortFirstColumn(int **matrix, int height, int width)
{
    // пусть будет пузырек
    for (int i = 0; i < height - 1; ++i)
    for (int j = i + 1; j < height; ++j)
    if (matrix[i][0] < matrix[j][0])
    {
        for (int k = 0; k < width; ++k)
        {
            int temporary = matrix[i][k];
            matrix[i][k] = matrix[j][k];
            matrix[j][k] = temporary;
        }
    }
}
 
 
// вывод матрицы на экран
void printMatrix(int **matrix, int height, int width)
{
    for (int i = 0; i < height; ++i)
    {
        for (int j = 0; j < width; ++j)
            cout << matrix[i][j] << " ";
        cout << endl;
    }
    cout << endl;
}
 
int main(int argc, char **argv)
{
    srand(time(0));
    // размеры матрицы
    const int width = 5;
    const int height = 5;
 
    // создание матрицы
    int **matrix = new int*[height];
    for (int i = 0; i < height; ++i)
    {
        matrix[i] = new int[width];
        for (int j = 0; j < width; ++j)
            matrix[i][j] = rand() % 10;
    }
 
    printMatrix(matrix, height, width);
    // сортировка первого столбца
    sortFirstColumn(matrix, height, width);
    printMatrix(matrix, height, width);
 
 
    for (int i = 0; i < height; ++i)
        delete matrix[i];
    delete matrix;
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
1
0 / 0 / 0
Регистрация: 30.03.2015
Сообщений: 8
09.12.2015, 15:36  [ТС] 3
Спасибо огромное!!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2015, 15:36

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Небольшая утечка памяти в программе
Ув. форумчане подскажите где в данном проекте может быть утечка памяти. Происходит медленно, но...

Нужна небольшая программа на c++)
Вычислить площади треугольников, вписывающихся в полуокружность, через каждые 18 градусов (L=18)....

Структуры, С++. Нужна небольшая подсказка
Вывод на консоль сформированной ведомости и выписки из ведомости для видов продукции, объем...

Нужна небольшая помощь начинающему
вот код с учебника на проверку является ли число простым.Но я не могу понять откуда берется...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.