Форум ДИЦ

Пользовательский и Дилерский форум ДИЦ
Текущее время: Ср янв 24, 2018 8:03 am

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Сортировка массива: Variant[]
СообщениеДобавлено: Чт ноя 02, 2017 5:49 pm 
Не в сети

Зарегистрирован: Вт авг 01, 2017 8:09 pm
Сообщения: 19
Неправильно сортируется массив Variant[]
После сортировки ноль может стать меньше отрицательного числа

Пример:
Код:
proc test;
  var arV: Variant[];
  var arI: Integer[];
    arV[8]=0;
    arV[9]=-1;
    SortArray(arV);
    trace(arV);
    --[...3:0,...9:-1] - для Variant - ноль стал меньше -1

    arI[8]=0;
    arI[9]=-1;
    SortArray(arI);
    trace(arI);
    --[-1,...4:0] - для Integer все правильно
end;

(nil < -1) всегда true
(nil = 0) всегда true
Имеем проблему для отрицательных чисел
Для остальных типов (не числовых) - все соответствует нормам и не конфликтует в сортировке

_________________
ТБ.Бюджет


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сортировка массива: Variant[]
СообщениеДобавлено: Пт ноя 03, 2017 2:16 pm 
Не в сети

Зарегистрирован: Вт авг 01, 2017 8:09 pm
Сообщения: 19
SearchInArray с параметром binary=true - некорректно ищет в отсортированном массиве повторяющиеся значения,
например, для массива [-1,1,2,3,3,3,3,3,3,3,4] найдет 3 не в 4-й позиции, а в любой из диапазона [4;10]

_________________
ТБ.Бюджет


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сортировка массива: Variant[]
СообщениеДобавлено: Пт ноя 03, 2017 2:39 pm 
Не в сети

Зарегистрирован: Вт авг 01, 2017 8:09 pm
Сообщения: 19
Для SearchNearestInArray аналогичная проблема, как и для SearchInArray при бинарном поиске.

_________________
ТБ.Бюджет


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сортировка массива: Variant[]
СообщениеДобавлено: Пн ноя 13, 2017 3:45 pm 
Не в сети

Зарегистрирован: Вт авг 01, 2017 8:09 pm
Сообщения: 19
Не работает представление двумерного массива как одномерный для SortArray и SearchInArray
Очень актуально для сортировки двумерного массива по всем столбцам слева на право в порядке возрастания
Сортировка проходит "нативно" и за один вызов SortArray, единственное условие - сортируемый массив должен приниматься как одномерный.

Пример кода с возникновением ошибки:
Код:
  proc test_SortArray;
    var ar1: variant[];
    var ar2: variant[2];
    var p: integer;

    SortArray(ar1 as variant[2], [1]); -- Работает представление одномерного массива как двумерный, но не сортирует
    p = SearchInArray(ar1 as variant[2], 777, [1]); -- Работает представление одномерного массива как двумерный

    try
      SortArray(ar2 as variant[]); -- Не работает представление двумерного массива как одномерный
                                   -- ошибка: Для массива размерности 2 требуется задать 1 индекс(ов)
    except
      Message("Error in SortArray:" + ErrorText);
    end;

    try
      p = SearchInArray(ar2 as variant[], [1, 2]); -- Не работает представление двумерного массива как одномерный
                                                   -- ошибка:   Для массива размерности 2 требуется задать 1 индекс(ов)
    except
      Message("Error in SearchInArray:" + ErrorText);
    end;
  end;

_________________
ТБ.Бюджет


Последний раз редактировалось jurjob Ср ноя 15, 2017 11:20 am, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сортировка массива: Variant[]
СообщениеДобавлено: Пн ноя 13, 2017 7:32 pm 
Не в сети

Зарегистрирован: Вт авг 01, 2017 8:09 pm
Сообщения: 19
Протестировал кусок кода который не ругался :shock:
На реальных данных SortArray просто ничего не делал!
и только SearchInArray сработал верно

Код:
  SortArray(ar1 as variant[2], [1]); -- Работает представление одномерного массива как двумерный
    p = SearchInArray(ar1 as variant[2], 777, [1]); -- Работает представление одномерного массива как двумерный

_________________
ТБ.Бюджет


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сортировка массива: Variant[]
СообщениеДобавлено: Вт ноя 14, 2017 11:29 am 
Не в сети

Зарегистрирован: Сб май 14, 2005 5:12 pm
Сообщения: 1631
Первые два замечания - поправил.
Насчет многомерных массивов - еще подумаю.
Спасибо за замечания.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сортировка массива: Variant[]
СообщениеДобавлено: Ср дек 27, 2017 6:23 pm 
Не в сети

Зарегистрирован: Вт авг 01, 2017 8:09 pm
Сообщения: 19
можно ли считать объект arr: ArrayT9 - аналогом разряженного массива для турбо9?
Код:
class "Разряженный массив" synonym ArrayT9;

inobject private

var  данные: Variant[];
var  индекс: Integer[];
var  длина: Integer;
func КакМассив: Variant[];
var j: integer;
  for j = 1..LengthOfArray(индекс) do
    Result[j] = данные[индекс[j]];
  od;
  if LengthOfArray(Result) <  длина:
    Result[длина] = nil;
  fi;
end;

-- где данные и индекс - не разряженный массив (не содержит nil)
-- индекс состоит из не повторяющихся целых положительных чисел

если
arr.данные = [x,y,z];
arr.индекс = [2,5,7]
arr.длина = 9
arr.КакМассив вернет [nil,x,nil,nil,y,nil,z,nil,nil]

В общем, не хватает методов изменения массива индекс
LoadIndex, GetIndex

_________________
ТБ.Бюджет


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сортировка массива: Variant[]
СообщениеДобавлено: Чт янв 11, 2018 5:47 pm 
Не в сети

Зарегистрирован: Вт авг 01, 2017 8:09 pm
Сообщения: 19
Вопрос по существу!
Имеет ли смысл писать на форум просьбы о доработке 9.5?
Полностью ли прекращена доработка 9.5 в связи с новым проектом Х?
Все таки заменять ядерные функции на "свои" - явная потеря производительности.

_________________
ТБ.Бюджет


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сортировка массива: Variant[]
СообщениеДобавлено: Пт янв 12, 2018 12:03 pm 
Не в сети

Зарегистрирован: Сб май 14, 2005 5:12 pm
Сообщения: 1631
Имеет. Мы в любом случае учитываем просьбы при разработке новой версии.
А те функции которые можно безопасно включить в 9.5 будут включаться в обе версии.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB