jug7.com
[ home / cgi / juggler / column / diary / bbs / link / welcome ]


source : パチスロ簡易計算機


#!/usr/bin/perl
# パチスロ簡易計算機

$cginame  = 'calc.cgi';
$title    = 'パチスロ簡易計算機';

print "Content-Type: text/html\n\n";

if ($ENV{'REQUEST_METHOD'} eq 'POST') {
    read (STDIN, $input, $ENV{'CONTENT_LENGTH'});

    foreach $str (split(/&/,$input)) {
        ($key,$value) = split(/=/, $str);
        $in{$key} = $value;
    }
}

$in{'sub'}       = 1 if !$in{'sub'};
$chk[$in{'sub'}] = 'checked';
$in{'rate1'}     = 5 if !$in{'rate1'};
$in{'point2'}    = 3 if !$in{'point2'};
$in{'point4'}    = 3 if !$in{'point4'};

# ヘッダとフォームの表示
print <<"__ HTML __";
<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>
<html lang='ja'>
<head>
<meta http-equiv='Content-Type' content="text/html; charset=shift_jis">
<title>jug7.com - cgi $title</title>
 <style type="text/css"> <!--
   A:hover {color:#ff0000;}
 --></style>
</head>
<body text='#000000' bgcolor='#ffffff' link='#0000ff' alink='#ff0000' vlink='#0000cc'>
<font size=7><b><font face='Times New Roman,Times'>jug</font><font face='Bookman Old Style,arial black,Helvetica Black'>7</font><font face='Times New Roman,Times'>.com</font></b></font>
<hr color='#00aa00'>

<strong>[ <a href='../index.html'>home</a> / <a href='index.html'>cgi</a> / <a href='../jug/index.html'>juggler</a> / <a href='../column.html'>column</a> / <a href='../diary/index.html'>diary</a> / <a href='bbs.cgi'>bbs</a> / <a href='../link.html'>link</a> / <a href='../intro.html'>welcome</a> ]</strong>
<div align='center'><h2>$title</h2></div>
<hr width='70%'>
<div align='right'>[ <a href='calc_memo.html'>memo</a> / <a href='calc.html'>source</a> ]</div>
<br><br><center>
<form action='$cginame' method='POST'>
<table border=1 align='center' cellspacing=0><tr valign='top'><td>
<table border=0 cellspacing=0 cellpadding=2 width='100%'>
<tr><td bgcolor='#ffffcc' colspan=2><input type='radio' name='sub' value=1 $chk[1]> <b>機械割の計算</b></td></tr>
<tr><td>プレイ数</td><td><input type='text' size=14 name='play1' value="$in{'play1'}"> P</td></tr>
<tr><td>投資</td><td><input type='text' size=14 name='in1' value="$in{'in1'}"> k</td></tr>
<tr><td>獲得コイン</td><td><input type='text' size=14 name='coin1' value="$in{'coin1'}"> 枚</td></tr>
<tr><td>換金率</td><td><input type='text' size=2 name='rate1' maxlength=3 value="$in{'rate1'}">
 <font size=2>枚 = 100円</font></td></tr>
</table>
</td><td>
<table border=0 cellspacing=0 cellpadding=2 width='100%'>
<tr><td bgcolor='#ffffcc' colspan=2><input type='radio' name='sub' value=2 $chk[2]>
 <b>確率の計算 ( <font size=2>単純な割り算</font> )</b></td></tr>
<tr><td>プレイ数</td><td><input type='text' size=14 name='play2' value="$in{'play2'}"> P</td></tr>
<tr><td>当選</td><td><input type='text' size=14 name='hit2' value="$in{'hit2'}"> 回</td></tr>
<tr><td>表\示</td><td><font size=2>小数点 第
 <input type='text' maxlength=2 size=2 name='point2' value="$in{'point2'}"> 桁<br>まで表\示</font></td></tr>
</table>
</td><td>
<table border=0 cellspacing=0 cellpadding=2 width='100%'>
<tr><td bgcolor='#ffffcc' colspan=2><input type='radio' name='sub' value=5 $chk[5]>
 <b>組み合わせの計算</b></td></tr>
<tr><td><input type='text' size=7 name='str1' value="$in{'str1'}"> C <input type='text' size=7 name='str2' value="$in{'str2'}"></td></tr>
<tr><td><br>例)10 C 3<br><font size=2>10個の中から3個選ぶ<br>組み合わせの場合を計算。</font></td></tr>
</table>
</td>
</tr><tr valign='top'><td>
<table border=0 cellspacing=0 cellpadding=2 width='100%'>
<tr><td bgcolor='#ffffcc' colspan=2><input type='radio' name='sub' value=3 $chk[3]> <b>合成確率の計算</b></td></tr>
<tr><td>確率 1</td><td>1/ <input type='text' size=10 name='p31' value="$in{'p31'}"></td></tr>
<tr><td>確率 2</td><td>1/ <input type='text' size=10 name='p32' value="$in{'p32'}"></td></tr>
<tr><td>確率 3</td><td>1/ <input type='text' size=10 name='p33' value="$in{'p33'}"></td></tr>
<tr><td>確率 4</td><td>1/ <input type='text' size=10 name='p34' value="$in{'p34'}"></td></tr>
</table>
</td><td>
<table border=0 cellspacing=0 cellpadding=2 width='100%'>
<tr><td bgcolor='#ffffcc' colspan=2><input type='radio' name='sub' value=4 $chk[4]> <b>期待値の計算</b></td></tr>
<tr><td>プレイ数</td><td><input type='text' size=14 name='play4' value="$in{'play4'}"> P</td></tr>
<tr><td>確率</td><td>1/ <input type='text' size=10 name='p4' value="$in{'p4'}"></td></tr>
<tr><td>表\示</td><td><font size=2>小数点 第
 <input type='text' maxlength=2 size=2 name='point4' value="$in{'point4'}"> 桁<br>まで表\示</font></td></tr>
