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

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

新規登録して質問してみよう
ただいま回答率
85.46%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

6回答

701閲覧

次のフローチャートを一つのIF文にしたい

sakata_inu

総合スコア25

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

2グッド

1クリップ

投稿2020/03/13 03:13

編集2020/03/13 04:30

以下のフローチャートを一つのIF文にしたいです。
イメージ説明

DrqYuto, s.k👍を押しています

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

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

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

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

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

beginner_t

2020/03/13 03:20

if文にするにあたって、ご自身でわからなかったことを記載してください。 このままでは誰かにつくてもらうための丸投げの質問となります。
yambejp

2020/03/13 03:21

変数的なものにハイフンを入れるのは混乱の元なのでやめてください
miyabi_takatsuk

2020/03/13 03:53

言語の質問タブがありませんが、言語はなんでもいいのでしょうか? 言語によって書き方変わる場合もありますが・・・。
sakata_inu

2020/03/13 04:28

愚直に書けばOrlofskyさんやyambejpさんのような書き方になりますが、もっと簡潔に書けないか模索していただけです。変数に関しては…おっしゃる通りなので差し替えておきます。
sakata_inu

2020/03/13 04:31

言語は何でも良かったです。 オーソドックスな言語であれば条件式に大きく差異は出ないはずなので。
fana

2020/03/13 05:49

> 愚直に書けばOrlofskyさんやyambejpさんのような書き方になりますが、もっと簡潔に書けないか であれば,最初からそういう内容の質問文を書けば良い,というか,書くべきに思う.
guest

回答6

0

trueとなりうるパターンをすべて列挙して、それをすべてorすればいいのです

投稿2020/03/13 03:21

y_waiwai

総合スコア87800

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

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

0

実用的には既に回答が出尽くしているので論理式の簡単化をする方法としてカルノーマップを紹介します。 具体的な手順はウェブ検索すればすぐに出てくるので詳細な説明はせずに今回の質問に当てはめてみます。

まず真理値表としてまとめるとこうなります。

a1a2b1b2結果
00000
00010
00100
00111
01000
01010
01100
01111
10000
10010
10100
10110
11001
11011
11100
11111

これをカルノーマップにするとこうなります。

イメージ説明

隣接する項をまとめると……

イメージ説明

となり、このまとまりが意味する式は

イメージ説明

ですから、この式を選言で繋げた A1 && A2 && !B1 || A2 && B1 && B2 || !A1 && B1 && B2 が質問中のフローチャートを積和標準形で表した最小の式です。 (ここでは便宜のためにプログラミング言語 C の演算子を前提として表記しています。)

あくまでも論理式 (and,or,not だけの演算) として、しかも積和標準形で表せる中では最小であるに過ぎませんのでプログラミング言語として表すのであれば各言語に固有の演算子を利用してもっと簡単に出来る可能性はあります。

投稿2020/03/13 09:15

SaitoAtsushi

総合スコア5466

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

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

0

これでどうでしょう.
評価順もフローの通りかと.

C++

1if( 2 A1 ? 3 ( A2 && (!B1 || B2) ) : 4 ( B1 && B2 ) 5) 6{ /* true */ } 7else 8{ /* false */ }

投稿2020/03/13 06:06

fana

総合スコア11708

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

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

fana

2020/03/13 06:08

三項演算子使って「if1つ」と言い張る!
sakata_inu

2020/03/13 06:17

確かに何も間違っていない!
fana

2020/03/13 06:57

これなら各条件を複数回評価しないハズ.
guest

0

コンピューター言語が明示されていないので、イメージだけ

IF A_1 IS TRUE AND A_2 IS TRUE AND B_1 IS FALSE OR A_1 IS TRUE AND A_2 IS TRUE AND B_1 IS TRUE AND B_2 IS TRUE OR A_1 IS FALSE AND B_1 IS TRUE AND B_2 IS TRUE THEN True ELSE False END-IF

投稿2020/03/13 03:32

Orlofsky

総合スコア16415

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

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

0

A1===TRUE && A2===TRUE && B1===FALSE ||
A1===TRUE && A2===TRUE && B1===TRUE && B2===TRUE ||
A1===FALSE && B1===TRUE && B2===TRUE

