2015-05-05 4 views
0

Я новичок в прогрессе, и я пытаюсь выяснить, как это сделать. Моя задача - получить список целочисленных значений от пользователя в виде разделителя в виде двоеточия и сообщить самое высокое и самое низкое значение в этом списке. До сих пор я использовал функцию ввода, чтобы помочь мне получить целые числа, введенные пользователем один за другим. как такможно использовать MaximumFuntion в пределах входного Funciton in Progress 4gl

repeat I = 1 to totalEntries: 
    m = entry (I, Userinput, ";"). 
    display m. 
end. 

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

ответ

1

Нет встроенной функции, чтобы указать максимальное или минимальное число из данного списка чисел. Вам нужно написать свою логику, как на большинстве языков программирования. Вот пример:

DEF VAR i  AS INT. 
DEF VAR nlist AS CHAR INIT "1;2;7;3;6;9". 

DEF VAR imin AS INT. 
DEF VAR imax AS INT. 

imin = INTEGER(ENTRY (1, nlist, ";")). 
imax = INTEGER(ENTRY (1, nlist, ";")). 

REPEAT i = 2 TO NUM-ENTRIES(nlist, ";"): 

    IF INTEGER(ENTRY(i, nlist, ";")) > imax THEN 
     imax = INTEGER(ENTRY(i, nlist, ";")). 

    IF INTEGER(ENTRY(i, nlist, ";")) < imin THEN 
     imin = INTEGER(ENTRY(i, nlist, ";")). 

END. 

MESSAGE imax. 
MESSAGE imin. 
+0

Определить переменную numberEntry как представление символа - как заполнение без отмены. – nikita

+0

Эй, Остин, спасибо за ответ, но я дважды проверил, и есть функция Maximum, пожалуйста, найдите код ниже. Это моя вся процедура, которую я имею до сих пор. Определите переменную NumberEntry как представление символа - как заполнение без отмены. Определите переменную UsersInput как символ no-undo. Определите переменную i как целое значение no-undo. Определить переменную totalEntries как целое значение no-undo. Определите переменную m как символ no-undo. Определите переменную n как символ no-undo. Определить кнопку bFind. – nikita

+0

Определить основной номер кадра. Этническая метка «Введите числа, разделенные точкой с запятой». Skip \t \t bНаписать ярлык «Найти Макс и Мин» с боковыми метками. /* Триггер для кнопки */ На выбор bFind в кадре main do: /* Извлеките вход пользователя */ Usersinput = (numberEntry: экранное значение). /*, чтобы узнать, сколько символов у пользователя есть. */ totalEntries = num-entries (UsersInput, ';'). Показать totalentries. /* Логика для извлечения значений ввода пользователем один за другим. */ Повторить i = 1 для totalEntries: M = entry (i, UsersInput, ";"). Дисплей m. Конец. /* Логика, чтобы найти максимальный элемент. */ ..... конец. – nikita

0

Как Остин грустно, нет встроенной функции Незавершенное дать максимальное или минимальное число из списка.

В своем комментарии вы упомянули, что 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 и получить информацию для каждой ситуации, которая представляется необходимой.

Надеюсь, это поможет.

+0

Хм теперь я вижу, где я ошибся, код работает нормально. Спасибо вам, ребята :-) – nikita

Смежные вопросы