待ち行列

待ち行列の表

教科書の表と同じものです。客の到着間隔とサービスにかかる時間がわかれば、表の全部の欄を埋めることができます。表の仕組みを理解するために、枠になっている欄内に数値を入れて採点してみてください。

客No 到着間隔 到着時刻 開始時刻 サービス時間 終了時刻 待ち時間
1 - 5
2 5
3 5
4 5
5 5

正答数:  正答率: %

[新規問題]をクリックすると到着間隔が乱数で設定されます。サービス時間は5分に固定です。到着時刻、サービス開始時刻、サービス終了時刻、サービス開始までの待ち時間の空欄に数値を入れて、[採点]のボタンを押すと採点されます。

間違ったところを訂正して[採点]のボタンを押し全問正解をめざします。正解したら[送信]のボタンを押してください。

[新規問題]を押せばいつでも新しい問題に替わります。そのときは入力した数値がクリアされますから注意してください。

待ち時間が全員0分になることもあります。その場合は簡単過ぎますから、[新規問題]を押して少なくとも一人は待ち時間が1分以上になる例で100%正解にしてから送信してください。

課題 1 サービス時間は5分に固定

面倒なのでJavaでプログラムを組んでみます。単純な作業の繰り返しですから、それほど難しくはないのですが、変数の名前を工夫しないと繰り返した時に間違うことがあります。

プログラム名 Machi01.java

public class Machi01 {
    public static void main( String[] args ) {
        int datanum = 100;
        int kankakumax = 12;
        int maeTouchaku = 0;
        int maeShuryou = 0;
        int kankaku = 0;
        int touchaku;
        int kaishi, svjikan, shuryou, machijikan;
        String fmt = "%f %f %8d %8d %18.16f \n";
         
        for (int i=1 ;datanum>=i ;i++){
            touchaku = maeTouchaku + kankaku;
            if (touchaku > maeShuryou){
                kaishi = touchaku;
             }
            else {
                kaishi = maeShuryou;
             }
            svjikan = 5;
            shuryou = kaishi + svjikan;
            machijikan = kaishi - touchaku;
            System.out.printf("%5d %5d %8d %8d %5d %8d %5d\n"
                  ,i,kankaku,touchaku,kaishi
                  ,svjikan,shuryou,machijikan);
            maeTouchaku = touchaku;
            maeShuryou = shuryou;
            kankaku = (int)(Math.random()*kankakumax+1);
                                    /*1からkankakumaxの乱数*/
         }//forの終わり
    }//mainの終わり
}//classの終わり

プログラム解説 Machi01.java

次の人が到着した時に、前の人のサービスが終わっているかどうかで開始時間が変わります。

