ページ 11

ある値を入力した場合・・・

Posted: 2010年12月03日(金) 16:39
by an
ある値を2つ入力して、どっちが1に近い値かどうかを調べる処理を作りたいのですが、近い値って言うのがわからなくっていきず待ってます。
何かいい方法はないでしょうか??
どなたかお知恵をお貸しください!!お願いします。

Re: ある値を入力した場合・・・

Posted: 2010年12月03日(金) 17:08
by ゆーずぃ(携帯)
まずは値が正か負かをそれぞれ調べます。

両方正:小さい方を選択(5と10なら5)

両方負:大きい方を選択(-3と-10なら-3)

正と負:負数に-を掛けて絶対値を求めます。その上で両方正の場合として求める。

ビット演算など使えばもっとスマートに出来そうですが。参考までに。
(携帯からですが、ゆーずぃが書きました)

Re: ある値を入力した場合・・・

Posted: 2010年12月03日(金) 17:13
by ISLe
1が目的地
ある値が現在地
として考えてみたら分かりませんか?
#正負の向きがあるので比較は絶対値で。

Re: ある値を入力した場合・・・

Posted: 2010年12月03日(金) 17:30
by Ultimate
ここでは数直線を思い浮かべてみてください。
ある点からある点までの距離のことを何と言ったでしょう・・・それは絶対値です。
2つの数を入力し、それぞれ1との差の絶対値を求めて、その絶対値が小さいほうが1に近い数だとわかります。
stdlib.hにはabsという絶対値を求める関数がありますが、ここではあえて自分でその関数を作ってみたいと思います。
下に解答例を書いておくので、まずは上に書いたヒントをもとにがんばってみてください。
► スポイラーを表示

Re: ある値を入力した場合・・・

Posted: 2010年12月03日(金) 17:42
by an
なるほど、思いつきませんでした・・・・。
結構、簡単なことでしたね^^;参考にさせていただきます。

皆さんありがとうございました!!

Re: ある値を入力した場合・・・

Posted: 2010年12月04日(土) 13:22
by Tatu
ある数を二乗したものはその絶対値を二乗したものに等しいことを利用して書いてみました。

コード:

#include <stdio.h>

int main(void){
	int a,b,c;//3点の座標
	int d;//abとbcの長さの二乗の差
	int end=1;//終了判定

	do{
		printf("a,b,cの座標を整数で入力してください\n");
		printf("a=");
		scanf("%d",&a);
		printf("b=");
		scanf("%d",&b);
		printf("c=");
		scanf("%d",&c);

		d=(a-b)*(a-b)-(a-c)*(a-c);

		if(d==0) printf("b,cはaから同じ距離にあります\n\n");
		else if(d<0) printf("bのほうがaに近いです\n\n");
		else printf("cのほうがaに近いです\n\n");

		printf("もう一度やりますか?1:はい それ以外の整数:いいえ\n");
		scanf("%d",&end);
	}while(end==1);

	return 0;
}