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

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

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

#1

投稿記事 by 佐藤 » 8年前

初めて質問します。よろしくお願いします。

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

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

アバター
Tatu
記事: 440
登録日時: 8年前
住所: 北海道

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

#2

投稿記事 by Tatu » 8年前

思いついたので問題です。

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

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

佐藤

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

#3

投稿記事 by 佐藤 » 8年前

返信ありがとうございます。
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: 条件分岐を使用しない数値の大小比較

#4

投稿記事 by フリオ » 8年前

比較演算子(<、>、<=、>=)は結果が真なら1、偽なら0を返します。

佐藤

解決しました

#5

投稿記事 by 佐藤 » 8年前

返信ありがとうございます。

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

int Func(int a , int b){

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

}

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

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

アバター
Tatu
記事: 440
登録日時: 8年前
住所: 北海道

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

#6

投稿記事 by Tatu » 8年前

私が考えていたのと順番を逆に考えましたか。
(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
である。と書くつもりだったのですが。

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

maru
記事: 150
登録日時: 8年前

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

#7

投稿記事 by maru » 8年前

条件分岐を使わないという制約条件がよく分からないのですが、大きいほうを返す関数っては、普通は

コード:

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

閉鎖

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