int datanum = 100
100人分処理するという事です。
int kankakumax = 12
1分から12分の12の部分を後から変えられるようにしましたが1分の方を書いていないのはついうっかり。悔やまれるところです。
int maeShuryou = 0;
maeと付いているのは「前の人の」という意味。最初の人は前の人がいませんから初期値は0にしておきます。
for (i=1 ;datanum>=i ;i++){
冒頭で書いた人数分繰り返し行います
touchaku = maeTouchaku + kankaku;
間隔は前の人が到着してから次の人が来るまでの時間です。プログラムのあとの方で乱数により決めます。
if (touchaku > maeShuryou){
サービス開始時間は到着時刻と前の人のサービス終了時間の大きい方になりますが、ifを使ってわかりやすく表現しました。
svjikan = 5;
サービス時間はいつも5分ですが、あとで3分から7分までの一様乱数にするので、その時との比較のためにあえてここに書いています。
shuryou = kaishi + svjikan;
終了時間はもちろん開始時間にサービス時間を足したものです。
machijikan = kaishi - touchaku;
待ち時間を計算します。
printf ("%5d %5d %8d %8d %5d %8d %5d\n"
,i,kankaku,touchaku,kaishi
,svjikan,shuryou,machijikan);
3行に書いてありますが、コンパイラにとっては1行です。表の1行分を書きます。
maeTouchaku = touchaku;
maeShuryou = shuryou;
次の人のために現在の人の数値を前の人のものにします。
kankaku = (int)(Math.random()*kankakumax+1);
次の人が来るまでの時間を一様乱数で決定する。これで1から12分までの乱数になります。

実行結果 Machi01.java

$ javac Machi01.java 
$ java Machi01
    1     0        0        0     5        5     0
    2     9        9        9     5       14     0
    3     9       18       18     5       23     0
    4    10       28       28     5       33     0
    5     7       35       35     5       40     0
    6     8       43       43     5       48     0
    7     2       45       48     5       53     3
    8     6       51       53     5       58     2
    9     1       52       58     5       63     6
   10     3       55       63     5       68     8
   11     7       62       68     5       73     6
   12     2       64       73     5       78     9
   13     1       65       78     5       83    13
   14     6       71       83     5       88    12
   15     7       78       88     5       93    10
   16     3       81       93     5       98    12
   17     9       90       98     5      103     8
   18     3       93      103     5      108    10
   19     9      102      108     5      113     6
   20    10      112      113     5      118     1
   21    12      124      124     5      129     0
   22    11      135      135     5      140     0
   23     6      141      141     5      146     0
   24    10      151      151     5      156     0
   25     1      152      156     5      161     4
   26     3      155      161     5      166     6
   27     6      161      166     5      171     5
   28     8      169      171     5      176     2
   29    12      181      181     5      186     0
   30     5      186      186     5      191     0
   31    12      198      198     5      203     0
   32     8      206      206     5      211     0
   33     7      213      213     5      218     0
   34    12      225      225     5      230     0
   35     8      233      233     5      238     0
   36    10      243      243     5      248     0
   37     3      246      248     5      253     2
   38     5      251      253     5      258     2
   39    11      262      262     5      267     0
   40     8      270      270     5      275     0
   41    11      281      281     5      286     0
   42     5      286      286     5      291     0
   43     3      289      291     5      296     2
   44     4      293      296     5      301     3
   45     4      297      301     5      306     4
   46     5      302      306     5      311     4
   47     2      304      311     5      316     7
   48    12      316      316     5      321     0
   49     2      318      321     5      326     3
   50     8      326      326     5      331     0
   51     9      335      335     5      340     0
   52    12      347      347     5      352     0
   53     5      352      352     5      357     0
   54     4      356      357     5      362     1
   55    12      368      368     5      373     0
   56    12      380      380     5      385     0
   57     3      383      385     5      390     2
   58     4      387      390     5      395     3
   59     2      389      395     5      400     6
   60     5      394      400     5      405     6
   61     9      403      405     5      410     2
   62     3      406      410     5      415     4
   63     8      414      415     5      420     1
   64     2      416      420     5      425     4
   65     8      424      425     5      430     1
   66     4      428      430     5      435     2
   67     1      429      435     5      440     6
   68     2      431      440     5      445     9
   69     4      435      445     5      450    10
   70     1      436      450     5      455    14
   71     3      439      455     5      460    16
   72    11      450      460     5      465    10
   73     6      456      465     5      470     9
   74     1      457      470     5      475    13
   75    10      467      475     5      480     8
   76    12      479      480     5      485     1
   77    12      491      491     5      496     0
   78     2      493      496     5      501     3
   79    12      505      505     5      510     0
   80    12      517      517     5      522     0
   81     1      518      522     5      527     4
   82     8      526      527     5      532     1
   83     6      532      532     5      537     0
   84     7      539      539     5      544     0
   85    12      551      551     5      556     0
   86     3      554      556     5      561     2
   87     2      556      561     5      566     5
   88     5      561      566     5      571     5
   89    11      572      572     5      577     0
   90     2      574      577     5      582     3
   91     7      581      582     5      587     1
   92     7      588      588     5      593     0
   93     1      589      593     5      598     4
   94     3      592      598     5      603     6
   95     2      594      603     5      608     9
   96     9      603      608     5      613     5
   97     3      606      613     5      618     7
   98     4      610      618     5      623     8
   99     9      619      623     5      628     4
  100    11      630      630     5      635     0

課題 2 サービス時間は3から7分

教科書にあるサービス時間が3から7の一様乱数である時のプログラムにします。

Machi01.java では svjikan = 5; というところがあり、これがサービス時間が5分固定としています。

プログラム名 Machi02.java

svjikan = 5; 
      ↓       rand().... を使って3から7の数値になるようにします
      ↓        変更はこの1行だけです
svjikan = (int)(Math.random() ???????????????????? );

ヒントは

/* 1からkankakumaxのとき */
kankaku = (int)(Math.random()*kankakumax+1);

int a = (int)(Math.random()*12+1) で a には 1から12までの整数の一様乱数(のひとつ)が入ります。その過程の説明です。

値の範囲 値の種類 解説
Math.random() 0 ≦ a < 1 浮動小数点数
Math.random()*12 0 ≦ a < 12 浮動小数点数 1から12の12種類の数が必要なので12を掛ける
Math.random()*12+1 1 ≦ a < 13 浮動小数点数 1から12なので1を足す
(int)(Math.random()*12+1) 1 ≦ a ≦ 12 整数 (int)で小数点以下が切り捨てられる。 1 ≦ a < 13 の整数と 1 ≦ a ≦ 12 の整数は同じ意味

実行結果 Machi02.java

$ javac Machi02.java 
$ java Machi02
    1     0        0        0     3        3     0
    2     6        6        6     4       10     0
    3     4       10       10     5       15     0
    4     6       16       16     7       23     0
    5     4       20       23     4       27     3
    6     7       27       27     7       34     0
    7     9       36       36     5       41     0
    8     2       38       41     4       45     3
    9     7       45       45     3       48     0
   10     8       53       53     3       56     0
   11     1       54       56     5       61     2
   12    12       66       66     7       73     0
   13     2       68       73     4       77     5
   14    12       80       80     6       86     0
   15    10       90       90     4       94     0
   16     4       94       94     7      101     0
   17    11      105      105     5      110     0
   18    12      117      117     3      120     0
   19    11      128      128     7      135     0
   20    10      138      138     7      145     0
   21     4      142      145     5      150     3
   22    12      154      154     4      158     0
   23    12      166      166     7      173     0
   24    10      176      176     7      183     0
   25    12      188      188     6      194     0
   26     5      193      194     7      201     1
   27     8      201      201     6      207     0
   28     9      210      210     4      214     0
   29     3      213      214     4      218     1
   30     3      216      218     6      224     2
   31    12      228      228     5      233     0
   32     2      230      233     7      240     3
   33     9      239      240     4      244     1
   34     3      242      244     5      249     2
   35     3      245      249     4      253     4
   36    12      257      257     7      264     0
   37     4      261      264     3      267     3
   38     2      263      267     6      273     4
   39     9      272      273     7      280     1
   40     8      280      280     3      283     0
   41     4      284      284     4      288     0
   42     3      287      288     5      293     1
   43    12      299      299     7      306     0
   44    12      311      311     6      317     0
   45     9      320      320     4      324     0
   46    10      330      330     5      335     0
   47     5      335      335     6      341     0
   48    10      345      345     5      350     0
   49     5      350      350     3      353     0
   50     1      351      353     3      356     2
   51    10      361      361     4      365     0
   52     7      368      368     5      373     0
   53     4      372      373     7      380     1
   54    12      384      384     6      390     0
   55    11      395      395     5      400     0
   56     5      400      400     6      406     0
   57     7      407      407     3      410     0
   58    11      418      418     3      421     0
   59    10      428      428     6      434     0
   60    11      439      439     7      446     0
   61     7      446      446     7      453     0
   62     3      449      453     5      458     4
   63     5      454      458     3      461     4
   64    11      465      465     5      470     0
   65     4      469      470     5      475     1
   66     1      470      475     7      482     5
   67    10      480      482     4      486     2
   68     5      485      486     6      492     1
   69     9      494      494     5      499     0
   70    11      505      505     6      511     0
   71     4      509      511     5      516     2
   72     2      511      516     7      523     5
   73     1      512      523     7      530    11
   74    11      523      530     5      535     7
   75     1      524      535     7      542    11
   76     8      532      542     4      546    10
   77    11      543      546     4      550     3
   78     7      550      550     3      553     0
   79     1      551      553     5      558     2
   80     4      555      558     4      562     3
   81    11      566      566     5      571     0
   82     1      567      571     7      578     4
   83     4      571      578     7      585     7
   84     5      576      585     6      591     9
   85     8      584      591     4      595     7
   86     1      585      595     5      600    10
   87    10      595      600     5      605     5
   88     9      604      605     7      612     1
   89     6      610      612     6      618     2
   90     9      619      619     6      625     0
   91     8      627      627     3      630     0
   92     3      630      630     6      636     0
   93     3      633      636     6      642     3
   94     1      634      642     6      648     8
   95     6      640      648     6      654     8
   96     8      648      654     5      659     6
   97     3      651      659     7      666     8
   98    11      662      666     3      669     4
   99     2      664      669     4      673     5
  100     4      668      673     6      679     5