Как Остин грустно, нет встроенной функции Незавершенное дать максимальное или минимальное число из списка.
В своем комментарии вы упомянули, что MAXIMUM (1,2,3) работал. Да, это работает, но вам нужно понять, что вы передаете три параметра функции, а не список чисел внутри одной переменной CHAR
.
Чтобы решить вашу проблему, вы можете использовать решение, данное Austin, или можете использовать две функции, которые получают переменную CHAR
с разделителями с двоеточием и возвращают максимальные или минимальные значения.
Вот пример, основанный на вашем коде.
FUNCTION iMax RETURNS INTEGER
(INPUT pData AS CHAR):
DEF VAR iOutput AS INT NO-UNDO.
DEF VAR iCount AS INT NO-UNDO.
iOutput = ?.
DO iCount = 1 TO NUM-ENTRIES(pData,';'):
IF iOutput = ? THEN DO:
iOutput = INT(ENTRY(iCount,pData,';')).
NEXT.
END.
iOutput = MAX(iOutput,INT(ENTRY(iCount,pData,';'))).
END.
RETURN iOutput.
END FUNCTION.
FUNCTION iMin RETURNS INTEGER
(INPUT pData AS CHAR):
DEF VAR iOutput AS INT NO-UNDO.
DEF VAR iCount AS INT NO-UNDO.
iOutput = ?.
DO iCount = 1 TO NUM-ENTRIES(pData,';'):
IF iOutput = ? THEN DO:
iOutput = INT(ENTRY(iCount,pData,';')).
NEXT.
END.
iOutput = MIN(iOutput,INT(ENTRY(iCount,pData,';'))).
END.
RETURN iOutput.
END FUNCTION.
/****************/
Define variable NumberEntry as character view-as fill-in no-undo.
Define variable UsersInput as character no-undo.
Define variable i as integer no-undo.
Define variable totalEntries as integer no-undo.
Define variable m as character no-undo.
Define variable n as character no-undo.
Define button bFind.
Define frame main numberEntry label "Enter numbers separated by semi colon" skip
bFind label "Find Max and Min" with side-labels. /*Trigger for button*/
On choose of bFind in frame main do: /*Retrieve the users input*/
Usersinput = (numberEntry:screen-value). /*to find out how many characters the user has enterd.*/ totalEntries = num-entries(UsersInput,';'). Display totalentries. /*Logic to extract Users input values one by one.*/
Repeat i = 1 to totalEntries: M = entry(i, UsersInput, ";").
Display m.
End. /*Logic to find the maximum element. */ .....
MESSAGE 'MAXIMUM :' iMax(UsersInput) SKIP
'MINIMUM :' iMin(UsersInput)
VIEW-AS ALERT-BOX INFO BUTTONS OK.
END.
VIEW FRAME main.
ENABLE ALL WITH FRAME main.
WAIT-FOR CHOOSE OF bfind.
Вы можете позвонить iMax()
или iMin()
и получить значение MAX или MIN от прогресса MAXIMUM
и MINIMUM
функции, используя CHAR
список INTEGER
значений, разделенный пола двоеточия без необходимости, чтобы сделать полный блок кода, чтобы сделать Comparision и получить информацию для каждой ситуации, которая представляется необходимой.
Надеюсь, это поможет.
Определить переменную numberEntry как представление символа - как заполнение без отмены. – nikita
Эй, Остин, спасибо за ответ, но я дважды проверил, и есть функция Maximum, пожалуйста, найдите код ниже. Это моя вся процедура, которую я имею до сих пор. Определите переменную NumberEntry как представление символа - как заполнение без отмены. Определите переменную UsersInput как символ no-undo. Определите переменную i как целое значение no-undo. Определить переменную totalEntries как целое значение no-undo. Определите переменную m как символ no-undo. Определите переменную n как символ no-undo. Определить кнопку bFind. – nikita
Определить основной номер кадра. Этническая метка «Введите числа, разделенные точкой с запятой». Skip \t \t bНаписать ярлык «Найти Макс и Мин» с боковыми метками. /* Триггер для кнопки */ На выбор bFind в кадре main do: /* Извлеките вход пользователя */ Usersinput = (numberEntry: экранное значение). /*, чтобы узнать, сколько символов у пользователя есть. */ totalEntries = num-entries (UsersInput, ';'). Показать totalentries. /* Логика для извлечения значений ввода пользователем один за другим. */ Повторить i = 1 для totalEntries: M = entry (i, UsersInput, ";"). Дисплей m. Конец. /* Логика, чтобы найти максимальный элемент. */ ..... конец. – nikita