C言語トランプの確率を計算について

このQ&Aのポイント
  • C言語でトランプの確率を計算する方法について質問です。30枚のカードから7枚をランダムに選び、特定の条件が満たされた場合の確率を表示したいですが、結果が表示されません。コンパイルエラーも表示されず、どこが間違っているのかわかりません。ソースコードを教えていただけると助かります。
  • C言語でトランプの確率を計算するプログラムを作成しています。30枚のカードから7枚を無作為に選び、特定の組み合わせが出た場合の確率を計算したいです。しかし、結果が表示されず困っています。コンパイルエラーや画面に何も表示されないため、どこが間違っているのか分かりません。ソースコードの修正方法を教えてください。
  • C言語でトランプの確率を計算する方法について教えてください。30枚のカードからランダムに7枚を選び、特定の条件が満たされた場合の確率を求めたいです。しかし、結果が表示されず困っています。コンパイルエラーもなく、画面に何も表示されないため、どこが問題なのかわかりません。ソースコードの修正案を教えてください。
回答を見る
  • ベストアンサー

C言語トランプの確率を計算について

やりたいこと30枚のカードから7枚を無作為に選んで表示、熟慮、熟慮1,熟慮2が表示されたときその合計を足して30割った確率を同時に表示したいのですが結果が表示されず困っております。コンパイルエラーとかは表示されず画面にも何も表示されません。どなたかソースを書いてくださると助かります。 なぜこのようなものを組もうと思ったかは聞かないでください #include <stdio.h> #include <stdlib.h> #include <time.h> double ave(double 熟慮,double 熟慮1, double 熟慮2); int main(void){ int i,j; int 瞬唱の魔道士 = 0,瞬唱の魔道士1 = 0,瞬唱の魔道士2 = 0, ボーラスの占い師 = 0, ボーラスの占い師1 = 0,ボーラスの占い師2 = 0,修復の天使 = 0,修復の天使1 = 0, 修復の天使2 = 0, 霊異種 = 0, 中略 = 0, 中略1 = 0,灼熱の槍 = 0,灼熱の槍1 = 0, 熟慮 =0,熟慮1 =0,熟慮2 =0,アゾリウスの魔除け= 0,アゾリウスの魔除け1= 0, アゾリウスの魔除け2= 0,スフィンクスの啓示=0,スフィンクスの啓示1=0,スフィンクスの啓示2=0, 変化+点火=0,変化+点火1=0,先導者のらせん=0,先導者のらせん1=0,先導者のらせん2=0, srand((unsigned int)time(NULL)); for(j = 0; j <= 6; j++){ i = rand() % 30+1;// if(i == 1) 瞬唱の魔道士++; if(i == 2) 瞬唱の魔道士1++; if(i == 3) 瞬唱の魔道士2++; if(i == 4) ボーラスの占い師++; if(i == 5) ボーラスの占い師1++; if(i == 6) ボーラスの占い師2++; if(i == 7) 修復の天使 ++; if(i == 8) 修復の天使1 ++; if(i == 9) 修復の天使2 ++; if(i == 10) 霊異種 ++; if(i == 11) 中略 ++; if(i == 12) 中略1 ++; if(i == 13) 灼熱の槍 ++; if(i == 14) 灼熱の槍1 ++; if(i == 15) 熟慮 ++; if(i == 16) 熟慮1 ++; if(i == 17) 熟慮2 ++; if(i == 18) アゾリウスの魔除け ++; if(i == 19) アゾリウスの魔除け1 ++; if(i == 20) アゾリウスの魔除け2 ++; if(i == 21) スフィンクスの啓示 ++; if(i == 22) スフィンクスの啓示1 ++; if(i == 23) スフィンクスの啓示2 ++; if(i == 24) 変化+点火 ++; if(i == 25) 変化+点火1 ++; if(i == 26) 巻きなおし ++; if(i == 27) 巻きなおし1 ++; if(i == 28) 先導者のらせん ++; if(i == 29) 先導者のらせん1 ++; if(i == 30) 先導者のらせん2 ++; printf("瞬唱の魔道士:%d\n", 瞬唱の魔道士); printf("瞬唱の魔道士:%d\n", 瞬唱の魔道士1); printf("瞬唱の魔道士:%d\n", 瞬唱の魔道士2); printf("ボーラスの占い師:%d\n", ボーラスの占い師); printf("ボーラスの占い師:%d\n", ボーラスの占い師1); printf("ボーラスの占い師:%d\n", ボーラスの占い師2); printf("修復の天使:%d\n", 修復の天使); printf("修復の天使:%d\n", 修復の天使1); printf("修復の天使:%d\n", 修復の天使2); printf("霊異種:%d\n", 霊異種); printf("中略:%d\n", 中略); printf("中略:%d\n", 中略1); printf("灼熱の槍:%d\n", 灼熱の槍); printf("灼熱の槍:%d\n", 灼熱の槍1); printf("熟慮:%d\n", 熟慮); printf("熟慮:%d\n", 熟慮1); printf("熟慮:%d\n", 熟慮2); printf("アゾリウスの魔除け:%d\n", アゾリウスの魔除け); printf("アゾリウスの魔除け:%d\n", アゾリウスの魔除け1); printf("アゾリウスの魔除け:%d\n", アゾリウスの魔除け2); printf("スフィンクスの啓示:%d\n", スフィンクスの啓示); printf("スフィンクスの啓示:%d\n", スフィンクスの啓示1); printf("スフィンクスの啓示:%d\n", スフィンクスの啓示2); printf("変化+点火:%d\n",変化+点火 ); printf("変化+点火:%d\n",変化+点火1 ); printf("巻きなおし:%d\n",巻きなおし ); printf("巻きなおし:%d\n",巻きなおし1 ); printf("先導者のらせん:%d\n",先導者のらせん ); printf("先導者のらせん:%d\n",先導者のらせん1 ); printf("先導者のらせん:%d\n",先導者のらせん2 ); return 0; } double ave(double 熟慮, double 熟慮1 ,double 熟慮2) { double wk; wk=(double)(熟慮 + 熟慮1 + 熟慮2) /30 return wk; }

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

