ページ 11

条件分岐を使用しない数値の大小比較

Posted: 2011年2月09日(水) 21:27
by 佐藤
初めて質問します。よろしくお願いします。

このまえ、学校の授業で問題を出されました、その問題の内容は、
「引数を2つわたして、条件分岐やfor文while文を使わずに大きい方の数値を返す関数を作れ」
というものでしたが、どうすれば良いのか全くわかりません。

どなたか、わかるようでしたら教えてほしいです。

Re: 条件分岐を使用しない数値の大小比較

Posted: 2011年2月09日(水) 21:50
by Tatu
思いついたので問題です。

a*b=6,a+b=5
であるとき、a,bのうち大きいほうの値はいくらか。
今回は簡単な答えからつくったが他の値でも
考えられるように導出法も考えること。

ヒント:x=a,bとなるようなxの二次方程式

Re: 条件分岐を使用しない数値の大小比較

Posted: 2011年2月09日(水) 22:52
by 佐藤
返信ありがとうございます。
2次方程式なんて久しぶりに聞いたので全然覚えてないです。

(x-a)(x-b) = 0
x^2-ax-bx+ab = 0
x^2-(a+b)x+ab = 0

a+b = 5 , a*b = 6から
x^2-5x+6 = 0

↑を因数分解して
(x-2)(x-3) = 0
x = 2 , 3

↑から
aとbで大きいのは3? ってことでいいんでしょうか?

Re: 条件分岐を使用しない数値の大小比較

Posted: 2011年2月09日(水) 23:03
by フリオ
比較演算子(<、>、<=、>=)は結果が真なら1、偽なら0を返します。

解決しました

Posted: 2011年2月09日(水) 23:17
by 佐藤
返信ありがとうございます。

比較演算子の真(1)、偽(0)で気づきました。

int Func(int a , int b){

return (a*(a>=b))+(b*(b>a));

}

でうまくいったみたいです。

みなさん本当にありがとうございました。

Re: 条件分岐を使用しない数値の大小比較

Posted: 2011年2月09日(水) 23:42
by Tatu
私が考えていたのと順番を逆に考えましたか。
(x-a)(x-b)=0という形になり、
展開するとx^2-(a+b)x+ab=0となるので
解の公式よりa,bのうち、大きいほうはx=( (a+b) + sqrt( (a+b)*(a+b) - 4*a*b ) )/2.0
である。と書くつもりだったのですが。

条件分岐は禁止されていても条件式は禁止されていませんでした。

Re: 条件分岐を使用しない数値の大小比較

Posted: 2011年2月10日(木) 09:19
by maru
条件分岐を使わないという制約条件がよく分からないのですが、大きいほうを返す関数っては、普通は

コード:

int max(int a, int b)
{
    return a > b ? a : b;
}
とします(というか、このようにマクロで定義されていたりテンプレート関数で定義されている)。
3項演算子は条件分岐なのかなぁ?