konctantin777 |
Отправлено: 27 Ноября, 2023 - 21:40:27
|
Эксперт
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017
Откуда: Архангельск
Репутация: 6
|
Здравствуйте.
На экране есть несколько кнопок, у каждой 2 параметра.
CODE:[0][654]
[5][345]
[4][45]
[0][11]
[3][256]
[1][456]
[2][8766]
[2][256776]
[0][28656]
Надо отсортировать и кликнуть сначала по самой "маленькой. Т.е., наверное, отсортировать CODE:int x[100];
int y[100];
sort(0, 1, #x[0], #y[0], 9); получим в начале массива 4ю кнопку [0][11]. Но как узнать, что изначально она была именно четвёртая, чтобы по ней кликнуть ?
Потом по по самой большой по х и маленькой по у
CODE:int x[100];
int y[100];
sort(99, 1, #x[0], #y[0], 9); Получим в начале массива 2ю кнопку [5][345] ? А как узнать, что изначально она 2я была ?
(Добавление)
Но таким способом кнопки с параметрами [5] [10] и [10 [5] будут равнозначны ? Надо именно сначала с наибольшим значением по х и сортировка по у. . Потом с на 1 меньшим значением по х и сортировка по у, потом ещё на 1 меньшим по х.. . |
|
|
Zireael |
Отправлено: 28 Ноября, 2023 - 01:54:52
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: как узнать, что изначально она была именно четвёртая
Создать копию массива, отсортировать её, взять первый элемент и в цикле сравнить с оригинальным массивом, получим индекс.
Или вместе с параметрами ещё записать порядковый номер кнопки, тогда сортировка никак не повлияет.
Можно написать свою сортировку. Но, в данный момент непонятны критерии сортировки.
Цитата: Но таким способом кнопки с параметрами [5] [10] и [10 [5] будут равнозначны ?
А есть смысл рассматривать такой вариант? Может параметры кнопок не могут быть идентичны.
В данный момент проще сортировать по сумме двух параметров. Если подойдёт такой вариант. |
|
|
konctantin777 |
Отправлено: 28 Ноября, 2023 - 07:53:00
|
Эксперт
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017
Откуда: Архангельск
Репутация: 6
|
Zireael пишет: Может параметры кнопок не могут быть идентичны.
Таких идентичных нет. Это как более наглядный пример 123-547 и 146-534, например.
Но параметры же всегда можно переименовать. Т. е. по х, чтобы были от 0 до 5
Zireael пишет: Или вместе с параметрами ещё записать порядковый номер кнопки, тогда сортировка никак не повлияет. сделать массив 3х мерным ?(Отредактировано автором: 28 Ноября, 2023 - 07:56:39) |
|
|
Zireael |
Отправлено: 28 Ноября, 2023 - 10:28:59
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
У вас объявлен двухмерный массив.
Можно объявить трёхмерный.
CODE:int a[100][100][100];
Функция sort не отсортирует ни тот, ни другой.
Цитата: sort(0, 1, #x[0], #y[0], 9);
Тут не сортируется массив a.
Если вам нужен ответ на ваш вопрос, то напишите критерий сортировки и в каком виде хранятся данные. |
|
|
konctantin777 |
Отправлено: 28 Ноября, 2023 - 11:07:12
|
Эксперт
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017
Откуда: Архангельск
Репутация: 6
|
Zireael пишет: критерий сортировки и в каком виде хранятся данные
У кнопки двое данных. 1е это значения 0,1,2,3, но могу любое другое написать. 2е это цифра от 15 до 9и значной.
Цель: Найти все кнопки с 1м значением "3" и максимальным 2м значением. Потом с 1м значением "2" и максимальным 2м значением, потом с 1м значением "1" и максимальным 2м значением.
Потом тоже самое, но минимальное 2е значение, но это уже, думаю, так же только значения наоборот.
(Добавление)
CODE:int a[100][100];
int x[100];
int y[100];
x[0]=1;y[654]=1;
x[5]=2;y[345]=2;
x[4]=3;y[45]=3;
x[0]=4;y[11]=4;
x[3]=5;y[256]=5;
x[1]=6;y[456]=6;
x[2]=7;y[8766]=7;
x[2]=8;y[256776]=8;
x[0]=9;y[28656]=9;
sort(0, 90000, #x[0], #y[0], 9);
(Добавление)
Zireael пишет: Можно объявить трёхмерный.
CODE:
int a[100][100][100]; Так ?
CODE:int a[100][100][100];
initialarray(#a[0][0][0], -1);
a[0][654][1]=1;
a[5][345][2]=2;
a[4][45][3]=3;
a[0][11][4]=4;
a[3][256][5]=5;
a[1][456][6]=6;
a[2][8766][7]=7;
a[2][256776][8]=8;
a[0][28656][9]=9; (Отредактировано автором: 28 Ноября, 2023 - 11:23:00) |
|
|
Zireael |
Отправлено: 28 Ноября, 2023 - 11:47:50
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: int y[100];
x[0]=1;y[654]=1;
Массив y на 100 элементов, а записываете в 654. Вылет кибор это лишь вопрос времени.
В квадратных скобках указывается индекс, по которому записывать данные, после равно значение элемента. Индексация начинается в 0.
CODE:int x[100];
int y[100];
x[0]=0; y[0]=654;
x[1]=5; y[1]=345;
x[2]=4; y[2]=45;
messagebox(format(x[1])+" "+format(y[1]));
Цитата: Так ?
Нет. Не нужен тут трёхмерный массив, не тратьте время на то что не понимаете.
Что-то уже задача поменялась. Сначала было:
Цитата: Надо отсортировать и кликнуть сначала по самой "маленькой.
Потом по по самой большой
Теперь:
Цитата: Цель: Найти все кнопки с 1м значением "3" и максимальным 2м значением. Потом с 1м значением "2" и максимальным 2м значением, потом с 1м значением "1" и максимальным 2м значением.
Потом тоже самое, но минимальное 2е значение |
|
|
konctantin777 |
Отправлено: 28 Ноября, 2023 - 11:53:20
|
Эксперт
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017
Откуда: Архангельск
Репутация: 6
|
Zireael пишет: Что-то уже задача поменялась
Надо самую маленькую кликнуть. Чтобы сначала только по 1му значению. По аналогии и самую большую (только выбор сначала по 1му значению). И так и так надо. Но решение то одно какое то... (
(Добавление)
CODE:int x[100];
int y[1000000000];
x[0]=0; y[0]=654;
x[1]=5; y[1]=345;
x[2]=4; y[2]=45;
messagebox(format(x[1])+" "+format(y[1]));
Но если не сортировкой, то циклом. Но надо же, чтобы совпадало и перебором же будет очень долго если 2е значение 9и значное ?
(Добавление)
А если большой 2й массив объвить, то сразу вылет...
CODE:int x[100];
int y[10000];
initialarray(#x[0], -1);
initialarray(#y[0], -1);
int a=0;
x[0]=0; y[0]=654;
x[1]=5; y[1]=345;
x[2]=4; y[2]=45;
for (a=0; a<3; a++)
{
messagebox(format(x[a])+" "+format(y[a]));
} (Отредактировано автором: 28 Ноября, 2023 - 11:56:50) |
|
|
|