学校で「1つのサイコロを振ったとき,
3以下の数字が出た場合,もう一度サイコロを振っても良いものとする.
このとき合計が6になる確率を,プログラムを利用して計算せよ」
というperlの課題が出されたのですが、さっぱりわかりません。
どなたか詳しく教えていただけませんでしょうか?

このQ&Aに関連する最新のQ&A

計算 確率」に関するQ&A: 正規分布 確率計算

A 回答 (1件)

そうですねぇ。


課題ですので、調べごとをしつつがんばってみましょう^^
下記に考えの道筋の助けになると思うことを書いてみますね。


まずは、問題を分解して考えて一つずつクリアしていきましょう。

>1つのサイコロを振ったとき
さいころが登場するので、乱数をつかって1~6の数字が
出るようにするにはどうしたらようでしょうか?
見方をかえると6個の数字を乱数で再現できればよいので…
0から・・・にひと手間加えるってことでよさそうですね。


>3以下の数字が出た場合,もう一度サイコロを振っても良いものとする.
どうやら、最大2回さいころを触れるようですね。
for文を使うと1回目2回目とカウントできそうですね。
ただし、2回目に行くには3以下でないといけないので
for文の中にif文で3以下かそうじゃないか調べる必要がありますね。
つまり、for文の中で最初に調べた乱数を用いたサイコロを
実行して値を出してそれを判別してあげればよいと思います。
3以下ならそのままで、4以上ならfor文を抜けることを考えましょう。

>合計が6になる確率
合計がと言っているので、さいころ(乱数を用いたさいころ)を振るたびに
数値を保存する変数が必要そうですね。上で話に出たfor文の中で乱数で
作ったサイコロを振るたびに足し算してあげるとよいですね。
for文を抜けたら6以上かそうじゃないかをif文で調べると
6以上になった時の回数をしることができます。


ここまで、できたら答えは目前ですね。
上記の内容で1回(3以下が出たらもう一回振ることも含めて)のサイクルができました。
知りたい内容は、確立なので1000回とか1万回繰り返した際に実際に
何回6以上になることがあるかを調べればプログラムを使ってもとめた
ことになると思うので、上記プログラムをfor文の中に収めて
1000回とか1万回繰り返してみるとある値(確立)に収束すると思うので

最後に6以上になった回数/for文で繰り返した数 で確立が出ると思います。


大筋はこんな感じ。
for(){ ←1000回/1万回と回数を増やして試してみる。
 for(){ ←3以下の時もう1回振れるようにしておく。
  乱数をつかってさいころを再現。
  サイコロの値を足し算する。
  if(){
   4以上ならfor文を抜ける
  }
 }
 if(){
  サイコロの合計が6以上なら1カウントする。
 }
}
サイコロの合計が6以上の回数/for文の繰り返しの数で確立を求めプリントする。


いかがでしょうか??
がんばってみてください。
    • good
    • 0
この回答へのお礼

