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

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

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

#1

投稿記事 by nikky » 11年前

学校の課題で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;
}

nikky

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

#2

投稿記事 by nikky » 11年前

ソースがちゃんとなってなかったのでそーすだけ貼り直します

コード:

#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;
}

ホヅミ
記事: 110
登録日時: 13年前

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

#3

投稿記事 by ホヅミ » 11年前

24行目:fk(x-(x-y)) はfk(y)
32行目はwhile文なのではないでしょうか?

nikky

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

#4

投稿記事 by nikky » 11年前

指摘されたとこは修正したのですが結果が変わりません

コード:

#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;
}

ホヅミ
記事: 110
登録日時: 13年前

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

#5

投稿記事 by ホヅミ » 11年前

whileの条件式をもう一度見直してみると幸せになれるかもしれません。
なぜ答えが0になるかなのですが、階乗を行ったときKが0になってしまっているからです。
whileの中にデバッグモニターとして、どういった計算が行われて、どういった値が入っているのかを見直してみると納得できると思います。
GOODLUCK!!BABY!!

nikky

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

#6

投稿記事 by nikky » 11年前

よく見たらx<=1じゃなくてx>=1ですね・・・・
修正して実行してみたところ「ファイル名.exeは動作を停止しました」
これはどのようなときに出るのでしょうか?

Ryo

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

#7

投稿記事 by Ryo » 11年前

VisualStudioを使ってるとのことですが
デバッグモードで動かしたときに、
動作中に一時中断させる"ブレーク"や、
中断しているときに変数の値が見れる"ウォッチ"といった機能は使っていますか?

nikky

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

#8

投稿記事 by nikky » 11年前

そのような機能があることを全く知りませんでした・・

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

nkkiy

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

#9

投稿記事 by nkkiy » 11年前

x>=1じゃなくてx>1でした・・・

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

閉鎖

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