2016-04-19 11 views
1

プログラムの次の部分に移動する前に、2つのスイッチを両方ともアクティブにする必要があります。 通常、どちらのスイッチもオンまたはオフにできます。両方のスイッチが関わるまでプロセスを実行したい。 私はこの文を書く必要がある論理を概念化できないようです。単純な愚かなC/C++ロジックステートメントにぶつかって

私は、次のような、私がやりたいために、2つのステートメントを使用することができます。

Start_Process(); 

while(!sw1){  
    READ_SWITCHES(); 
    delay(); 
} 

while(!sw2){  
    READ_SWITCHES(); 
    delay(); 
} 

End_Process(); 

しかし、私はそれを行うには良い方法があると確信しています。 私の最高の推測では、これまでのところ、このされています:

while(!(sw1 || sw2)){  
    READ_SWITCHES(); 
    delay(); 
} 

しかし、私はそれが正しいと確信していないです。

また、何らかの理由でこれも正しく表示されません。

while(!sw1 && !sw2){ 
    READ_SWITCHES(); 
    delay(); 
} 

私はこれよりはるかに複雑なロジックステートメントを実行しましたが、何らかの理由でこの単純なステートメントで私の方法を見ていません。 ありがとうございました。

+0

私はそれがあった大学での正確などのクラスを覚えしようとしている、私はものを学びました –

+1

_ "しかし、私は正しいとは確信していません。" _うまくいけば、走りとテストはそれを承認するでしょう。 –

+0

@SamVarshavchik:カレッジ?私は学校でそれを学んだと確信しています。 – Olaf

答えて

3

あなたはORステートメントをしたい:

while(!sw1 || !sw2){ 

    READ_SWITCHES(); 
    delay(); 
} 

だから、これはまで実行BOTH非ゼロになります(つまり、両方のフラグが設定されている)

4

あなたが一方または両方までtrueにevalualtes式を必要とします変数sw1およびsw2falseです。 この

while(!sw1 || !sw2) { 

    READ_SWITCHES(); 
    delay(); 
} 

OR

while(!(sw1 && sw2)) { 

    READ_SWITCHES(); 
    delay(); 
} 

を試し式を覚えておいてください!(sw1 && sw2)!sw1 || !sw2デ・モルガンの法則によると等価です。

+0

これはDemorgan's Lawsのロジックに相当する文です:https://en.wikipedia.org/wiki/De_Morgan%27s_laws –

2

これらのシナリオでは、常に真理値表を参考にしています。その後、

Input  Ouptut 
SW1 SW2 READ_SWITCHES? 
F F  T 
F T  T 
T F  T 
T T  F 

ので、この場合はその逆のAND論理、パターンを発見しよう:

!(SW1 && SW2) 
関連する問題