質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

4回答

1359閲覧

規則性のある長いif文

t.s_k

総合スコア61

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/03/10 04:27

編集2019/03/10 04:44

直交判定

if文に複数の同じ型の条件がある時の記述の質問です。
今回の問題の場合、規則性のある条件が四回現れたり長い記述が必要になるのですが、一般的にどの様に記述するのでしょうか。

cpp

1if(c[1].real() - c[0].real() == 0 || 2 c[3].real() - c[2].real() == 0 || 3 c[1].imag() - c[0].imag() == 0 || 4 c[3].imag() - c[2].imag() == 0 5 ){ 6... 7}else if( ((c[1].real() - c[0].real()) / (c[1].imag() - c[0].imag())) * 8 ((c[3].real() - c[2].real()) / (c[3].imag() - c[2].imag())) == -1 9){ 10... 11}else{ 12... 13}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

複素の引き算を用いて

c++

1std::complex<double> l[] = {c[1] - c[0], c[3] - c[2]}; 2if(l[0].real() == 0 || l[0].imag() == 0 || 3 l[1].real() == 0 || l[1].imag() == 0 )

なお、直交の判定には内積を用いるのが一般的かと思います。
複素数を利用するならば除算やstd::argという手段もあるでしょう。

投稿2019/03/10 06:51

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

私ならそのような場合はbool型のフラグを一個用意しますね。

c++

1 2bool flag = false; 3for(int i =0; i < MAX; i+=2){ 4 if(c[i].real() - c[i + 1].real() != 0){ 5 flag = true; 6 brack; 7 } 8} 9if(!flag){...}

演算式をあえて逆にしなくてはならないがcの個数が増えた時でも対応できるので楽ですね...
これはAND回路の式ですが組立方によってはOR回路も行けるので楽ですね。
複雑に絡み合っているならどうしようもないですが...

投稿2019/03/12 02:39

編集2019/03/12 02:42
stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

詳しい人から、もっとエレガントな回答がありそうですが、、、

自分だったら、boolを返す関数化するかと思います。
最初の if()文だったら、

C++

1 bool IsSamePos(xxx c, int maxCnt) 2 { 3 for (int i = 1; i < maxCnt; i += 2) { 4 if (c[i].real == c[i - 1]) return true; 5 if (c[i].imag == c[i - 1]) return true; 6 } 7 return false; 8 }

みたいに。 (コンパイルしてないので、ミスあるかも)

投稿2019/03/10 05:08

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

もし、同一算出(含関数呼び出し)の結果に対する判定が複数回有るなら、判定の前に一旦変数に代入しちゃいますが・・・

投稿2019/03/10 05:11

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問