ページ 11

nCrを求めるプログラムについて

Posted: 2012年10月19日(金) 11:55
by nikky
学校の課題でnCrを求めるプログラムを作ったのですがうまく答えが出ません。
これを出力すると計算結果が0としか表示されません
どこが違うのかわからないのでヒントなどをもらえるとありがたいです。
学校から出された課題にはn!を求めるプログラムをfk(x)関数でnCrの計算を求めるプログラムをfncr(x,y)関数で作るように言われました。
環境はPC:win7、コンパイラがVisual Stdioです。

コード:

#include<iostream>
using namespace std;

int fncr(int,int);
int fk(int);

int main()
{
	int n,r,nCr;
	cout<<"**nCrを求めます**\n";
	cout<<'\n';
	cout<<"n?";cin>>n;
	cout<<"r?";cin>>r;
	cout<<'\n';
	nCr=fncr(n,r);
	cout<< n <<"C"<< r <<"="<<nCr<<'\n';

	return 0;
}

int fncr(int x,int y) //nCrを求める関数
{
	int z;
	z=fk(x)/(fk(x-y)*(fk(x-(x-y))));  // n!÷((n-r)!×r!
	
	return z;
}

int fk(int x) //n!の計算をする関数
{
	int k=x;
	if(x<=1)
	{
		x--;
		k=k*x;
	}
	return k;
}

Re: nCrを求めるプログラムについて

Posted: 2012年10月19日(金) 12:00
by nikky
ソースがちゃんとなってなかったのでそーすだけ貼り直します

コード:

#include<iostream>
using namespace std;

int fncr(int,int);
int fk(int);

int main()
{
	int n,r,nCr;
	cout<<"**nCrを求めます**\n";
	cout<<'\n';
	cout<<"n?";cin>>n;
	cout<<"r?";cin>>r;
	cout<<'\n';
	nCr=fncr(n,r);
	cout<< n <<"C"<< r <<"="<<nCr<<'\n';

	return 0;
}

int fncr(int x,int y) //nCrを求める関数
{
	int z;
	z=fk(x)/(fk(x-y)*(fk(x-(x-y))));
	
	return z;
}

int fk(int x) //n!の計算をする関数
{
	int k=x;
	if(x<=1)
	{
		x--;
		k=k*x;
	}
	return k;
}

Re: nCrを求めるプログラムについて

Posted: 2012年10月19日(金) 12:12
by ホヅミ
24行目:fk(x-(x-y)) はfk(y)
32行目はwhile文なのではないでしょうか?

Re: nCrを求めるプログラムについて

Posted: 2012年10月19日(金) 12:24
by nikky
指摘されたとこは修正したのですが結果が変わりません

コード:

#include<iostream>
using namespace std;

int fncr(int,int);
int fk(int);

int main()
{
	int n,r,nCr;
	cout<<"**nCrを求めます**\n";
	cout<<'\n';
	cout<<"n?";cin>>n;
	cout<<"r?";cin>>r;
	cout<<'\n';
	nCr=fncr(n,r);
	cout<< n <<"C"<< r <<"="<<nCr<<'\n';

	return 0;
}

int fncr(int x,int y) //nCrを求める関数
{
	int z;
	z=fk(x)/(fk(x-y)*(fk(y)));
	
	return z;
}

int fk(int x) //n!の計算をする関数
{
	int k=x;
	while(x<=1)
	{
		x--;
		k=k*x;
	}
	return k;
}

Re: nCrを求めるプログラムについて

Posted: 2012年10月19日(金) 12:28
by ホヅミ
whileの条件式をもう一度見直してみると幸せになれるかもしれません。
なぜ答えが0になるかなのですが、階乗を行ったときKが0になってしまっているからです。
whileの中にデバッグモニターとして、どういった計算が行われて、どういった値が入っているのかを見直してみると納得できると思います。
GOODLUCK!!BABY!!

Re: nCrを求めるプログラムについて

Posted: 2012年10月19日(金) 12:34
by nikky
よく見たらx<=1じゃなくてx>=1ですね・・・・
修正して実行してみたところ「ファイル名.exeは動作を停止しました」
これはどのようなときに出るのでしょうか?

Re: nCrを求めるプログラムについて

Posted: 2012年10月19日(金) 12:40
by Ryo
VisualStudioを使ってるとのことですが
デバッグモードで動かしたときに、
動作中に一時中断させる"ブレーク"や、
中断しているときに変数の値が見れる"ウォッチ"といった機能は使っていますか?

Re: nCrを求めるプログラムについて

Posted: 2012年10月19日(金) 12:51
by nikky
そのような機能があることを全く知りませんでした・・

どこで使うのでしょうか?

Re: nCrを求めるプログラムについて

Posted: 2012年10月19日(金) 13:19
by nkkiy
x>=1じゃなくてx>1でした・・・

無事に解決できましたありがとうございました。