一、前言

"喜歡嗎?爸爸買給你"還記得這支曾經紅遍大街小巷的大樂透廣告嗎?本篇文章,不是報名牌,更不會教你如何買大樂透喔!而是會以程式實作的角度,和你分享如何用 LabVIEW 來實現一個簡單的大樂透程式設計。


二、問題描述


請利用陣列特性,試設計一個樂透開獎程式(1-42個號碼)

a.隨機產生6個不重複的號碼。

b.產生的號碼要跟1組對應號碼對獎,比較哪些號碼中了,且中幾個是什麼獎項。

對應號碼: 02、04、08、10、26、34

中獎方式

獎項

與對應號碼六個獎號完全相同者

頭獎

對中對應號碼之任五碼

貳獎

對中對應號碼之四碼

參獎

對中對應號碼之三碼

普獎


三、解題步驟

Step1.分析問題

依照題目的要求,本程式的重要目標條列如下 :
1.號碼介於 1~42 。
2.隨機選出6個不重複的號碼
3.能自由設定對應號碼,並且和隨機產生的號碼做對應。依據中獎號碼個數,判斷所獲獎項為何。

Step2.產生指定的號碼 ( 1~42 )

程式的寫法,每個人可依據自己的想法產出不同的寫法,只要能達成題目要求,就算是完成了。寫出來後,可再依據自己功力的累積,持續優化程式。

依照我們剛分析出來的目標1,我們要產生 1~42 的號碼。所以我們可以運用For 迴圈的 Structure 來產生 1~42的陣列。程式如下圖所示 :


本處要留意一下,因為 i 是從 0 開始計算,所以我們會加入一個 "+1" 的功能方塊。


Step3. 加入 "隨機產出" 的功能

依照題意,要隨機產生 6 號碼,直覺就可以用 For 迴圈來做,因此我們先建一個次數為 6 的迴圈。程式如下圖 :
接下來要用到的技巧為用 "Delete From Array"這個函式,結合Random函式,依序取出我們要的6個數字所形成的陣列。

接下如何產生危機不重複的號碼呢?方法有很多種,我們這邊用一個比較直覺的方法。也就是從剛才建立的1~42的陣列中,取出不放回,就不會有重複的問題。因此在這6次的迴圈中,我們要讓迴圈依照前次處理狀況進行,因此會建立移位暫存器,記錄每次處理狀況,滿足 "取出不放回" 的需求。連結產生42個數字的陣列後,程式碼如下圖 :




那麼該如何實現隨機呢?沒錯,你很容易就聯想到用 "Random"函式方塊。Random這個函式會產生大小介於 0~1 的浮點數,當基數越大,產生出來的數值離散程度會越明顯。因此,為了在42的範圍內,我們從42開始,與目前迴圈中的 " i " 值相減,再乘上 random 函式所產生的值。

整合  "Delete From Array" 這個函式,你將能獲得 6 個範圍在1~42間的數字陣列。


Step4.對應選定的號碼,得知獲得什麼獎項 

這部分我們會使用到 " Search 1D array " 函式,來比對隨機產生的號碼和原本預設的號碼,符合條件的將會累加。結合前面的程式碼,顯示如下 :




最後再利用 " Case Structure ",依據題意設定相應的條件。(0和1的條件同2)


最後把所有的程式碼整合起來,即大功告成。程式碼如下 :


人機介面顯示如下 :


#labview #lottery #array 

0 留言