2016-03-19 13 views
-4

私はすでにnominatordenominatoris_correct()という2つの必要条件をチェックする関数を持っています。しかし今は私の分数を還元不可能にするshorten()関数を作らなければなりません。"?"の後の複数の命令オペレータ

私はgcd()関数(最大公約数)を作ったので、shorten()関数を自分の構造体に入れる必要があります。 gcd()戻っていない1値が、その後、私は、この値によってnを分割し、この値でdを分割したいのであれば

struct fraction { 
       int n,d; 
       bool is_correct(){return d!=0?(abs(n)<abs(d)?true:false):false;}; 
       void shorten(){gcd(n,d)!=1?(n=n/gcd(n,d);d=d/gcd(n,d)):;}; 
       }; 

int gcd(int x, int y) 
{ 
    int z; 
    while (y!=0){z=x%y;x=y;y=z;} 
    return x; 
} 

:それはこのようになります。

私がそれを私に期待しているようにしようとすると ":" "before"; "多くの場所でトークン。私は間違って何をしていますか?

+2

だけではなく、 'とあまりを行うの?それはコードを短くすることができますがif' /'他の... ''(、それはまた、より少ないコードを作ることができます '、それを書き出します読める)。 – crashmstr

+0

このコードは読みやすく、理解しやすいですか? –

答えて

3

?:オペレータの:部分に式を指定していません。

void shorten(){gcd(n,d)!=1?(n=n/gcd(n,d);d=d/gcd(n,d)):;};

void shorten() { gcd(n, d) != 1 ? (n = n/gcd(n, d) ; d = d/gcd (n , d)):; }; 
                ^^^^^^      ^^ 
              missing      colon should be 
              paranthesis/    in between the 
              semicolon doesn't   statements 
              belong here 

だからです:あなたは、エラーを見つけるだろう、正しくコードをフォーマットすることにより

int g = gcd(n, d); 
if (g != 1) 
{ 
    n = n/g; 
    d = d/g; 
} 
+0

そして、もし 'gcd() '負の数を持たなければならないのですか?それは少し台無しにしないだろうか? – Frynio

+0

gcd関数からの戻り値として絶対値を使用する必要があります。分子と分母の両方を負に扱う必要があるかもしれませんが、それは別の問題です。 –

+0

分母がゼロに等しいかどうかのチェックが必要です。 1で割るのは時間の無駄です。 –

0

:あなたはこのようifの文の代わりに、三項演算子を使用する必要があります

void shorten() { gcd(n, d) != 1 ? (n /= gcd(n, d)) : (d /= gcd(n, d)); } 

またはより良い

void shorten() 
{ 
    if (gcd(n, d) != 1) 
     n /= gcd(n, d); 
    else 
     d /= gcd(n, d); 
} 
関連する問題