0 / 0 / 0
Регистрация: 10.01.2020
Сообщений: 14
1

Сортировка значения и перемещение айди значения

10.01.2020, 21:34. Показов 365. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Это часть программы, отвечающая за то, чтобы отсортировать по величине деньги людей, которые есть в базе.
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
int* moneysort = new int[size1]; //Для того, чтобы можно было провести сортировку, я создал ещё один массив, копирующий массив с деньгами.
                    for (int i = 0; i < size1; i++) {
                        if (exist[i] == 1) { //exist указывает на то, существует ли человек, на айди которого находится цикл в данный момент. 0 - не существует, 1 - существует
                            sort = money[i];
                            moneysort[i] = sort;
                        }
                        else
                            i += size1;
                    }
                    int* moneysortrue = new int[size1]; //Этот массив отвечает за айди людей и, собственно, денег в том числе.
                    for (int i = 0; i < size1; i++) {
                        if (exist[i] == 1) {
                            moneysortrue[i] = i;
                        }
                        else
                            i += size1;
                    }
                    for (int i = 0; i < size1; i++){ //Цикл, отвечающий за сортировку. Сортируются деньги, а айди перемещается вслед за привязанной к нему суммой.
                        if (exist[i] == 1) {
                            for (int j = 0; j < size1; j++) {
                                if (exist[j] == 1) {
                                    if (moneysort[j + 1] < moneysort[j] && moneysort[j+1] != NULL) {
                                        temp = moneysort[j + 1];
                                        temp2 = moneysort[j];
                                        moneysort[j + 1] = temp2;
                                        moneysort[j] = temp;
                                        temp = moneysortrue[j + 1];
                                        temp2 = moneysortrue[j];
                                        moneysortrue[j + 1] = temp2;
                                        moneysortrue[j] = temp;
                                    }
                                }
                                else
                                    j += size1;
                            }
                        }
                        else
                            i += size1;
                    }
                    for (int i = 0; i < size1; i++) { //Цикл вывода всей информации о человеке по его айди
                        if (exist[i] == 0)
                            i += size1;
                        else {
                            sort = moneysortrue[i];
                            cout << "Имя - " << names[sort] << ", Фамилия - " << familys[sort] << ", Отчество - " << otchs[sort] << ", Деньги - " << moneysort[sort] << ", ID - " << sort << endl;
                        }
                    }
Вызвано исключение по адресу 0x000000013F4A6073 в Project1.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFFFFFFFE6E7B8EA8.

Видимо, создаётся где-то мусор и всё умирает, когда я прошу вывести массив. Прошу помочь с нахождением больного места. Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.01.2020, 21:34
Ответы с готовыми решениями:

Вычислить значения функции F на интервале от начального значения х= Хнач до конечного значения х=Хкон с шагом X шаг
Написал программу для решения задачи, нужно использовать цикл. Программа вроде работает. Но не...

Вывести значения одной таблицы двумя запросами,где значения второго запроса должны исключить значения первого
Есть две таблицы. Таблица GRP c полями NameGroup и CodElementGroup. Содержание её таково: Группа_1...

Массивы. Найти максимальные и минимальные значения. В строках, где находятся искомые значения все значения обратить в ноль и вернуть номер строки
Всем привет! Вот такая задачка: Ввести двумерный массив 5х6. Найти максимальные и минимальные...

Вычислить значения функции F на интервале от начального значения до конечного значения
Написать консольное приложение на С++ Перепечатайте пожалуйста текст задания на форум.

7
6577 / 4562 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
10.01.2020, 21:42 2
Цитата Сообщение от RARiliar Посмотреть сообщение
Видимо, создаётся где-то мусор и всё умирает, когда я прошу вывести массив. Прошу помочь с нахождением больного места. Спасибо.
Вот это moneysort[j + 1] = temp2; на последнем элементе выйдет за границу массива

Добавлено через 2 минуты
Цитата Сообщение от RARiliar Посмотреть сообщение
else
                            i += size1;
Вместо этого, наверное, лучше сделать
C++
1
2
else 
    break;
0
0 / 0 / 0
Регистрация: 10.01.2020
Сообщений: 14
10.01.2020, 21:43  [ТС] 3
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Вот это moneysort[j + 1] = temp2; на последнем элементе выйдет за границу массива
Не должно, потому что стоит условие:
if (moneysort[j + 1] < moneysort[j] && moneysort[j+1] != NULL)

Если, конечно, оно правильное...
0
6577 / 4562 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
10.01.2020, 21:45 4
Цитата Сообщение от RARiliar Посмотреть сообщение
Если, конечно, оно правильное...
Оно тоже выйдет за границу. Возможно с менее фатальными последствиями, но, по-любому, неправильное
1
0 / 0 / 0
Регистрация: 10.01.2020
Сообщений: 14
10.01.2020, 21:49  [ТС] 5
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Оно тоже выйдет за границу
Как? Оно ведь учитывает элемент за пределами готовых значений в массиве. Там ведь указано, что если оно не равно NULL, то проходит, а иначе операция сортировки проведена не будет.
0
6577 / 4562 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
10.01.2020, 21:52 6
Цитата Сообщение от RARiliar Посмотреть сообщение
Как? Оно ведь учитывает элемент за пределами готовых значений в массиве. Там ведь указано, что если оно не равно NULL, то проходит, а иначе операция сортировки проведена не будет.
У тебя массив от нуля до size1 - [0, size1). Просто не обращайся к элементам вне этого диапазона
0
0 / 0 / 0
Регистрация: 10.01.2020
Сообщений: 14
10.01.2020, 22:03  [ТС] 7
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
У тебя массив от нуля до size1 - [0, size1). Просто не обращайся к элементам вне этого диапазона
Массив не заполнен всегда полностью. Я сам ввожу кол-во людей и их характеристики. И удалять их могу, и ещё раз увеличивать, короче...

Добавлено через 6 минут
Я заменил то условие, теперь там exist стоит (сразу так надо было сделать). Начало хотя бы не крашится, но сортировка проводится абы как.
0
6577 / 4562 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
10.01.2020, 22:03 8
Цитата Сообщение от RARiliar Посмотреть сообщение
Массив не заполнен всегда полностью. Я сам ввожу кол-во людей и их характеристики. И удалять их могу, и ещё раз увеличивать, короче...
Короче, попробуй сделать, как я тебе сказал - на выходить за size1. Подозреваю, проблема уйдёт.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2020, 22:03
Помогаю со студенческими работами здесь

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

Поиск значения и перемещение строки
Ребята, на вас вся надежда!!!:cry: Не получается записать макрос. В таблице необходимо найти...

Как можно сравнивать айди в адресной строке с айди в php коде
у меня адресная строка вида: site.com/questions.php?question=6, как сравнивать question=6, чтобы...

Как айфон снять с айди если забыл предыдущий айди?
Как айфон снять с айди если забыл предедуший айди


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru