関数fc

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
mook

関数fc

#1

投稿記事 by mook » 3年前

c言語のm個の中からn個を選ぶ際の『場合の数』(順列組み合わせ)mCnは以下の式で計算することができる(ただし、m>=n)
m!
mCn=ーーーー
n!(m−n)!
この公式を利用して、キーボードから入力したm、nの値に対する順列組み合わせを計算するプログラムを作成したい、以下に示すのがそのプログラムの一部である、なおプログラム作成に当たっては、引数として渡したint型変数の階乗をint型の戻り値として返す関数(関数名 fc)を作成し、これをmain関数中で3回呼び出すようにした、関数fc()の部分を考えてプログラムを作成お願いします
c言語始めたばかりで関数fc部分だけがわからないです。おしえてくださいお願いします
nの階乗n!の定義は以下の通りです
n!=1×2×3×、、、×(n−1)×n

#include<stdio.h>
#include<math.h>

関数fc()の記述部分

int main()

int m,n;
printf(”m=”);
scanf(”%d”,&m);
printf(”n=”);
scanf(”%d”,&n);
printf(”%dC%d=”,m,n);
printf(”%dY=n”,fc(m)/(fc(m−n)×fc(n)));
return(0);

mook

Re: 関数fc

#2

投稿記事 by mook » 3年前

公式は
m!
ーーー =mCn
n!(m−n)!
です

アバター
usao
記事: 1635
登録日時: 7年前

Re: 関数fc

#3

投稿記事 by usao » 3年前

C言語初心者なので,負の数の階乗とかどうすればいいのかわかりませんが,とりあえず書いてみました.
fnの引数が 1~そこそこ小さい値 なら動くかもしれません.

コード:

int add( int a, int b )
{
	int i;
	int d = ( b>0 ? 1 : -1 );
	int n = ( b>0 ? b : -b );
	for( i=0; i<n; ++i )
	{	a += d;	}

	return a;
}

int mul( int a, int b )
{
	int i;
	int r = 0;
	int n = ( b>0 ? b : -b );
	for( i=0; i<n; ++i )
	{	r = add( r, a );	}

	return ( b>0 ? r : -r );
}

int fn( int kitten )
{
	return ( kitten>1 ? mul( kitten, fn(kitten-1) ) : 1 );
}
addとmulについては
http://dixq.net/forum/viewtopic.php?f=3&t=19319
にて改善案が示されていますので,参考にすると良いかもしれません.

アバター
purin52002
記事: 235
登録日時: 4年前
連絡を取る:

Re: 関数fc

#4

投稿記事 by purin52002 » 3年前

こんにちは

1.階乗を計算する方法はわかりますか?(って質問文の中に階乗の定義は書いてありますね^^;)

階乗は1~nまでをかけ合わせたものになります。
手っ取り早く計算するには、forループを使うといいと思います。
2.forループの使い方はわかりますか?

計算はforループの中で掛け算をしていくだけです。
3.どういう計算式を書けばいいかはわかりますか?

計算さえできてしまえば後はもう関数にまとめてしまうだけです。
4.関数の作り方はわかりますか?

以上、4つのうちどこまでわかってどこまでわからないのか教えてもらってもいいですか?
最初から教えていくのはめんどくさいので(めんどくさがりなんです^p^)
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

返信

“C言語何でも質問掲示板” へ戻る