こんなのとか。 http://ideone.com/G260c1 なぜこのようなコードになったかの説明は略。

その他の回答 (2)

回答No.2

確認ですけど、 「30種類のカードそれぞれ1枚ずつ入ったカードデッキ」から7枚選ぶんじゃ"ない"よね?

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

関数aveを定義しているけど、それを呼び出しているところも、その結果を表示しているところもありません。 「書いてある通りに動く」のがプログラムです。計算も表示も無いのだから、表示されないのがあたりまえです。

関連するQ&A

  • 20枚から7枚選んだ時の確率

    やりたいこと 20枚のカードから7枚を無作為に選んで結果を表示 その後その七枚の中に 熟慮,熟慮1,熟慮2が含まれていた場合にその3枚をたして確率を求め表示といったようなものを作りたいです。作ろうと思ったきっかけとかはおいといてください。 計算式などを書いたのですが表示されなくて困っております。どなたか途中まででいいので書いてくださると助かります。 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void){ int i,j; int 瞬唱の魔道士 = 0,瞬唱の魔道士1 = 0,瞬唱の魔道士2 = 0, ボーラスの占い師 = 0, ボーラスの占い師1 = 0,ボーラスの占い師2 = 0,修復の天使 = 0,修復の天使1 = 0, 修復の天使2 = 0, 霊異種 = 0, 中略 = 0, 中略1 = 0,灼熱の槍 = 0,灼熱の槍1 = 0, 熟慮 =0,熟慮1 =0,熟慮2 =0,アゾリウスの魔除け= 0,アゾリウスの魔除け1= 0, アゾリウスの魔除け2= 0; srand((unsigned int)time(NULL)); for(j = 0; j <= 6; j++){ i = rand() % 20+1;// //分布を知るためにカウントしていく if(i == 1) 瞬唱の魔道士++; if(i == 2) 瞬唱の魔道士1++; if(i == 3) 瞬唱の魔道士2++; if(i == 4) ボーラスの占い師++; if(i == 5) ボーラスの占い師1++; if(i == 6) ボーラスの占い師2++; if(i == 7) 修復の天使 ++; if(i == 8) 修復の天使1 ++; if(i == 9) 修復の天使2 ++; if(i == 10) 霊異種 ++; if(i == 11) 中略 ++; if(i == 12) 中略1 ++; if(i == 13) 灼熱の槍 ++; if(i == 14) 灼熱の槍1 ++; if(i == 15) 熟慮 ++; if(i == 16) 熟慮1 ++; if(i == 17) 熟慮2 ++; if(i == 18) アゾリウスの魔除け ++; if(i == 19) アゾリウスの魔除け1 ++; if(i == 20) アゾリウスの魔除け2 ++; } printf("瞬唱の魔道士:%d\n", 瞬唱の魔道士); printf("瞬唱の魔道士:%d\n", 瞬唱の魔道士1); printf("瞬唱の魔道士:%d\n", 瞬唱の魔道士2); printf("ボーラスの占い師:%d\n", ボーラスの占い師); printf("ボーラスの占い師:%d\n", ボーラスの占い師1); printf("ボーラスの占い師:%d\n", ボーラスの占い師2); printf("修復の天使:%d\n", 修復の天使); printf("修復の天使:%d\n", 修復の天使1); printf("修復の天使:%d\n", 修復の天使2); printf("霊異種:%d\n", 霊異種); printf("中略:%d\n", 中略); printf("中略:%d\n", 中略1); printf("灼熱の槍:%d\n", 灼熱の槍); printf("灼熱の槍:%d\n", 灼熱の槍1); printf("熟慮:%d\n", 熟慮); printf("熟慮:%d\n", 熟慮1); printf("熟慮:%d\n", 熟慮2); printf("アゾリウスの魔除け:%d\n", アゾリウスの魔除け); printf("アゾリウスの魔除け:%d\n", アゾリウスの魔除け1); printf("アゾリウスの魔除け:%d\n", アゾリウスの魔除け2); return 0; }

  • C言語

    forの直後で1+2+3+4+5+・・・・・・・と加算し続ける式がわからないので教えてください。 #include<stdio.h> int main(void) { char moji; int i,sum; printf("正の整数を1から順に加算します。n\"); printf("加算を開始してよろしいですか。(Y=実行。N=終了)\n"); moji=getchar(); if(moji==y) { for(i=2;sum>=1001;i++) { この部分がわかりません; printf("加算値は%dです。¥n",sum); } }else if(moji=='n'){ printf("終了します。\n"); }else{ printf("YまたはNを入力してください。\n"); } return 0; }

  • C言語でのじゃんけん

    こんちには。 C言語の乱数を用いてじゃんけんプログラムを作ろうと思っているのですが、 エラーメッセージが出てしまいうまくいきません。 どこがおかしいのでしょうか? #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int i,j,k; printf("じゃんけんをしましょう(ぐー:1、ちょき:2、ぱー:3)¥n"); for(k=k; k<=10; k++) { srand(time(NULL)); j=rand()%3+1; scanf("%d",&i); if(i==1&&j==1) printf("私はグーなので、あいこです¥n"); else if(i==1&&j==2) printf("私はチョキなので、あなたの勝ちです¥n"); else if(i==1&&j==3) printf("私はパーなので、あなたの負けです¥n"); else if(i==2&&j==1) printf("私はグーなので、あなたの負けです¥n"); else if(i=2&&j==2) printf("私はチョキなので、あいこです¥n"); else if(i==2&&j==3) printf("私はパーなので、あなたの勝ちです¥n"); else if(i==3&&j==1) printf("私はグーなので、あなたの勝ちです¥n"); else if(i==3&&j==2) printf("私はチョキなので、あなたの負けです¥n"); else if(i==3&&j==3) printf("私はパーなので、あいこです¥n"); else printf("1か2か3を入力してください¥n"); } } OS mountain lionで利用中ですが、 「じゃんけんをしましょう(ぐー:1、ちょき:2、ぱー:3)」 と表示されたまま、うまく動作しません。 教えてください。

    • ベストアンサー
    • Mac
  • C言語

    #include <stdio.h> int main(void) { int a=0,ans1,ans2,ans3,ans4; printf("整数を入力してください。\n"); scanf("%d",a); ans1 = a+7; ans2 = a*;8 ans3 = a%3; ans4 = a*(-1); printf("%d\n",ans1); printf("%d\n",ans2); printf("%d\n",ans3); if(a==15){ prntf("true\n",a); } else{ printf("false\n",a); } if(a != 8){ printf("true\n",a); } else{ printf("false\n",a); } if(a <= 3){ printf("true\n",a); } else{ printf("false\n",a); } printf("%d\n",ans4); if(a<2||7<a){ printf("true\n",a); } else{ printf("false\n",a); } return 0; } これを実行しようとしてもexeファイルになりません。 教えていただけませんか?

  • C言語について

    問題文が表示され、その解答を数字で入力すると正解の場合は「大正解」、不正解の場合は「はずれ」と表示されるプログラムなのですが、?部分がどうしても分りません・・・ 正しいと思えば0、間違ってると思うなら1と入力するプログラムです。 どなたかご教授いただけるとありがたいです>< main() { int i,k; i=0; while(i<5){ printf("次の文章が正しければ0、間違っていれば1を入力してください。\n"); printf("%s",q[i]); scanf("%d",&k); if(a[?]==?) {printf("大正解\n");} else {printf("はずれ\n");} i????; } printf("おしまい\n"); }

  • c言語 

    答えを0にするこまち算のプログラムを組んでみたのですが、ここからどうしても進まなくなってしまいました。 自分ではいけるかなと思ったのですが、9-8-7+65-4321=9など答えがありえない数になってしまいます。 どこがいけないか教えてください。むしろ最初から組み直した方がよいのでしょうか… #include <stdio.h> int cul(); int num[9] ={9,8,7,6,5,4,3,2,1}; int total;/**/ int kigou[8]={0,0,0,0,0,0,0,0}; int main(){ for(kigou[0]=0;kigou[0]<3;kigou[0]++){ for(kigou[1]=0;kigou[1]<3;kigou[1]++){ for(kigou[2]=0;kigou[2]<3;kigou[2]++){ for(kigou[3]=0;kigou[3]<3;kigou[3]++){ for(kigou[4]=0;kigou[4]<3;kigou[4]++){ for(kigou[5]=0;kigou[5]<3;kigou[5]++){ for(kigou[6]=0;kigou[6]<3;kigou[6]++){ for(kigou[7]=0;kigou[7]<3;kigou[7]++){ keisan(); } } } } } } } } return 0; } int keisan(){ int n =0; int flag = 0; int t = 0; int i = 0; total = num[0]; /* for (n=0;n<9;n++) printf("kigou[%d] == %d",n,kigou[n]);確かめ*/ for(;n<8;n++){ if(kigou[n] == 0 && n == 0){ total = total * 10 + num[n+1]; for(flag=1;kigou[n+flag]==0 && (n+flag)<9 ;flag++){ total = total * 10 + num[n+flag+1]; } n = n + flag; } flag=0; if(kigou[n]!= 0){ for(flag=1;kigou[n+flag]==0 && (n+flag)<9 ;flag++){ t = num[n+1] * 10 + num[n+flag+1]; } n = n+ flag; total = total + t; } } /*0になる計算式の表示*/ kigou[8]=2;/*表示しないために空白を入れる*/ if(total==0){ for(i=0;i<9;i++){ printf("%d",num[i]); if(kigou[i]==0) printf("+"); if(kigou[i]==1) printf("-"); if(kigou[i]==2) printf(""); } printf("=%d\n",total); } return 0; }

  • C言語

    main() { int a = 5,b=2,e,f,g=3,i; double c,d,h=2.0; c = a/b; printf("c = %f\n",c); d = a/h; printf("d=%f\n",d); e = a++; f = ++b; g+= 4; i= ++a + b; printf(" a = %d\n",a); printf(" b = %d\n"b); printf(" e = %d\n"e); printf(" f = %d\n"f); printf(" g = %d\n"g); printf(" i = %d\n" i); 答え a=7,b=3,c=2.0,d=2.5,e=5,f=3,g=7,i=10 この問題のa,b,iがどうやってこの値になるのかがわかりません解説お願いします。

  • c言語です

    c言語初心者です。今大学の課題でc言語のプログラムをかいているのですが、うまくいかないので助けて欲しいです。以下のようなプログラムで調和平均の値を出したいのですがなぜか表示されません。infと表示されてしまいます。あと調和平均とはn/(1/d1+1/d2+1/d3+.........+1/dn)の値です。ここでd1~dnは入力された数のことです。なので0が入力された場合は値を返さないようにしたいです。   どこをどのように直せばいいのか教えてください。よろしくお願いします。 #include <stdio.h> #include<math.h> #define M 1000 int main (int argc, const char * argv[]) { // insert code here... float d[M]; double e[M]; double wa=0.0,av,bun=0,kika=1,tyowa=0; /*avはaverageを,bunは分散を意味します*/ int i=0,j=0; printf("複数の数字を入力してください\n"); printf("数字入力を終了するときはnull文字を入力してください\n"); printf("数字以外が入力されたら\n"); printf("それまでの数字の計算結果を表します\n"); /*数字を入力、和を求める*/ while (scanf("%f",&d[i])!='\0') { wa=wa+d[i]; i++; } if (i!=0) { printf("算術平均は%fです\n",wa/i); av=wa/i; for (j=0; j<i; j++) { kika=kika*d[j]; } printf("幾何平均は%fです\n",pow(kika,1./i)); for (j=0; j<i; j++) { if (d[j]=0) { printf("調和平均は出せません\n"); } else e[j]=1/d[j]; } for (j=0; j<i; j++) { tyowa=tyowa+e[j]; } printf("調和平均は%fです\n",e[1]); for (j=0; j<i; j++) { bun=bun+(d[j]-av)*(d[j]-av); } printf("分散の値は%fです\n",bun/i); } else { printf("数字を入力してください\n"); } return 0; }

  • C言語について教えてください

    ファイルの文を読み込み、I、Weなどの定めた単語の数を数えるプログラムを作りたいのですが、うまくいきません。 具体的な問題点は、単語の数を数える際、一致する単語があった場合、再び最初から文を見直すため、無限ループしてしまう。 We,WE、weなど大文字小文字の違いで単語が数えられないなどです。 #include <stdio.h> #include <stdlib.h> #include <string.h> int main( void ) { char filename[FILENAME_MAX]; int j=0; int k=0; int l=0; int m=0; int n=0; int o=0; int w; char str[50]; FILE *fp; gets(filename); fp = fopen(filename,"r"); { if(fp==NULL) { printf("ERROR"); return -1; } } fscanf(fp,"%50s",str); for(w=0;w<=j+k+l+m+n+o;w++) { if(strcmp("I",str)==0) { j++; } if(strcmp("We",str)==0) { k++; } if(strcmp("You",str)==0) { l++; } if(strcmp("He",str)==0) { m++; } if(strcmp("She",str)==0) { n++; } if(strcmp("They",str)==0) { o++; } } printf("I: %d\n",j); printf("We: %d\n",k); printf("You: %d\n",l); printf("He: %d\n",m); printf("She: %d\n",n); printf("They: %d",o); fclose(fp); return 0; }

  • C言語の問題がわからないです。

    C言語のプログラムで、列数を自分で決めて、 (例)3列         ●(この行を最後として)   □● ●□● 上記のプログラムを作りたいのですが、 上手くいきません。途中まで作ったのですが、なかなか思うようにいかないです。どうすれば上記のようになりますでしょうか? #include <stdio.h> void disp(int x, int y); main() { int i,n; printf("表示する列:"); scanf("%d",&n); disp(3,3); for(i=1;i<=n;i++){ if(i%2==0){ disp(n-i,4); disp(i,2); } else{ disp(n-i,4); disp(i,1); } disp(1,3); } } void disp(int x, int y) { int i; for(i=0;i<x;i++){ if(y==1){ printf("●"); } else if(y==2){ printf("□"); } else if(y==3){ printf("\n"); } else{ printf("\0"); } } }