2015-05-05 63 views
0

我是新來的進步,我想弄清楚如何讓這個工作。我的任務是從用戶獲取一個整數值列表,用分號分隔,並在該列表中顯示最高和最低值。到目前爲止,我已經使用了一個入口函數來幫助我逐一獲取用戶輸入的整數。像這樣是否有可能在正在進行的輸入函數中使用MaximumFuntion 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

嘿奧斯汀,感謝您的回覆,但我已經加倍檢查,並有一個稱爲最大功能,請找到下面的代碼。這是我迄今爲止的整個過程。將變量NumberEntry定義爲字符視圖 - 作爲無法撤消的填充。 將變量UsersInput定義爲字符不撤銷。 將變量i定義爲整數不撤銷。 將變量totalEntries定義爲整數無撤消。 將變量m定義爲字符no-undo。 將變量n定義爲字符no-undo。 定義按鈕b找到。 – nikita

+0

定義框架主要numberEntry標籤「輸入用分號分隔的數字」跳過 \t \t b找到帶有側標籤的標籤「Find Max and Min」。 /*觸發按鈕*/ 關於在框架主選擇bFind do: /*檢索用戶輸入*/ UsersInput =(numberEntry:screen-value)。 /*找出用戶輸入的字符數。*/ totalEntries = num-entries(UsersInput,';')。 顯示totalentries。 /*邏輯提取用戶輸入值一個接一個*/ 重複i = 1到totalEntries: M = entry(i,UsersInput,「;」)。 顯示m。 結束。 /*找到最大元素的邏輯。 */ ..... 結束。 – nikita

0

由於奧斯汀的悲傷,在列表中沒有內置的函數來給出最大或最小值。

在你的評論中,你提到MAXIMUM(1,2,3)有效。是的,它可以工作,但是你必須確定你將三個參數傳遞給函數,而不是單個CHAR變量內的數字列表。

爲了解決您的問題,您可以使用奧斯汀給出的解決方案,或者您可以使用兩個函數接收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()和使用INTEGER值的CHAR列表,無需通過半冒號分隔,使一個完整的代碼塊做對比,從進展MAXIMUMMINIMUM功能得到最大或最小值,並得到提供必要的每種情況的信息。

希望它有幫助。

+0

嗯現在我看到我錯了代碼工作正常。感謝你們 :-) – nikita

相關問題