</table>
</td><td> </td>
</tr>
</table><br><font size=2>計算したい項目にチェックをつけてください。</font><br><br>
<input type='submit' value="計算開始">
</form></center>
__ HTML __


# エラーチェックとGET送信
if (grep { /[^\d\.]/ } values %in) { $error = 1; $er_msg = '不適切な文字が記入されています。'; };

if ($ENV{'REQUEST_METHOD'} ne 'POST') { $error = 1; $er_msg = 0; }
if ($er_msg) {
    print q{<center><b><font color='red' size=4>*** ERROR !! ***</font><br><br>},"\n";
    print "$er_msg</b></center>\n";
}
if ($error) {
    print '<br><br><br><br><br>';
    print q{<div align='right'>[ <a href='calc_memo.html'>memo</a> / <a href='calc.html'>source</a> ]</div>};
    print q{<strong>[ <a href='../index.html'>home</a> / <a href='index.html'>cgi</a> / <a href='../jug/index.html'>juggler</a> / <a href='../column.html'>column</a> / <a href='../diary/index.html'>diary</a> / <a href='bbs.cgi'>bbs</a> / <a href='../link.html'>link</a> / <a href='../intro.html'>welcome</a> ]</strong>};
    print '</body></html>';
    exit;
}

#-----------
# 計算開始
#-----------
if($in{'sub'} == 1) {  # 実戦から機械割の計算

    $wari = ($in{'coin1'}-$in{'in1'}*50)/($in{'play1'}*3) *100+100 if($in{'play1'});
    $wari = &point($wari,3);
    $shu  = ($in{'coin1'}*100/$in{'rate1'}-$in{'in1'}*1000)/($in{'play1'}*3*20) *100+100 if($in{'play1'});
    $shu  = &point($shu,3);

    print '<center><b>---- 機械割の計算 ----<br><br>';
    print "機械割は <font color='blue' size=4>$wari %</font><br>";
    print "収支割は <font color='blue' size=4>$shu %</font></b></center>";

} elsif($in{'sub'} == 2) { # 確率の計算

    $prob  = &point(($in{'play2'}/$in{'hit2'}), $in{'point2'}) if($in{'hit2'});
    $prob2 = &point(($in{'hit2'}/$in{'play2'}*100), $in{'point2'}) if($in{'play2'});
    $msg   = $in{'point2'}+1;

    print '<center><b>---- 確率の計算 <font size=2>( 単純な割り算 )</font> ----<br><br>';
    print "確率は <font color='blue' size=4>1/$prob</font><br>( $prob2 % )</b><br>";
    print "<font size=2>( 小数点第 $msg 位を四捨五入。)</font></center>";

} elsif($in{'sub'} == 3) {  # 合成確率の計算

    $p1   = 1/$in{'p31'} if $in{'p31'};
    $p2   = 1/$in{'p32'} if $in{'p32'};
    $p3   = 1/$in{'p33'} if $in{'p33'};
    $p4   = 1/$in{'p34'} if $in{'p34'};
    $prob = 1/($p1+$p2+$p3+$p4); $prob = &point($prob,3);

    print '<center><b>---- 合成確率の計算 ----<br><br>';
    print "合成確率は <font color='blue' size=4>1/$prob</font></b></center>";

} elsif($in{'sub'} == 4) { # 期待値の計算

    $exp   = $in{'play4'}/$in{'p4'} if $in{'p4'};
    $sd    = sqrt($exp*(1-1/$in{'p4'}));
    $mpsd  = $exp+$sd;
    $mpsdp = &point(($in{'play4'}/$mpsd),$in{'point4'});
    $mmsd  = $exp-$sd;
    $mmsdp = &point(($in{'play4'}/$mmsd),$in{'point4'});
    $exp   = &point($exp, $in{'point4'});
    $mpsd  = &point($mpsd, $in{'point4'});
    $mmsd  = &point($mmsd, $in{'point4'});

    print '<center><b>---- 期待値の計算 ----<br><br>';
    print "期待値は <font color='blue' size=4>$exp 回</font><br><br>";
    print "M + SD : <font color='blue'>$mpsd 回 ( 1/$mpsdp )</font><br>";
    print "M - SD : <font color='blue'>$mmsd 回 ( 1/$mmsdp )</font></b><br>";
    print "<br> M : 平均値, SD : 標準偏差 。 M±SD は統計的によく起こりうる範囲。</b></center>";

} elsif ($in{'sub'} == 5) { # 組み合わせの計算
    $p1 = $p2 = 1;
    for ($i=$in{'str1'}; $i>$in{'str2'}; $i--)     { $p1 *= $i; }
    for ($i=$in{'str1'} - $in{'str2'}; $i>0; $i--) { $p2 *= $i; }
    $p = $p1 / $p2;
    if ($p=~ m/INF/ or $p=~ m/IND/) { $er = 1; }

    print '<center><b>---- 組み合わせの計算 ----<br><br>';
    print "$in{'str1'} C $in{'str2'} = ";
    if ($er) {
        print '(計算不能)';
    } else {
        print "<font size=4 color=\'blue\'>$p</font></b> (通り)";
    }
    print "</center>";

}

# フッタ
print <<"__ HTML __";
<br><br><br>
<div align='right'>[ <a href='calc_memo.html'>memo</a> / <a href='calc.html'>source</a> ]</div>
<strong>[ <a href='../index.html'>home</a> / <a href='index.html'>cgi</a> / <a href='../jug/index.html'>juggler</a> / <a href='../column.html'>column</a> / <a href='../diary/index.html'>diary</a> / <a href='bbs.cgi'>bbs</a> / <a href='../link.html'>link</a> / <a href='../intro.html'>welcome</a> ]</strong>
</body></html>
__ HTML __

exit;

# 少数を四捨五入して指定の桁にする
sub point {
    my($value, $fig, $x);
    ($value, $fig) = @_;

    $value = int($value * (10 ** $fig) + 0.5) / (10 ** $fig);
    if ($value =~ /(\d+)\.(\d+)/) { $x = $2; }
    elsif ($value !~ /\./)        { $x =''; $value .= '.'; }
    $value = $value.'0' x ( $fig - length($x) );
    return $value;
}


[ home / cgi / juggler / column / diary / bbs / link / welcome ]