Форум компании Кронос-Информ
https://www.cronos.ru/cgi-bin/YaBB2/YaBB.cgi
Конференции для пользователей >> CronosPRO: формулы >> Сортировка элементов массива по возрастанию
https://www.cronos.ru/cgi-bin/YaBB2/YaBB.cgi?num=1667904699

Сообщение написано Евгений Кузнецов в 08.11.2022 :: 14:51:39

Заголовок: Сортировка элементов массива по возрастанию
Создано Евгений Кузнецов в 08.11.2022 :: 14:51:39
Здравствуйте. Не могу разобраться с созданием пользовательской функции.

Цитировать:
Создайте пользовательскую функцию SortDigit. Параметром функции является массив, элементами которого могут быть числа, строки и пустые значения. Результат работы функции — сортированный по возрастанию массив, включающий только числа из исходного массива. Для сортировки массива используйте встроенную функцию SortEx.

Вариант алгоритма функции SortDigit


Я, так, понимаю, функция должна иметь примерный вид:

Code (c++):
@M
@i:=VALCOUNT (@M)
WHILE @M>0 DO
IF NUM @M(@i)
THEN
@M(@i):=@S
@i:=@i-1
MESSAGE (
@res:=SORTEX(@S,1);)

Заголовок: Re: Сортировка элементов массива по возрастанию
Создано Sinilga в 08.11.2022 :: 18:08:36
Первые две строки абсолютно правильные.
Дальше надо разбираться:

Цитировать:
@M
@i:=VALCOUNT (@M)


WHILE @M>0 DO            // 1) Смотрим на блок-схему: там написано "@i  > 0";
                                      // 2) тело цикла нужно взять в скобки (посмотрите примеры
                                      //     оформления цикла в документации)

   IF NUM @M(@i) THEN   // Здесь действительно нужна функция NUM,
                                      // но ее параметр следует взять в скобки

   @M(@i):=@S               // "Добавить @M(@i) в массив @S". Вы делаете наоборот -
                                      // записываете @S в @M(@i).
                                       // Почитайте раздел о работе с массивами 

   @i:=@i-1                      // здесь все правильно


// Цикл закончился
// Результат функции SORTEX нужно присвоить специальной переменной @ret
// На этом работа пользовательской функции завершается


// MESSAGE лучше вынести в ту формулу, из который вы вызываете SortDigit. Чтобы выдать все элемены массива в строчку используйте фукцию CATVAL

MESSAGE (
   @res:=SORTEX(@S,1);)



Форум компании Кронос-Информ » Powered by YaBB 2.5.2!
YaBB © 2000-2009. Все права защищены.

Localization by mySOPROMAT.ru