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

Сортировка двумерного динамического массива

21.12.2023, 16:58. Показов 588. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всех приветствую уважаемые форумчане!
Недавно начал изучать C++ для дальнейшего применения в UE
Есть задача, никак не могу разобраться с сортировкой.

Общий смысл: программа принимает количество игроков, создается двумерный динамический массив. После произвольно заполняем имя и число условных очков в соответствии с ранее заданным количеством игроков.

Получаем на выходе промежуточно список игроков и количество их очков.

После чего нужно получить список игроков отсортированный по убыванию очков.

На этом моих знаний перестало хватать.
Пробовал использовать метод сортировки "вставками" и на этом завис.
Не могу разобраться как грамотно вызвать эту функцию.
И что-то мне подсказывает что саму функцию я тоже адаптировал неправильно
Прошу помочь с решением)) По возможности с комментариями для понимания процесса))

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
#include <iostream>
#include <string>
 
using namespace std;
 
void insertionSort(int rows[], int cols) // Функция сортировки методом "Сортировка вставками"
{
    for (int i{}; i < rows; i++)
    {
        for (int j{}; j < cols; j++)
        {
            int j = i - 1;
            while (j >= 0 && rows[j] > rows[j + 1])
            {
                swap(rows[j], rows[j + 1]);
                cout << "Сортировка...";
                j--;
            }
        }
    }
}
 
int main()
{
    setlocale(0, ""); // русская локализация консоли
 
    int rows; //кол-во рядов (строк) массива
    int cols = 2; //кол-во столбцов массива
 
    cout << "Введите количество игроков: ";
    cin >> rows; // получение от пользователя количества игроков (размера массива)
 
    cout << "==============================================" << endl;
 
    cout << "Введите имена " << rows << " игроков: " << endl;
 
    string** dynamic_array = new string*[rows]; // создаем динамический массив (выделение памяти для массива)
 
    for (int i{}; i < rows; i++)// Заполнение массива и вывод значений его элементов
    {
        dynamic_array[i] = new string[cols]{};
    }
 
    // вводим данные
    for (int i{}; i < rows; i++)
    {
        cout << "Введите имя и очки игрока " << (i + 1) << " через пробел:" << endl;
        // вводим данные для столбцов i-й строки
        for (int j{}; j < cols; j++)
        {
            cin >> dynamic_array[i][j]; // считываем числа в ячейки массива
        }
    }
 
    cout << "==============================================" << endl;
 
    insertionSort(); //Какие аргументы в скобках?
    
    // вывод данных
    for (int i{}; i < rows; i++)
    {
        // выводим данные для столбцов i-й строки
        for (int j{}; j < cols; j++)
        {
            cout << dynamic_array[i][j] << " ";
        }
        cout << endl;
    }
    
    for (int i = 0; i < rows; i++)
    {
        delete[] dynamic_array[i]; // очистка памяти
    }
 
    delete[] dynamic_array; // удаляем динамический массив
 
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.12.2023, 16:58
Ответы с готовыми решениями:

Сортировка двумерного динамического массива
Уважаемые форумчане, при сортировке и выводе отсортированного массива в первой строке вместо нормальных значений выводит мусор, ковыряюсь в...

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

Сортировка двумерного динамического массива
Мне нужно отсортировать строки массива по 11 столбцу, не пойму как делать #include&lt;iostream&gt; #include&lt;iomanip&gt; ...

6
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,237
21.12.2023, 17:07
Строки 10-12 - 2 раза об'являете переменную j, это является ошибкой. Нужно разделить переменные - это будут 2 разные переменные.
1
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.12.2023, 17:07
Ты сам придумал такой массив? Чтобы проблемы себе создать?
Передаёшь так, как объявлял:
C++
1
void insertionSort(string** arr, int rowCount)
1
0 / 0 / 0
Регистрация: 21.12.2023
Сообщений: 3
22.12.2023, 08:48  [ТС]
Строки 10-12 - 2 раза об'являете переменную j, это является ошибкой. Нужно разделить переменные - это будут 2 разные переменные.
Спасибо) я не понимаю как должно быть) можно наглядный пример?)

Передаёшь так, как объявлял:
Супер спасибо!
0
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,237
22.12.2023, 09:02
Пожалуйста, посмотрите наглядный пример в Интернете. В цикле for - это переменная цикла(j) имеет тип int. Следовательно, все переменные, которые будут создаваться в теле цикла(фигурные скобки: {}) не должны иметь это имя, а должны иметь какое-то другое имя.
1
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
22.12.2023, 09:22
Я правильно понимаю, что фактически у вас не двумерный массив переменной размерности (переменной по обоим измерениям), а список имён игроков и количества их очков и всё? верно?

Тогда лучше сделать структуру из 2-х полей:

C++
1
2
3
4
struct SPlayerData {
   std::string Name;
   int Rate {0};
}
и использовать просто одномерный массив структур. Всё, никаких заморочек с двумерностью.

Добавлено через 13 минут
Ну и потом, если вы именно С++ изучаете - не надо вот эти вот "динамические массивы"! Нафик забудьте про них.
std::vector<SPlayerData> vec;
.... заполнение данных...
std::sort( ....) для портировки

Добавлено через 1 минуту
И вообще:

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
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
 
struct SPlayerData {
   std::string Name;
   int Rate {0};
   
   bool operator <(const SPlayerData &b)
   {
       return this->Rate < b.Rate;
   }
};
 
int main() {
 
  std::cout << "Count:";
  int N;
  std::cin >> N;
 
// тут можно добавить проверку на положительность N
 
  std::vector<SPlayerData> vec(N);
 
  for(int i = 0; i < N; i++)
  {
      std::cout << '[' << i << "].Name:";
      std::cin >> vec[i].Name;
      std::cout << '[' << i << "].Rate:";
      std::cin >> vec[i].Rate;
  }
  
  std::sort(vec.begin(), vec.end());
  
  for(const auto& dat : vec)
    std::cout << dat.Name << " -> " << dat.Rate << '\n';
 
}
Добавлено через 2 минуты
PS
дада, с++ все больше приближается к бейсику по уровню, при условии использовании современного синтаксиса и встроенных библиотек.
Главное древние книжки запретить
1
0 / 0 / 0
Регистрация: 21.12.2023
Сообщений: 3
26.12.2023, 17:38  [ТС]
Всем спасибо за ответы, буду разбираться потихоньку.
Пошел пока по тому же варианту как шел изначально.
Разберусь с этим и опробую другие решения.

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 <string>
 
using namespace std;
 
void insertionSort(int rows[], int cols) // Функция сортировки методом "Сортировка вставками"
{
    for (int i{}; i < rows; i++)
    {
        for (int j{}; j < cols; j++)
        {
            int j = i - 1;
            while (j >= 0 && rows[j] > rows[j + 1])
            {
                swap(rows[j], rows[j + 1]);
                cout << "Сортировка...";
                j--;
            }
        }
    }
}
 
int main()
{
    setlocale(0, ""); // русская локализация консоли
 
    int rows; //кол-во рядов (строк) массива
    int cols = 2; //кол-во столбцов массива
 
    cout << "Введите количество игроков: ";
    cin >> rows; // получение от пользователя количества игроков (размера массива)
 
    cout << "==============================================" << endl;
 
    cout << "Введите имена " << rows << " игроков: " << endl;
 
    string** dynamic_array = new string*[rows]; // создаем динамический массив (выделение памяти для массива)
 
    for (int i{}; i < rows; i++)// Заполнение массива и вывод значений его элементов
    {
        dynamic_array[i] = new string[cols]{};
    }
 
    // вводим данные
    for (int i{}; i < rows; i++)
    {
        cout << "Введите имя и очки игрока " << (i + 1) << " через пробел:" << endl;
        // вводим данные для столбцов i-й строки
        for (int j{}; j < cols; j++)
        {
            cin >> dynamic_array[i][j]; // считываем числа в ячейки массива
        }
    }
 
    cout << "==============================================" << endl;
 
    insertionSort(); //Какие аргументы в скобках?
    
    // вывод данных
    for (int i{}; i < rows; i++)
    {
        // выводим данные для столбцов i-й строки
        for (int j{}; j < cols; j++)
        {
            cout << dynamic_array[i][j] << " ";
        }
        cout << endl;
    }
    
    for (int i = 0; i < rows; i++)
    {
        delete[] dynamic_array[i]; // очистка памяти
    }
 
    delete[] dynamic_array; // удаляем динамический массив
 
    return 0;
}
Код запускается и работает без ошибки, но сортировка не срабатывает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.12.2023, 17:38
Помогаю со студенческими работами здесь

Сортировка двумерного динамического массива
Целочисленную матрицу отсортировать следующим образом: элементы с четными значениями должны быть упорядочены внутри строк по убыванию,...

Сортировка двумерного динамического массива не работает
#include &lt;iostream&gt; #include&lt;iomanip&gt; #include &lt;windows.h&gt; using namespace std; void Sort(int*Ar, int size) { int min; ...

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

Передача двумерного динамического массива в функцию построчно и сортировка
Всем доброго времени суток! Собственно сабж: есть двумерный динамический массив, который надо делить на одномерные и передавать в функцию...

Метод-член класса для создания одномерного массива из отрицательных элементов двумерного динамического массива
Помогите, пожалуйста, нужно разработать метод-член класса для создания одномерного массива из отрицательных элементов двумерного...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru