「HSPを覚えたい」という趣旨では無い様なのでソース捨てとく。
randomize
TestCount = 1000 // テストを繰り返す回数
LotSize = 1000 // ロットのワーク数
NgRate = 0.0133 // ワークのNG率指定(1.33%)
SampleCount = 200 // サンプル抽出数
OkLevel = 2 // ロットがOKになる不良品数最大値( 31以上はNG )
LotOk = 0 // ロットとしてOKになった回数
LotNg = 0 // ロットとしてNGになった回数
dim Lot , LotSize // ロット領域初期化
NgCount = int( NgRate * LotSize ) // NG率から、ロット内不良品数を算出
repeat TestCount // 指定回数繰り返す
gosub *init // 初期化
gosub *main // 集計
gosub *term // 判定
loop
mes "LOT OK : " + LotOk // OKになったロットの件数
mes "LOT NG : " + LotNg // NGになったロットの件数
stop
*init // 初期化部
repeat LotSize // ロットのワーク数だけ繰り返す
Lot( cnt ) = 0 // ロットのワークを全て0(良品)にする
loop
count = 0 // カウントを初期化
while ( count < NgCount ) // カウントがロット内不良品数を超えるまで繰り返す
trg = rnd( LotSize ) // ランダムにワークを選ぶ
if Lot( trg ) == 1 : _continue // 既に不良品にしていたら、やり直し
Lot( trg ) = 1 // このワークを1(不良品)とする
count++ // カウントを増やす
wend
return
*main // 集計部
ok = 0 // ロット内良品数
ng = 0 // ロット内不良品数
count = 0 // カウントを初期化
while ( count < SampleCount ) // カウントがサンプル抽出数を超えるまで繰り返す
trg = rnd( LotSize ) // ランダムにワークを選ぶ
switch Lot( trg ) // ワークの内容別処理開始
case 0 // 0(良品)だったら
ok++ // 良品カウントを増やし
swbreak // ワーク内容別処理を抜ける
case 1 // 1(不良品)だったら
ng++ // 不良品カウントを増やし
swbreak // ワーク内容別処理を抜ける
default // それ以外だったら
_continue // 最初からやり直し
swbreak // ワーク内容別処理を抜ける
swend // ワークの内容別処理終了
Lot( trg ) = 2 // 処理の終わったワークにはマークをつける(2にしておく)
count++ // カウントを増やす
wend
return
*term // 判定部
if ng > OkLevel { LotNG++:return } // NG個数が許容レベルを超えていたらロットNGカウントを増やして終了
LotOk++ // ロットOKカウントを増やして終了
return