分かりやすい説明ありがとうございます!!
こんなに早く回答が返ってくるとは思わなかったので嬉しいです(^^*
1つ1つ考えていけばよかったんですね。
なんとか完成できそうです。
本当にありがとうございました!!!

お礼日時:2009/05/26 16:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q数学、確率の問題について!

確率の問題が分からなくて困っております。答えだけでなく解き方まで説明して頂けると幸いです。

問題
PとQがジャンケンをする

Pがグーを出す確率 1/2 パーを出す確率1/4 チョキを出す確率1/3
Qがグーを出す確率1/4 パーを出す確率1/3 チョキを出す確率1/4

問1 2回ジャンケンして、Qがグーで勝つ確率
問2 4回ジャンケンして、Pがパーかチョキであいこ又は勝つ確率

以上、宜しくお願い致します。

Aベストアンサー

問1 ジャンケンして、Qがグーで勝つ確率
 Qがグーを出す確率×Pがチョキを出す確率
問2 ジャンケして、Pがパーかチョキであいこ又は勝つ確率
 Pがパーを出す確率×Qがグーかパーを出す確率
+Pがチョキを出す確率×Qがパーかチョキを出す確率

あい子なら、勝負がつくまで指定された回数までじゃんけんをするとき。
問1 2回までで、ジャンケンして、Qがグーで勝つ確率
問2 4回ジャンケンして、Pがパーかチョキであいこ又は勝つ確率

ならわかるかな。最終回までにグーで勝ったらおしまいだよ。

QPerl, Ruby, Pythonどれを使えば良いか

ログの解析など、テキスト処理を中心とした処理を行いたいと考えております。これから始める場合、また手軽に使える処理系としては、Perl,Ruby,Pythonのどの言語を使用すべきでしょうか?それぞれのメリット、デメリットなどもあれば教えていただければと思います。

Aベストアンサー

参考にでもなれば。

Perl
メリット:
三者の中で最も古くから使われているものなので、
1. UNIXベースのシステムならまず間違いなく入っていることが期待できる。
(一部の商用システムを除く)
2. サンプルおよびモジュールがたくさんあるので
参考にできたり楽ができたりする
3. 多分三つの中で一番処理速度が早い
4. 参考書も一番出版されている(玉石混交ですが)

デメリット:
1. 気をつけないと三ヶ月先の自分でも読めないスクリプトになってしまいがち
2. 歴史があることの裏返しで、ネット上にある情報の中には
あまりにも古いものが残っていたりして
混乱することがあるかもしれない
3. 日本語テキストを扱うときのエンコーディング周りの
ルールが複雑でわかりにくい

Python:
メリット:
1. Perlほどではないが、Linuxをつかったディストリビューションの
パッケージ管理に使われるなどしているので
割と広く使われ始めている
2. Googleの公式言語(のひとつ)だぜぇと自慢できる(かもしれない)
3. Perlに比べると技巧的な記述がしづらいがそれによって読むのにはあまり苦労しないですむ
4. 公式マニュアルの日本語訳は質量ともに
素晴らしい

デメリット
1. 日本語でかかれた本がまだ少ない(5冊くらい?)
2. ネット上でも日本語での情報は三者の中では多分一番少ない
3. ShiftJISやeuc-jpのテキストを処理するときに
一回Unicode化しなければいけないのでちょっと面倒
(でもこれはPerlも同じ)

Ruby
メリット
1. ShiftJISやeuc-jpのテキストを扱うには一番障害がない
2. ネット上の日本語での情報がそれなりにある
3.Perlには負けるかもしれないが書籍も結構出ている

デメリット
1. インタプリタの処理速度が三者の中では多分一番遅い
2. ガーベジコレクタ絡みのバグにあたるとちょっとしんどい
3. Unicodeを(UTF-8以外で)扱うのはちょっと厳しい(不可能ではない)

こんなところでしょうか。
わたしの見方ですので眉に唾つけて受け取ってください ;-)

参考にでもなれば。

Perl
メリット:
三者の中で最も古くから使われているものなので、
1. UNIXベースのシステムならまず間違いなく入っていることが期待できる。
(一部の商用システムを除く)
2. サンプルおよびモジュールがたくさんあるので
参考にできたり楽ができたりする
3. 多分三つの中で一番処理速度が早い
4. 参考書も一番出版されている(玉石混交ですが)

デメリット:
1. 気をつけないと三ヶ月先の自分でも読めないスクリプトになってしまいがち
2. 歴史があることの裏返しで、ネット上に...続きを読む

Q今授業でやっている確率の問題がわかりません・・・

こんな問題です・・・
20歳の人が60歳以上生存する確率が90%であるとするとき20歳の友人5人についての確率の問題

1.5人とも60歳以上生存する確率
2.5人のうち4人だけが60歳以上生存する確率
3.5人のうち3人以上が60歳まで生存する確率

解説をおねがいします。

Aベストアンサー

友人をA、B、C、D、Eとする。

>1.5人とも60歳以上生存する確率

友人Aが60歳以上生きる確率は90%。

友人Aが60歳以上生きる確率は90%で、その90%のうち、友人Bも60歳以上生きる確率は90%。つまり、90%×90%=81%。

友人A、Bが60歳以上生きる確率は81%で、その81%のうち、友人Cも60歳以上生きる確率は90%。つまり、81%×90%=72.9
%。

同様に友人Eまでやると、90%×90%×90%×90%×90%=59.049%になります。

>2.5人のうち4人だけが60歳以上生存する確率

5人のうち、誰か一人だけ60歳まで生きられない確率になります。

Aだけ60前に死んでしまう確率は、10%×90%×90%×90%×90%=6.561%です。