投稿2020/03/13 03:24

編集2020/03/13 04:51
yambejp

総合スコア115010

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

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

yambejp

2020/03/13 04:51 編集

解決済みのようなですが一応js的な書き方 var list=[ {A1:true ,A2:true ,B1:true ,B2:true }, {A1:true ,A2:true ,B1:true ,B2:false}, {A1:true ,A2:true ,B1:false,B2:true }, {A1:true ,A2:true ,B1:false,B2:false}, {A1:true ,A2:false,B1:true ,B2:true }, {A1:true ,A2:false,B1:true ,B2:false}, {A1:true ,A2:false,B1:false,B2:true }, {A1:true ,A2:false,B1:false,B2:false}, {A1:false,A2:true ,B1:true ,B2:true }, {A1:false,A2:true ,B1:true ,B2:false}, {A1:false,A2:true ,B1:false,B2:true }, {A1:false,A2:true ,B1:false,B2:false}, {A1:false,A2:false,B1:true ,B2:true }, {A1:false,A2:false,B1:true ,B2:false}, {A1:false,A2:false,B1:false,B2:true }, {A1:false,A2:false,B1:false,B2:false}, ]; var res=list.filter(x=>x.A1 & x.A2 & !x.B1 | x.A1 & x.A2 & x.B1 & x.B2 | !x.A1 & x.B1 & x.B2); console.log(res);
guest

0

自己解決

自己解決しました。

if ((A1 == true || B1 == true) && (A1 != true || A1 == true && A2 == true) && (B1 != true || B1 == true && B2 == true)) { true } else { false }

投稿2020/03/13 04:14

sakata_inu

総合スコア25

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

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

Zuishin

2020/03/13 05:04

他の回答と比べて特別簡潔になってはいないようですが。
Zuishin

2020/03/13 05:10

ちなみにこうすればもっと簡潔になります。 bool result = !a2 ? false : !b1 ? a1 : b2;
swordone

2020/03/13 05:18

Zuishinさん a1,a2,b1,b2が順にtrue,false,true,trueの場合がfalse判定されてしまいます。
Zuishin

2020/03/13 05:21 編集

それで合っているはずです。a1 == true, a2 == false の時点で false が確定します。
Zuishin

2020/03/13 05:24

なお、評価順による副作用については考慮していません。自己解決回答でも考慮されていないからです。
sakata_inu

2020/03/13 05:29

zuishinさん コメントありがとうございます。頂いた回答についてちゃんと検証はしていませんが、a2を起点とする発想はなかったので目からウロコです。
sakata_inu

2020/03/13 05:34

ちなみに私の回答のどの点が評価順の考慮がなされていないですか?
Zuishin

2020/03/13 05:39

A1 を二回評価した場合、副作用は二回あります。
sakata_inu

2020/03/13 05:44 編集

Zuishinさん Zuishinさんの回答ですと a2 が false の時点で false が確定しているように思えます。 a1 == true, a2 == false はたしかに false ですが、 a1 == false, a2 == false の場合、b1 の評価が必要でこの点が考慮されていないように思えます。
Zuishin

2020/03/13 05:53

ああ、確かにそのようですね。やはりテストしなければいけませんね。
sakata_inu

2020/03/13 05:56

ちなみに具体的にどのような副作用が生じるでしょうか…。 私の知識と理解が不足しているため、副作用にピンときてません…
sakata_inu

2020/03/13 06:06

リンクありがとうございます。内容を拝見させていただきました。常に同じ入力なら同じ結果を返すという点において副作用がないと言える気がするのですが違うのですか?
Zuishin

2020/03/13 06:11

A1 等の評価が副作用を持たない前提なら考慮しなくて結構です。持つなら考慮しなくてはいけません。 例えば A1 がプロパティなら読み出しが二回あることにより値が変化する可能性がありますし、ファイルの読み出しや SQL の問い合わせであるなら値が変化する可能性とともに読み出しにかかる時間によるパフォーマンスの劣化もあります。
sakata_inu

2020/03/13 06:22

なるほど、確かに! 今回は考慮は不要ですが、頭の隅に留めておくようにいたします。 なにより前提が曖昧な質問するなということですね。反省します…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問