• 締切済み

このプログラムを作るのに参考になる本

この計算の答えをRUBYを使って解こうとしています。 私はプログラミング初心者でrubyの初心者本を買い、簡単なプログラムを作る事しかできません。この問題を解くために必要な知識が分かりやすく書いてある参考書を紹介していただきたいと思いました。 問題 期待値と標準偏差を求めよ。 1/100で当たり150円当たるクジ 1/200で当たり250円当たるクジ 1/300で当たり350円当たるクジ これを1回1円で上の3つのサイコロを同時に投げる方法で、7000回試行した時の期待値と標準偏差。 これをエクセルでやろうとすると計算数が多すぎて作る事ができません。 有効桁数もエクセルは少なく7000C2500などの1000桁を 超える数を計算する事ができません、そこで有効桁数を気にしなくて良い RUBYの本を買い、勉強していますが。 分からないことは 1コンビネーションの計算のプログラムの方法(nCr=n!/[r!(n-r!)]) 2べき乗の計算のプログラムの方法( (1/200)^6000 ) 3 やりたい事を全部書きますとw↓ 1/100=P1 150円=H1 1/200=P2 250円=H2 1/300=P3 350円=H3 Q=1-P n=くじを引いた回数 r=当たった回数 と置く、この時さらに nCr*P1^r*Q1^(n-r) ・・・1 nCr*P2^r*Q2^(n-r) ・・・2 nCr*P3^r*Q3^(n-r) ・・・3 ここで、この問題を解きたいと思っています。 「期待値」 1のr=0から7000の値それぞれに対して 2のr=0から7000の値それぞれをかけて、その値それぞれに対して 3のr=0から7000の値をかけたものをすべて合計した値。 これを求める為に必要になる参考書を探しています。 お願いします。    

みんなの回答

  • notnot
  • ベストアンサー率47% (4854/10269)
回答No.1

>1コンビネーションの計算のプログラムの方法(nCr=n!/[r!(n-r!)]) >2べき乗の計算のプログラムの方法( (1/200)^6000 ) このあたりがわからないと言うことは、プログラミング初心者と言うより、プログラミングがほとんど未経験だということですよね。 「Ruby 1 はじめてのプログラミング」http://www.amazon.co.jp/dp/4798117994 あたりがいいかと。書評も良い感じです。 Rubyの本は、何らかのプログラミング言語をマスターしている人向けの物が多いです。これからプログラミングを始める人向けの数少ない本。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • nCrの値が表示されない

    C言語でnCrの値を求めるプログラムをnCr=n!/(r!*(n-r)!)を元に、再帰を用いて階乗を求める関数を用いて作成したのですが、nとrがn=40,r=11等の大きな値になるとnCrの値をunsigned long intで定義していても値が表示されませんでした。桁あふれではないんですが何故でしょうか?PCの構造にそこまで詳しくないので、詳しい理由を教えてください。

  • プログラムのおかしいところを教えてください

    ライプニッツの公式により、円周率の近似値を求めるプログラムを作 成しなさい。ただし、この公式は収束が遅い。          1     1      1     1     1      1       1    1 円周率=4(── - ── + ── - ── + ── - ──+…- ──+──)          1    3      5      7     9     11      47    49 ってやつをJAVAでやるのですが自分で作ったのは class en{ public static void main(String argv[]) { int i;double n,o,p,q,r; n=0;o=0;p=0;q=0;r=0; for (i=1; i<=49; i=i+4) { n=1/i; o=o+n; } for (i=3; i<=47; i=i+4) { p=1/i; q=q+p; } r=4*(o-q); System.out.println("円周率="+r); } } なんですが 結果が円周率=4.0になってしまいます。アドバイスをお願いします

    • ベストアンサー
    • Java
  • 階乗のプログラム

    c言語初心者です。 13までの階乗の値を計算するプログラムを下のように書いたのですが、 #include <stdio.h> main() { int N, fact; fact=1; for(N=1; N<=13; ++N){ fact=fact*N; printf("%d!=%d\n",N, fact); } } このプログラムを実行してみると、12!までは正しい値が出力されるのですが、13!の値が1932053504と出力され、計算機の値と違います。 どこが間違っているのでしょうか。どなたかご教授お願いします。

  • nCrの計算

    nCrの計算のプログラムを nCr=n!/(r!(n-r)!) を用いて再帰的関数を使って書いたのですが、もし nCr=n(n-1)(n-2)・・・(n-r+1)/r! であることを用いて、nからmまでの掛算を実現する2引数の関数を定義して、再帰的関数呼び出しを用いたnCrのプログラムを作成するとしたらどうなるでしょうか。 関数x!の定義は、関数の宣言をlong factorial(int x)として、 if (x==0) return(1); else return(x*factorial(x-1)); となることは分かるのですが、 2引数の関数m(m+1)・・・nはどう作れば良いのか全くわからないので、プログラムが書けない状態です。アドバイスお願いします。

  • C言語のプログラムについてですが、

    #include <stdio.h> int main(void) { double r; printf("半径を入力してください:"); scanf("%lf", &r); printf("円周=%f\n", 2.0 * r * 3.14159); printf("円面積=%f\n", r * r * 3.14159); return 0; } 上のC言語のプログラムを参考にして 正三角形一辺を double値でキーボード入力し、次のように高さと 面積を計算するプログラムを教えてください。 よろしくお願いしますl_ω_l 3の平方根は1.73205とします。 [実行結果] ======= 一辺の値を入力してください: 20 高さ=17.320500 面積=173.205000

  • ポインタのプログラムについて

    以下のプログラムを実行したとき、表示される値を余白に記述せよ。ただし、配列idataは1000番地から格納されているとする。また、表示結果*8**~*10**の箇所で、正しく計算された値のみ表示させるには、maxはいくらに設定すればよいか。という課題なんですが、実際にプログラムを作ってみてmaxの箇所を4にしてみたところ間違いと言われたので正しいmaxの値を教えて下さい。 #include<stdio.h> int main(void) { int iv,idata[]={2,4,6,8,10,12},*ip,i,max; iv=idata[0]; printf("*1*ivの値=%d\n",iv); ip=&idata[0]; printf("*2*ipの値=%p\n",ip); ip=&idata[1]; printf("*3*ipの値=%p\n",ip); ip=&idata[2]; printf("*4*ipの値=%p\n",ip); iv=*ip; printf("*5*ivの値=%d\n",iv); iv=*ip+3; printf("*6*ivの値=%d\n",iv); iv=*(ip+3); printf("*7*ivの値=%d\n",iv); max=4; *ip=0; for(i=0;i<max;i++){ printf("*8**(ip+%d)=%d\n",i,*(ip+i)); } *(ip+1)=10; for(i=0;i<max;i++){ printf("*9**(ip+%d)=%d\n",i,*(ip+i)); } *(ip+3)=20; for(i=0;i<max;i++){ printf("*10**(ip+%d)=%d\n",i,*(ip+i)); } ip=&idata[0]; printf("*11*ipの値=%p\n",ip); ip=ip+2; printf("*12*ipの値=%p\n",ip); iv=*ip+3; printf("*13*ipの値=%d\n",iv); iv=*(ip+3); printf("*14*ivの値=%d\n",iv); ++ip; printf("*15*ipの値=%p\n",ip); } ヒントは”正しく計算された値のみ”という部分らしいのですが、自分にはまったく分りませんでした。

  • 数学におけるプログラムの問題です。

    「次のプログラムは何をするものか説明し、nに360が入力されたときのp,qを求めよ。   100 INPUT n     110 FOR i=1 TO SQR(n)   120 IF MOD(n,i*i)=0 THEN LET p=i   130 NEXT i   140 LET q=n/(p*p)   150 PRINT "p=";p   160 PRINT "q=";q    END」 という問題です。  p=6,q=10 はわかります。このプログラムは「入力された値に対して、2乗して割り切れる最大の値とその時の商を求めるものである」でよろしいのでしょうか?

  • 高校数学 二項定理の問題です

    途中までは解法の理解ができました この先でつまずいています・・・ [問] 次の等式を満たす自然数nの値を求めよ nCr-1:nCr:nCr+1=3:4:5のとき、nとrを求めよ とあり、解答はn=62, r=27 です 3(n-r)(n-r+1)=4r(n-r)=5(r+1)r となるところまでは解るのですがこの式をどのように解いていくと解答に繋がるのかが解りません・・・ どうかアドバイスをお願いします

  • 2項分布の期待値の途中過程で躓いてしまいました。

    p(k)=(nCk)p^k×q^n-k のときの期待値の 計算途中で E(X)=Σ(k=0、n){(k・n!)÷(k!(n-k)!)}(p^k)×(q^n-k) から =npΣ(k=1、n){(n-1)!÷(k-1)!(n-k)!}(p^k-1)×(q^n-k) がどうやって 下の計算が出てくるのか 行き詰まってしまい 解だけ分かっていても 途中計算が分からず、 分散の値も出せずにいます。 解りづらい計算式ですみません。 どうか教えてください。

  • 漸化式:nCrの計算(C言語)

    こんにちは<_ _> nCrを求める問題について質問です (n個の中からr個を選ぶ組み合わせの数nCrを求めるという問題です) ここで漸化式というものを用いよとあり、サイトなどで漸化式について 感覚的な理解はつかめましたが、「プログラムで組め」となると完全にお手上げです;; 漸化式の詳しい解説用法とプログラム(ヒントなどでもいいのでお願いします<_ _>)をお願いします #include<stdio.h> long combi(int,int); int main(void) { int n,r; for(n=0;n<=5;n++){ for(r=0;r<=n;r++) printf("%dC%d=%ld ",n,r,combi(n,r)); printf("\n"); } return 0; } long combi(int n,int r) { long p=1; 処理 return p; } 外郭まではソースで指示がありますが処理がまったくわかりません どうかよろしくお願いします<_ _>