Bだけ60前に死んでしまう確率は、90%×10%×90%×90%×90%=6.561%です。

Cだけ60前に死んでしまう確率は、90%×90%×10%×90%×90%=6.561%です。

Dだけ60前に死んでしまう確率は、90%×90%×90%×10%×90%=6.561%です。

Eだけ60前に死んでしまう確率は、90%×90%×90%×90%×10%=6.561%です。

全部足した6.561%+6.561%+6.561%+6.561%+6.561%=32.805%が、4人だけ60まで死なない確率です。

>3.5人のうち3人以上が60歳まで生存する確率

3人生きてる確率は90%×90%×90%×10%×10%=0.729%で、5人のうち3人が生き残る組み合わせは10通り。なので0.729×10=7.29%。

4人生きてる確率は90%×90%×90%×90%×10%=6.561%で、5人のうち4人か生き残る組み合わせは5通り。なので6.561×5=32.805%。

5人生きてる確率は59.049%(問題1の答え)

全部足すと、7.29+32.805+59.049=99.144%。

友人をA、B、C、D、Eとする。

>1.5人とも60歳以上生存する確率

友人Aが60歳以上生きる確率は90%。

友人Aが60歳以上生きる確率は90%で、その90%のうち、友人Bも60歳以上生きる確率は90%。つまり、90%×90%=81%。

友人A、Bが60歳以上生きる確率は81%で、その81%のうち、友人Cも60歳以上生きる確率は90%。つまり、81%×90%=72.9
%。

同様に友人Eまでやると、90%×90%×90%×90%×90%=59.049%になります。

>2.5人のうち4人だけが60歳以上生存する確率

5人のうち、誰か一人だけ60歳まで生きられない確率にな...続きを読む

Q環境と言語のダブル?クロス開発(Linux,Windows : Perl, Ruby)

LinuxとWindowsのクロス環境の開発でPerlとRubyも両方動かしております。

Linuxでは
/usr/bin/perl
/usr/bin/ruby
にそれぞれ存在していますが、

Windowsでは、PerlとRubyを同じ C:\usr\binにインストールするとかなり危険?(dllや同じ
他の名前のファイルがある場合)に困るので、

ソースは同じ #!/usr/bin/rubyで動作させたく、Windowsでも動かすにはどうすればよいのでしょうか?

Windows側でのRubyはとりあえず C:\Rubyに入れて居ますが、 c:\usr\binにruby.exeをコピーすれば動きます。
しかし、安直で邪道のような気がするですが、今後何か不具合でも出ないか心配です。

何か妙案はあるのでしょうか?

Aベストアンサー

ファイルタイプの指定(エクスプローラの[ツール]->[フォルダオプション]で出てくるウインドウの[ファイルタイプ]のタブ)をして拡張子で何を実行するかを決めておけば良いんじゃないでしょうか? perl は .pl にするとか。

あるいは、Cygwin をインストールして、その中の perl や ruby を使うとか。(これの場合だいたいはそのままで問題なくなります。Cygwinの仮想ファイルシステムの中で実行されるわけですが、そこがUNIXそっくりになっているためです)

参考URL:http://cygwin.com/

Q確率の問題集

場合の数・確率が不得意なので、問題集を買うことにしました。
あまり確率だけに時間をかけたくないので、一冊の問題集だけをやり込むことにしました。
そこで、「ハッとめざめる確率」と「解法の探求・確率」どちらが良いですか。
アドバイスお願いします。

志望は国立難関大の理系です。

Aベストアンサー

おはようございます

「解法の探求」は、より多くの問題に当たるための問題集のように感じます。
確率の基本的な考えを学びたいということであれば、「はっとめざめる確率」のほうがいいのではないかと思います

QPerl 条件一致なし 合計値 0表示

条件指定して、一致したものを合計するプログラムを作っています。
しかし、条件にまったく一致する行が無い場合、空欄になってしまい、
次の行が表示されません。

open (IFILE, $file) or die "$!";
while ($line = <IFILE>) {
chomp($line);
@column = split(",",$line);
if ((@column[7] eq $kensouken) && (@column[4] eq $tantou1) && (@column[32] >0 ) && ( @column[33] <=0 ))
{for($loop = 1;$loop <= 5;$loop++) {
$total3[$loop] += @column[32];
}}
elsif ((@column[7] eq $kensouken) && (@column[4] eq $tantou1) && (@column[32] <= 0) && (@column[33] > 0))
{for($loop = 1;$loop <= 5;$loop++) {
$total4[$loop] += @column[33];
}}}
print "$total3[1]";
print "$total4[1]";
としています。上記2つの条件にマッチしない場合、$total3、$total4が無効になっているのでしょうか。
次に書いている行が表示されなくなってしまいます。

