ページ 11

最小公倍数と最大公約数

Posted: 2011年6月07日(火) 19:09
by みっちょん
はじめまして
初歩過ぎることですが知恵を貸してください><

OSはwindowsXP
言語 c++
Microsoft visual c++ Express

二つの自然数から最小公倍数と最大公約数を求めるプログラムを作ろうとしてつくってみたものの
思うように進まずwebのサンプル等を参考にしてみてもだめでした

二つの自然数を入力し最小公倍数を求めようとするとエラーが出ます
Run-Time Check Failure #3 - the valiable "na" is being used without being initialized
と出ます

以下コード

コード:

#include <stdio.h>
void main()
{
	int a,b;
	int x,y;
	int na,nb = 0;

	printf("一つ目の自然数を入力してください -> ");
	scanf("%d",&a);
	while(a < 0)
	{
		printf("入力が不正です\n");
		printf("一つ目の自然数を入力してください -> ");
	    scanf("%d",&a);
	}

	printf("二つ目の自然数を入力してください -> ");
	scanf("%d",&b);
	while(b < 0)
	{
		printf("入力が不正です");
	    printf("二つ目の自然数を入力してください -> ");
		scanf("%d",&b);
	}

	if(a > b)
		x = a;
		y = b;

	if(b > a)
		x = b;
		y = a;

	while(a*na != b*nb)
	{
		if(a * na > b * nb)
			nb++;
		if(a * na < b * nb)
			na++;
	}
	

	printf("%dと%dの最小公倍数は%dです",a,b,na*a);

	getchar();
	getchar();
}
お願いします

Re: 最小公倍数と最大公約数

Posted: 2011年6月07日(火) 19:35
by softya(ソフト屋)
これは、C++ではなくC言語だと思いますが自分の勉強されている言語をちゃんと把握されるべきだと思います。
それとも本当はC言語風ではなくC++の書き方で書きたいのでしょうか?

で、まずエラーの件ですがnaが未初期化です。
>Run-Time Check Failure #3 - the valiable "na" is being used without being initialized
google翻訳。variable の打ち間違いは修正。
http://translate.google.co.jp/#en|ja|th ... nitialized

[補足]
他にも問題がありますが、まずここを直しましょう。

[追記]
その前に、みっちょんさんの考える最小公倍数と最大公約数の求め方を日本語で書いてみてください。

Re: 最小公倍数と最大公約数

Posted: 2011年6月07日(火) 22:48
by lbfuvab
見てるか分かりませんが、
nbを0で初期化するのは良くないと思いますよ。
naもnbも1で初期化するのが良いでしょう。

また、この方法は効率が悪いので「ユークリッドの互除法」でググれば幸せになれるかもしれません。