阿摩線上測驗 登入

申論題資訊

試卷:110年 - 110 經濟部所屬事業機構_新進職員甄試_資訊:1.資訊管理 2.程式設計#103708
科目:國營事業◆1.資訊管理 2.程式設計
年份:110年
排序:0

申論題內容

五、某銀行有多台取號機供民眾取號,每台取號機提供多項服務的取號,同一服務會依據各取號機之取號的先後時間,依序給予連續的號碼,且最小的號碼為1。請使用下列所有的函式來撰寫一取號函式GetNumber,輸入為服務代碼與鎖定號碼變數失敗的上限次數,其傳回為此服務的下一個號碼,但當鎖定號碼變數失敗超過其上限次數時,則傳回0。(15分)
int lock(int serviceid)            /* 鎖定指定服務代碼的號碼變數。輸入為服務代碼,其傳回為是否鎖定成功,當鎖定成功時,則傳回 1,當鎖定失敗時,則傳回 0。 */
unlock(int serviceid)            /* 解鎖指定服務代碼的號碼變數。輸入為服務代碼。 */
int get(int serviceid)            /* 取得指定服務代碼的號碼變數之值。輸入為服務代碼。 */
set(int serviceid, int value) /* 設定指定服務代碼的號碼變數之值。輸入為服務代碼與此服務代碼的號碼變數欲設定之值。 */
sleep()                               /* 執行暫停 0 .1 秒 */

詳解 (共 3 筆)

詳解 提供者:111考生

int GetNumber(int serviceid, int ErrorLimit){

int Number=0;

    while(ErrorLimit--){

        if(lock(serviceid)){

           Number=get(serviceid)+1;//題意要求『傳回為此服務的下一個號碼』故必須先加1才對

           set(serviceid, Number);

           unlock(serviceid);

           break;

        }

        else{sleep();}

    }

return Number;

}

詳解 提供者:Grace

int GetNum(int serviceid, failedNum) {
    set(servicedid, failedNum);
    
    int count ==0;
    while(true){
        if(look(servicedid) == 0){
            count++;
            if (count == failedNum) {
                sleep();
                return 0;
            }
        }else {
            unlock(servicedid);
            return get(servicedid) +1;  //下一號碼
        }
    }
}

詳解 提供者:茶茶
求解