条件に一致しない場合、0を表示したいのですが、どうしたら良いでしょうか。よろしくお願いします。

条件指定して、一致したものを合計するプログラムを作っています。
しかし、条件にまったく一致する行が無い場合、空欄になってしまい、
次の行が表示されません。

open (IFILE, $file) or die "$!";
while ($line = <IFILE>) {
chomp($line);
@column = split(",",$line);
if ((@column[7] eq $kensouken) && (@column[4] eq $tantou1) && (@column[32] >0 ) && ( @column[33] <=0 ))
{for($loop = 1;$loop <= 5;$loop++) {
$total3[$loop] += @column[32];
}}
elsif ((@column[7] eq $kensouken) && (@column[4...続きを読む

Aベストアンサー

「次に書いている行」というのは、
print "$total3[1]";
print "$total4[1]";
ですよね?

頭のほうで次の2行を足しておけば、とりあえず動くんじゃないかなとは思います。
@total3 = (0, 0, 0, 0, 0, 0);
@total4 = (0, 0, 0, 0, 0, 0);

<おまけ>
$kensoukenや$tantou1の代入箇所等読み取れないので、全部コード貼ったほうが良いのではないかなと思いました。

各カラムの中に「,」を含むことのないCSV形式なのでしょうか?
入力データ次第でしょうが、CSVモジュールを使ったほうが安全な気もします。

if文の内容に重複があるので、まとめた方が読みやすいかもしれません。

@total3, @total4を配列にしているのは何か理由があるのでしょうか?
ざっとみるかぎり、先頭から2番目の要素しか使っていないようにも思えます。

というあたりを、CSVモジュール以外個人的にまとめ直してみました。
(入力は標準入力に変えてあります。)
http://ideone.com/cB4qR

「次に書いている行」というのは、
print "$total3[1]";
print "$total4[1]";
ですよね?

頭のほうで次の2行を足しておけば、とりあえず動くんじゃないかなとは思います。
@total3 = (0, 0, 0, 0, 0, 0);
@total4 = (0, 0, 0, 0, 0, 0);

<おまけ>
$kensoukenや$tantou1の代入箇所等読み取れないので、全部コード貼ったほうが良いのではないかなと思いました。

各カラムの中に「,」を含むことのないCSV形式なのでしょうか?
入力データ次第でしょうが、CSVモジュールを使ったほうが安全な気もします。

if文の...続きを読む

Q条件付き確率の問題です。 全部で20本、当たりが五本入っています。A、Bの順番で引く時、Aが外れて

条件付き確率の問題です。

全部で20本、当たりが五本入っています。A、Bの順番で引く時、Aが外れて、Bが外れる確率、さらにBが当たる確率はいくらですか
という問題です。

さらに当たる確率の方のやり方がわかりません。
解説を無くしてしまったので教えてください

Aベストアンサー

>さらに当たる確率の方のやり方がわかりません。

この確率と云う言葉は単独でBが「当り」又は「はずれ」を引く確率と考えて良いですか。

20本中5本が「当り」ですから、15本が「はずれ」です。
始めにAが「はずれ」を引く確率は 15/20=3/4 です。
次にBも「はずれ」を引く確率は 14/19 です。
(残りは19本になりますし、「はずれ」は14本になりましたから。)
この時Bが「当り」」を引く確率は 5/19 です。
(残りは19本になりますし、「当り」は5本のままですから。)

>Aが外れて、Bが当たり、さらにBが当たる確率です

この文章が良く分らないのですが、
「さらに」と云う事は2回目の試行ですね。
2回目のAの結果で答えは変わります。
「当り」の確率を求めるには、全部のくじの本数を分母にして、
残りの「当り」の本数を分子にすれば、求められます。

反対に、「はずれ」の確率を求めるには、全部のくじの本数を分母にして、
残りの「はずれ」の本数を分子にすれば、求められます。

処で、あなたは何年生ですか。
「Aが外れて、Bが当る事を一セットとして確立を求める。」と云う問題ならば
夫々の確率を掛け合わせたものになります。

>さらに当たる確率の方のやり方がわかりません。

この確率と云う言葉は単独でBが「当り」又は「はずれ」を引く確率と考えて良いですか。

20本中5本が「当り」ですから、15本が「はずれ」です。
始めにAが「はずれ」を引く確率は 15/20=3/4 です。
次にBも「はずれ」を引く確率は 14/19 です。
(残りは19本になりますし、「はずれ」は14本になりましたから。)
この時Bが「当り」」を引く確率は 5/19 です。
(残りは19本になりますし、「当り」は5本のままですから。)

>Aが外れて...続きを読む

QPerlで日本語の文章にカナを振りたいのですが

Perlで日本語の文章にカナを振りたいのですが
何か良いサブルーチンなど無いでしょうか?

漢字に読み方が沢山ありますし、活用による語尾の変化もあります。

カナさえ振れればいいです。

あるいは、日本や海外のサイトのサービスでもいいです。

出来るだけ、スパっと一通りの正しい読みが得られるといいですのですが。

Aベストアンサー

Kakasi, ChaSen, MeCab などで工夫するとか、もちろん完璧ではないですが。

Q確率の問題で

問題自体はさほど難しい問題ではないのですが、解説がどうなのか?と思ったので質問します。

A,B,Cの3人が試合をする。まず、2人が対戦して、買った方が残りの1人と対戦する。これを繰り返して、2連勝した人が優勝する。AがB,Cに勝つ確率をp、qとし、BがCに勝つ確率を1/2とする。次の確率を求めよ。
ただし、0<p<1,0<q<1とする。
(1) 第1戦にAとBが対戦し、Aが勝った場合にAが優勝する確率


この問題の解説では、「Aが第1戦に勝ったもとでAが(最終的に)優勝する確率」をPとおいて求めています。
Pを計算すると、P=2q/(2-p+pq)となります。ここまではいいのですが、この後、
Aが第1戦に勝って優勝する確率は
p*P=2pq/(2-p+pq)
として、これを答えとしています。

もし、問題が「・・・Aが勝って、Aが優勝する確率」とあるなら、何も疑問に思うことはないのですが、問題では「・・・Aが勝った場合に、Aが優勝する確率」とあるので、第1戦でAが勝ったという条件で、Aが優勝する確率を求めればいいので、
答えは、P=2q/(2-p+pq)
ではないかと思うのです。


第1戦にAが確率pをかける必要はあるのでしょうか?

問題自体はさほど難しい問題ではないのですが、解説がどうなのか?と思ったので質問します。

A,B,Cの3人が試合をする。まず、2人が対戦して、買った方が残りの1人と対戦する。これを繰り返して、2連勝した人が優勝する。AがB,Cに勝つ確率をp、qとし、BがCに勝つ確率を1/2とする。次の確率を求めよ。
ただし、0<p<1,0<q<1とする。
(1) 第1戦にAとBが対戦し、Aが勝った場合にAが優勝する確率


この問題の解説では、「Aが第1戦に勝ったもとでAが(最終的に)優勝する確率」をPとおいて...続きを読む

Aベストアンサー

質問者の方の解釈が正しいですね。
条件付確率を要求している問題と解釈すべきでしょう。

こういう問題が入試のような一発勝負に出て、正解を不正解として採点されちゃあたまらないですね。

そういうあいまいな問題に対しては、解答の冒頭で、問題をどのように解釈したかを明記しておくのが自衛策として望ましいですね。

ただし、日本語で「・・・して、・・・」という場合の「て」には、「・・・すると同時に」という意味が隠されている場合もありますよね。出題者に好意的に解釈すると、「初戦で勝つと同時にではなくて・・・」という意味を込めたかったんじゃあないでしょうか。

Qperlで,c言語で言うところのatoiはできる?

perlでキャラクタの数字を,スカラーの数字になるよう明記することってできますか?

perlが勝手にキャラクタとスカラーの変更をしてしまうのを防ぎたいのですが・・・

c言語でのatoi関数のようなものはあるのでしょうか?

Aベストアンサー

どういう局面で困っているのかよくわかりませんが、たとえば組み込み関数のint()ではどうですか?


人気Q&Aランキング

おすすめ情報