ページ 11

論理積と論理和

Posted: 2010年6月19日(土) 20:15
by 釣り師
質問です。


ゲームプログラミングの館 13bの
条件分(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE])
の所と、
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;
の所の意味が分かりません。

自分なりに調べようとしたんですが、

論理和(「||」の事だと思います)・論理積(「&&」)の意味がわかりません。
どなたかこの2つの解説をお願いします。


!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]の所は、
!がついているので「0ではないとき…」という意味になると解釈したのですが、それならわざわざ「!」などつけなくとも、「-1の時…」とすればいいんじゃないんでしょうか?
ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1
は、ChangeWindowMode(TRUE)はif文の中に入れる必要はないと考えたのですが…。

今、僕が知りたいのは、上に書いた3つの項目です。
どなたか、教えていただけないでしょうか?
よろしくお願いします。 画像

Re:論理積と論理和

Posted: 2010年6月19日(土) 20:56
by Dixq (管理人)
論理和と論理積については、情報数学に縁の無い方だと解りにくいかもしれませんね。
"||"は論理和ではないので(論理和は "|" )省略しますのでもし知りたければまた聞いて下さい。

"||"は"または"を意味します。

if( [1] || [2] )

とかけば[1]か[2]どちらかの条件を満たせば真となります。一方
"&&"は"かつ"を意味します。

if( [1] && [2] )

は[1]も[2]も両方条件を満たさなければ真となりません。
では例題です。

例題(1)

int a=1;

if( a==1 || a==2 ){
a=3;
}

の実行結果、aはいくつでしょうか?

答えはaが1ならばaが2でなくてもifの条件式を満たすのでa=3が実行されて3になります。
まぁaが1でも2でもある場合などありえないのですがね。
ということでこれはどうでしょう。

例題(2)

int a=?;

if( a==1 && a==2 ){
a=3;
}
else{
a=0;
}

上の通り、aが1でも2でも無ければならない場合なんてありえないので、aがいくつか解らなくてもa=0が実行されると解ります。
ではちょいとひねってみましょう。

問題(1)

int a=1;

if( a==1 || a==2 && a==3 ){
a=3;
}

問題(2)


int b=1;

if( b==1 && b==2 || b==3 ){
b=3;
}

これはどうなるでしょう?

Re:論理積と論理和

Posted: 2010年6月19日(土) 21:00
by Dixq (管理人)
> !がついているので「0ではないとき…」という意味になると解釈したのですが、それならわざわざ「!」などつけなくとも、「-1の時…」とすればいいんじゃないんでしょうか?

まさしく仰る通りですね。
しかし、毎回必ず書くおきまりの部分はなるべく隠ぺいしたいもので、ifなどの条件式の中に詰め込んで、
他を見やすくしたいという気持ちがありました。
毎回書く部分なら少々解りにくくても問題は無い、それより他を見やすくしようという事です。

で、「a == -1」と書くより「!a」と書く方が短く掛けるんですよね。

違いますね、「a == -1」に対応するのは「a」でしたね。
「!a」に対応するのは「a == 0」です。
whileに入れているのは「0である間ループ」を意味します。



条件式に詰め込むせいで、横に長くなるのを防いでいます。
しかし最初はちゃんと書いた方がいいですね。
どちらの書き方にしようか悩んだのですが現状こうなっています。

> ChangeWindowMode(TRUE)はif文の中に入れる必要はないと考えたのですが…。

そうですね、ifから出してもいいです。
しかし理由は前述の通り、毎回書く部分はなるべくまとめたいという気持ちで書きました。

Re:論理積と論理和

Posted: 2010年6月19日(土) 21:20
by box
> ③
> !ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]の所は、
> !がついているので「0ではないとき…」という意味になると解釈したのですが、それならわざわざ「!」などつけなくとも、「-1の時…」とすればいいんじゃないんでしょうか?

「0でないとき」と「-1のとき」が等価であるとは限りません。

Re:論理積と論理和

Posted: 2010年6月19日(土) 21:25
by Dixq (管理人)
各関数の仕様を確認してみます。

ProcessMessage
ClearDrawScreen
GetHitKeyStateAll

いずれも

-1:エラー
0:正常

です。Keyに入っている値は

1:押している
0:押していない

となっています。
== -1
の方が解りやすく、仕様変更時のバグの元にもならず、適切かもしれませんね。

Re:論理積と論理和

Posted: 2010年6月19日(土) 22:05
by 釣り師
管理人さん。boxさん。
わかり易い解説ありがとうございます!

(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE])
ですが、これは「それぞれの関数すべてが、0のとき…」という解釈でいいんでしょうか?

それで、ChandeWindowMode(TRUE)は、ifに入れなくてもどちらでも良い。
!をつけなくとも、==-1としても良い。
ということですね。

問題の答えですが、
問題(1)
int a=1;

if( a==1 || a==2 && a==3 ){
a=3;
}


A, a==1の方が満たされているので実行されるのではないかと思います。

問題(2)
int b=1;

if( b==1 && b==2 || b==3 ){
b=3;
}

A, bは1なのでb==1は満たされていますが、同時にb==2は満たせないない。b==3でもないので実行されないと思います。

Re:論理積と論理和

Posted: 2010年6月19日(土) 22:06
by ムンバ
こんばんは。

>>○1
>>ゲームプログラミングの館 13bの(略)

私も最初は全く理解できませんでした。
頭がごちゃごちゃになってしまうんですよね。^^;
汚いソースになっていると思うのですが、ちょっと散らばしてみました。
//DX_Dixq_try001.cpp

#include "DxLib.h" //DXライブラリのヘッダファイルの取り込み

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow) //アプリケーションの開始
{
    ChangeWindowMode(TRUE); //画面モード変更関数・TRUE:ウインドモード FALSE:フルスクリーンモード
    
    if( DxLib_Init() == -1 ) return -1; //DXライブラリ初期化処理 エラーが起きたら終了
    
    int gazou001 = LoadGraph("char.png"); //画像を読み込む関数
    //↑↓型宣言 ←ちょっと編集しました。
    int x = 0;
    char keybuf[256];
    
    SetDrawScreen(DX_SCREEN_BACK); //裏画面を描画対称にする
    
    while(1) //無限ループ
    {
        GetHitKeyStateAll(keybuf);
        
        if (keybuf[KEY_INPUT_ESCAPE] == 1)
            break; //↑Escキーが押されたら終了(while文を抜ける)
        
        ClearDrawScreen(); //画面消去
        
        if(x <= 320) x = x + 2; //画像を移動
        
        DrawGraph(x, 224, gazou001, TRUE); //画像を表示する関数
        
        ScreenFlip(); //画面入れ替え
        
        if( ProcessMessage() == -1 ) break ;//エラーが起きたら終了
    }
    
    DxLib_End(); //DXライブラリを終了する関数
    
    return 0; //プログラムを終了
}

//(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE])

//if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;

//if( ProcessMessage() == -1 ) break ;//エラーが起きたら終了

//while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) //Escキーが押されたら終了

//int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

//int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
画像は、「ゲームプログラミングの館」の画像「char.png」を使用して下さい。
邪魔なコメント(//)は削除して下さい。
一つずつ、関数や && || 0 -1 などを移動して組み込んでまとめていけば
○1(①)の様になります。

誤字・脱字等ありましたら修正させて頂きますので、ご指摘下さい。(笑

---編集・追加---
かぶってしまいました。ごめんなさい。
Q∩A中と知らず、長々とすみませんでした。
先程、見た時にはどなたからもレスが無かったもので
ソースを分解するのに時間がかかり過ぎてしまいました。(言い訳)
私のコメント無視して下さい。
確認不足で、すみませんでした。(謝

↓さらに、追記(_ _)
このソースだと DX_CHANGESCREEN_OK が抜けてますね。^^;
詳細は、DXライブラリ本家のリファレンス
http://homepage2.nifty.com/natupaji/DxL ... html#R11N1
を、ご参照下さい。
がんばって下さい!^^ 画像

Re:論理積と論理和

Posted: 2010年6月19日(土) 22:23
by 釣り師
ムンバさん。

いえいえ、わざわざありがとうございます。
せっかくですから、分解してくださったこのソース、参考にさせていただきたいと思います。

Re:論理積と論理和

Posted: 2010年6月19日(土) 22:27
by Dixq (管理人)
いや~最後までドキドキの試合だったのに負けちゃいましたね~(T_T
最後PKだったら同点だったかもしれないのに・・。

=================================

> これは「それぞれの関数すべてが、0のとき…」という解釈でいいんでしょうか?

そういう事ですね。
「0は偽」「0以外は真」ですから、「!0は真」という事になります。よって

while( !0 && !0 ){
}

はループしますよね。

> 問題の答え

OKですね。
こういう優先順位を考えなければならないもの大丈夫でしょうか?

問題(3)
int a=1, b=2, c=3;
if( a==2 && b==2 || c==3 && a==1 ){
a=3;
}

問題(4)
int a=1, b=2, c=3;
if( a==2 && (b==2 || c==3) && a==1 ){
a=3;
}

これが解ればもうこの件は大丈夫ですね。

Re:論理積と論理和

Posted: 2010年6月19日(土) 22:38
by 釣り師
ですよねぇ…。でも、よく頑張ったと思います。
実況でPKを一瞬期待したんですが…。
=========================================================================

問題(3)
int a=1, b=2, c=3;
if( a==2 && b==2 || c==3 && a==1 ){
a=3;
}

は、a==2 && b==2は満たされていませんが c==3 && a==1が満たされているので実行されると考えます。

問題(4)
int a=1, b=2, c=3;
if( a==2 && (b==2 || c==3) && a==1 ){
a=3;
}

はちょっと難しかったですが。
(b==2 || c==3) && a==1が満たされているので動くと考えました。
(b==2 || c==3)は1つの物として考えていいんですよね?
だから
a==2 && (b==2 || c==3)か、(b==2 || c==3) && a==1の条件として考えていいんですよね?

Re:論理積と論理和

Posted: 2010年6月19日(土) 22:58
by Dixq (管理人)
う~おしい!

>(b==2 || c==3)は1つの物として考えていいんですよね?

そうです、だから

if( ① && (②||③) && ④ )



if( ① && ⑤ && ④ )

  ※ ⑤ = (②||③)

だと置き換えれば①も⑤も④も満たさないといけない事が解りますよね?
・・ということは?


#自分で使っといてなんですが、①②③のような文字は機種依存文字なので、例えばMacを愛用されているたかぎさんとかがお困りになるのであまり使わない方がいいです^^;

Re:論理積と論理和

Posted: 2010年6月19日(土) 23:08
by 釣り師
>だと置き換えれば①も⑤も④も満たさないといけない事が解りますよね?
>・・ということは?

A, 実行されない!

( a==2 && b==2 || c==3 && a==1 )
では「||」で左右別々に考えるけど
( a==2 && (b==2 || c==3) && a==1 )
だと、全部ひとつの条件として考えるわけですね。
では、&&の方が優先順位は高いと、言う事ですね。

あと、
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;
の条件文ですが、
!=で「正しくない」だったように思うので
ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK←スクリーンモードの変更ができなかったとき。
DxLib_Init() == -1初期化エラーの時
のどちらかが起これば終了。
ということですよね?

その中のreturn -1;
ってどういう事でしょうか?
ゲームプログラミングの館の2、でも解説がされていなかったので。

Re:論理積と論理和

Posted: 2010年6月19日(土) 23:10
by たかぎ
> 例えばMacを愛用されているたかぎさんとかがお困りになるのであまり使わない方がいいです^^;

全然問題なく表示できています。

ところで...

論理演算子は難しいですね。
結構ベテランでもちゃんと理解できていなかったりします。
例えば || 演算子であれば、lhs || rhs とした場合、lhs が偽であれば rhs を評価しません。
rhs が副作用を伴う式の場合は要注意です。

Re:論理積と論理和

Posted: 2010年6月19日(土) 23:13
by Dixq (管理人)
>たかぎさん

あれ・・Macでは文字化けすると聞いていたんですが、違っていましたか^^;
機種依存文字っていつ不具合があるんですかね。

> lhs || rhs とした場合、lhs が偽であれば rhs を評価しません。

lhsが真であればではなく・・ですか?

Re:論理積と論理和

Posted: 2010年6月19日(土) 23:15
by たかぎ
> lhsが真であればではなく・・ですか?

すみません。逆です。
うっかりしていました。

Re:論理積と論理和

Posted: 2010年6月19日(土) 23:17
by 釣り師
機種依存文字なんてどこでも表示出来るだろ!?
と、たかをくくっていたのですが、Macユーザー、Linuxユーザーさんの事を全く考えていませんでした。
今度からは気を付けたいと思います。

たかぎさん。
>例えば || 演算子であれば、 lhs || rhs とした場合、lhs が真であれば rhs を評価しません。
>rhs が副作用を伴う式の場合は要注意です。

なんだかとても難しい言い回しですね。
lhs || rhs とした場合、lhs が偽であれば rhs を評価しません。
ココはどういう事でしょうか?偽であれば評価しない…。僕の頭ではよくわかりませんでした。
副作用とはどういう事ですか?
ご教授お願いします。

直前に更新されたコメントを読んでいませんでした。
そのため、偽を真に書き換えました。
それでも2つともいまいちよくわかりませんでした。
ご教授お願いします 画像

Re:論理積と論理和

Posted: 2010年6月19日(土) 23:19
by Dixq (管理人)
はい、
&&の方が優先順位は高いと、言う事ですね。
しかしそれ以上に括弧の優先順位が高いのです。
フィーリング的に

&&は「掛け算」
||は「足し算」

みたいに覚えておけば、論理和、論理積を覚える時すんなりいくかもしれません。

1 + 2 * 3

これって2*3を先にしますよね。でも

(1 + 2) * 3

こうしてあれば1+2を先にしますよね。これと一緒です。
演算子の優先順位については

http://c-production.com/special/04092101.html

こういう所を見ると良いですよ。
しかし解りにくい時は明確に括弧を付けるようにした方が無難です。
例えば


1 + (2 * 3)

この括弧は書く必要ありませんが、
複雑な式が入り組んだ時は省略すると間違いの要因になったりします。

Re:論理積と論理和

Posted: 2010年6月19日(土) 23:24
by 釣り師
管理人さん。

なるほど、算数に置き換えて考えるんですね。
よく分かりました。
ありがとうございます!

Re:論理積と論理和

Posted: 2010年6月19日(土) 23:27
by Dixq (管理人)
> DecentLoveさん

例えば以下のようなプログラムを書いてみました。
実行してみて下さい。
何と表示されるでしょう?
#include <stdio.h> 
int main(){
    int a;

    if( 1 || (a=1) ){
        printf("aの値は=%d\n",a);
    }

    return 0; 
}

実行結果
"エラー"もしくはでたらめな数字
条件式にこんな事を書くべきではないですが、
例えば評価されるかどうか解らない所で初期化などを行い、
後の処理に続くような場合は後の処理に影響を及ぼします。

今回はaに何の値も入れていないのにaを表示させようとしたのでエラーになりました。
これは

if( ① || ② )

において、①は必ず実行される真の値だから②が評価されなかったため起こったのです。

Re:論理積と論理和

Posted: 2010年6月19日(土) 23:27
by たかぎ
> Macユーザー、Linuxユーザーさんの事を全く考えていませんでした。

MacでもLinuxでもちゃんと表示できています。
ただ、常に表示されるとは限らないので、避けた方が無難なのは間違いありません。
丸付き数字より、むしろ円記号と逆斜線のほうが問題ですね。
ソースコードの場合は大した問題ではありませんが、ネットショップの値段表示がすべて逆斜線になっていたりするので...

> lhs || rhs とした場合、lhs が偽であれば rhs を評価しません。

まず、すでに指摘があるように、

lhs || rhs とした場合、lhs が[color=red>真[/color]であれば rhs を評価しません。

の間違いです。
これはどういうことかというと、lhs が真、つまりゼロ以外に評価された場合、rhs が何であっても lhs || rhs は真になります。
だから、rhs は評価されません。
具体的には、

a || b++

のような式があった場合、a がゼロ以外であれば b++ は評価されませんので、b はインクリメントされないことになります。
b++ が必ず評価されることを期待しているととんでもないことになります。

Re:論理積と論理和

Posted: 2010年6月19日(土) 23:32
by 釣り師
たかぎさん。
>lhs が真、つまりゼロ以外に評価された場合、rhs が何であっても lhs || rhs は真になります。
>だから、rhs は評価されません。

ということは、lhsが真と評価された場合は、rhsは無視されるわけですね?

先程のコメントにありました、副作用、というのは何のことでしょう?
少し気になっているので。教えてください。お願いします。

Re:論理積と論理和

Posted: 2010年6月19日(土) 23:33
by たかぎ
> なんだかとても難しい言い回しですね。

普通の言い回しですよ。
最初に言語を勉強するときに、ちゃんとした入門書を使わないと後々こういったところで苦労します。

「わかりやすい」といわれる入門書や入門サイトの中には、必要な解説を省くことでわかった気にさせるものが少なくありません。
用語やその概念は正確に解説しておかないと、その時点ですでに間違った認識をしてしまいますし、その後も話が通じなくなってしまいます。

Re:論理積と論理和

Posted: 2010年6月19日(土) 23:38
by 組木紙織
>副作用
関数が、戻り値を返すこと以外の動作をすることです。

Re:論理積と論理和

Posted: 2010年6月19日(土) 23:40
by たいちう
> ココはどういう事でしょうか?偽であれば評価しない…。僕の頭ではよくわかりませんでした。
> 副作用とはどういう事ですか?
> ご教授お願いします。

たかぎさんの説明で理解できたと思いますが、
念のため演習問題をやりましょう。

「lhs && rhs とした場合、どのような場合にrhsが評価されないか?」

Re:論理積と論理和

Posted: 2010年6月19日(土) 23:41
by たかぎ
> 副作用、というのは何のことでしょう?

式のオペランドを使って評価結果を計算する以外の振る舞いのことだと思ってください。
例えば、

1 + 2

であれば、評価結果の 3 というのは、オペランドである 1 と 2 を計算して求められますね。
そして、それ以外の振る舞いというのはとくにありません。
ところが、

1 + a++

だとどうでしょうか?
1 と a を足した値を評価結果とする以外に、a の値を更新しますね。
この a の値を更新するというのは、オペランドを使って評価結果を計算する以外の振る舞いです。
こういうのを副作用といいます。
ほかには、printf で出力するものなども副作用にあたります。

Re:論理積と論理和

Posted: 2010年6月20日(日) 00:28
by ムンバ
<<DecentLoveさん

>>その中のreturn -1;
 DXライブラリ本家のリファレンス
 http://homepage2.nifty.com/natupaji/DxL ... .html#R1N1
 を参照してみて下さい。

自分のやり方ですが
良く解らなくなったら、コメントと関数を逆転させて
関数や演算子・その他を、日本語にしてます。

例えば
 int gazou001 = LoadGraph("char.png"); //画像を読み込む関数、でしたら
画像をメモリーに読み込むには、LoadGraph関数で 画像ファイル(char.png)を読み込み
int型に宣言した 変数gazou001 に代入する。
(↑勘違いがあるかもしれませんが、こんな感じという事で。^^;)

とか

 if( 1 && 2 ) //もし 1 かつ 2 だったら(1 と 2 の両方の条件を満たしたら)
もし、1 と 2 の両方とも、条件が満たされていたら・・・

 if( 1 || 2 ) //もし 1 または 2 だったら(1 か 2 のどちらか一つの条件を満たしていたら)
もし、1 か 2 のどちらか一つの条件を満たしていたら・・・

ちなみに
 if( 1 || 2 )
の場合、1 の条件が満たされたら(1 だったら) || の後ろの 2 は無視されます。

という事だと、思います。

PS:何か突っ込まれそうなので逃げたい気持ちで一杯です。(自爆

Re:論理積と論理和

Posted: 2010年6月20日(日) 00:44
by Dixq (管理人)
>ムンバさん

> 関数や演算子・その他を、日本語にしてます。

一応VisualC++だとこうすれば、例えば上のプログラムは全部日本語に出来たりします。
これでコンパイル通るのは何とも違和感がありますが^^;
#include <stdio.h> 

#define 代入 =
#define 整数型 int
#define もし if
#define または ||
#define 変数の中身 "%d"
#define 値を返す return
#define 正常 0
#define 真 (!0)
#define 偽 (0)
#define 1 1

#define 表示する printf

int main(){

    整数型 変数;

    もし( 偽 または ( 変数 代入 1 ) ){
        表示する("変数のの値は="変数の中身, 変数);
    }

    値を返す 正常; 
}
 
使う機会は無いと思いますがもし日本語に置き換えたい時があれば・・。

Re:論理積と論理和

Posted: 2010年6月20日(日) 01:00
by ムンバ
あらら~?(汗

ご掲示頂いたソース、うちの環境で試してみました。
try.c
でも
try.cpp
でも

何のエラーも無く、通過してしまいました。

日本語が無視されてるのか、日本語パッチ?が含まれてるせいなのでしょうか?

ご指導ありがとうございます。
時間がある時にでも、遊んでみたいと思います。
面白そうですね。w

Re:論理積と論理和

Posted: 2010年6月20日(日) 01:08
by シエル
#defineで日本語に置き換えられるんですね!面白そう!

Re:論理積と論理和

Posted: 2010年6月20日(日) 01:32
by ムンバ
<<#defineで日本語に置き換えられるんですね!面白そう!

 そういう事なのですね。ご解説どうもありがとうございます。
 やっぱり面白そうですね~♪

あっ?すみません。^^;

<<DecentLoveさん

>>その中のreturn -1;
 その後、如何ですか?

勝手ながら寝てしまいます。
自分も、がんばります!(笑
おやすみなさい。

Re:論理積と論理和

Posted: 2010年6月20日(日) 02:03
by pie
>環境依存文字
私もつい最近Macを使い始めた者ですが
普通に丸付き数字が見えたので少し驚きました。
(月)とか(火)とか表示されるものだと聞いた記憶がありますが・・・

ついでに、一言だけ。
>DecentLoveさん
> なるほど、算数に置き換えて考えるんですね。

置き換えるというよりも算数そのものです。
”&&”も”||”も、”*”や”+”と同じように値を返す単なる演算子の1つです。

Re:論理積と論理和

Posted: 2010年6月20日(日) 02:28
by Dixq (管理人)
> pieさん
> 環境依存文字

気になってLinux立ち上げてみました。
現在Linux(Ubuntu)から書き込みしています。

if( ① && ⑤ && ④ )

とか普通に見えてますし、使えますね。
ただ「いち」とかで変換しても出てこないのです・・。

ということでかなり特殊な文字が使われていそうなmixiの顔文字コミュからちょっと顔文字をコピペ・・。

(*^&#3636;益^&#3636;*)(*&#9697;&#3642;&#1835;&#9685;&#3642;)&#3642;&#9825;&#9829;
&#9825;(。&#65515;&#711;艸&#65513;)
ヾ(&#9829;&#243;&#12904;&#242;)ノ&#9825;
&#9825;(。&#65515;&#711;艸&#65513;)
&#9825;&#65515;&#1835;&#65513;&#9825;

こちらではどれも化けていますが、化けたままで投稿してもwindowsから見たら正常に見えるんですかね。
しかしハートはちゃんと見えています。掲示板でハートとか書く人あまりいないでしょうけど^^;

※トピの内容と外れてすみません;

Re:論理積と論理和

Posted: 2010年6月20日(日) 02:33
by Dixq (管理人)
windowsに帰ってきました。
ちゃんと見えていますね。
とりあえず①や②は使っても大丈夫そうですね。
それ以外で表示できない物はありそうですが、通常の使用範囲では障害にならないみたいですね。

ところで、記事を編集しようとしたら上記の顔文字の部分は添付画像のようになっていました。

Re:論理積と論理和

Posted: 2010年6月20日(日) 10:49
by 釣り師
みなさん、返事が遅れてしまいもうしわけありません。
同じ方に複数回コメントいただいたようですが、時系列に沿ってコメント順に返事させていただきたいと思います。

たかぎさん
 >普通の言い回しですよ。
 >最初に言語を勉強するときに、ちゃんとした入門書を使わないと後々こういったところで苦労します。
なるほど、わかりやすいサイトに頼りすぎるのも良くないんですね。今度入門書を購入してみたいと思います。


たいちうさん
 >「lhs && rhs とした場合、どのような場合にrhsが評価されないか?」
たぶんlhsが真でなかった場合に条件から外れてしまうので、
答えは、 lhsが真でない場合にrhsは評価されない。です。


たかぎさん
 >1 と a を足した値を評価結果とする以外に、a の値を更新しますね。
 >この a の値を更新するというのは、オペランドを使って評価結果を計算する以外の振る舞いです。
 >こういうのを副作用といいます。
つまり、計算やその他の関数などの影響でaの値が書き換えられてしまう、ということですよね?


ムンバさん
 >自分のやり方ですが
 >良く解らなくなったら、コメントと関数を逆転させて
 >関数や演算子・その他を、日本語にしてます。
なるほど!いいやり方かもしれません。
それでは、return -1 は終了させるための物。ということでしょうか。

 >ちなみに
 > if( 1 || 2 )
 >の場合、1 の条件が満たされたら(1 だったら) || の後ろの 2 は無視されます。
では、優先して評価してもらいたい方を1の場所におくべき、ということですか。


管理人さん
 >一応VisualC++だとこうすれば、例えば上のプログラムは全部日本語に出来たりします。
 >これでコンパイル通るのは何とも違和感がありますが^^;
驚きました!VisualC+++にはそんな仕様があったんですね!
豆知識として覚えておきたいと思います。


ムンバさん
 >その中のreturn -1;
 >その後、如何ですか?
 >勝手ながら寝てしまいます。
 >自分も、がんばります!(笑
 >おやすみなさい。
前述のとおりだいたい理解できました!有難うございました。
質問した身の僕がいちはやく寝てしまいました。すみませんでした。


pieさん
 >普通に丸付き数字が見えたので少し驚きました。
 >(月)とか(火)とか表示されるものだと聞いた記憶がありますが・・・
次からは一応(1)などというふうに表記したいと思います。
 
 >置き換えるというよりも算数そのものです。
 >”&&”も”||”も、”*”や”+”と同じように値を返す単なる演算子の1つです。
そうですね、そのように考えた方が、理解もしやすいと思いますし。


管理人さん
 >(*^&#3636;益^&#3636;*)(*&#9697;&#3642;&#1835;&#9685;&#3642;)&#3642;&#9825;&#9829;
 >&#9825;(。&#65515;&#711;艸&#65513;)
 >ヾ(&#9829;&#243;&#12904;&#242;)ノ&#9825;
 >&#9825;(。&#65515;&#711;艸&#65513;)
 >&#9825;&#65515;&#1835;&#65513;&#9825;
mixiはやったことありませんがなかなかすごいですね。
最近掲示板を騒がせているトピのなかに度々出てきた2chとはまた違った感じの顔文字ですね。
コッチのほうが可愛らしいというか、暖かいですね。
ちなみに、今返信のため、引用で顔文字持ってきましたが、画像の様にはなってないですよ。

もう修正しましたが、先程みなさんの名前を赤で書くという大変な無礼をしてしまいました。
本当にもうしわけありませんでした。 画像

Re:論理積と論理和

Posted: 2010年6月20日(日) 11:06
by Dixq (管理人)
> DecentLoveさん

おはようございます。

丁寧なお返事ありがとうございます^^
ところで、私のこちらの投稿はご覧になりました?
http://www.play21.jp/board/formz.cgi?ac ... 4867#54810
副作用について聞いていらっしゃったので、もし気になればこちら参考にして頂ければと思います。

> 絵文字
> ちなみに、今返信のため、引用で顔文字持ってきましたが、画像の様にはなってないですよ

記事を「編集」する時に上記のようになるようです。
恐らく投稿した後にcgiが不具合を起こさないように特定のデータを変換しているのではないかと思います。
文字コードについてはYuOさんが新しくトピを立てて教えて下さっているようです。

# すみませんが、出かける用事があるので、YuOさんのトピは帰宅してから拝見します^^;

Re:論理積と論理和

Posted: 2010年6月20日(日) 11:18
by たかぎ
> DecentLoveさん

おそらく知らないと思うので、将来的なこともあるのでアドバイスしておきます。
朱筆訂正のような状況を除いて、人の名前を赤字で書くべきではありません。

なぜかというと、赤字で名前を書くのは故人であったり、死を願って呪うときだからです。
例えば、果たし状は宛名を赤字で書きます。
つまり、相手に喧嘩を売るときの作法であり、社会に出てこういうことをやっていると恥をかきます。

Re:論理積と論理和

Posted: 2010年6月20日(日) 11:31
by 釣り師
たかぎさん。
すみませんでした。
高校生にもなりながらそんな重要なことも全く知らず、みなさんには無礼なことをしてしまいました。
みなさんの名前を目立たせてわかりやすくしようと思ったのですが…次からは太字にするなりします。
赤字は修正しておきました。


みなさんへ。
僕のマナー不足でご迷惑をお掛けしました。
本当にすみませんでした。


このトピックですが、これにて解決とさせていただきます。
さっき僕が書いた返答の中にあったいくつかの疑問に対する答えが戻ってき次第このトピは終了とさせていただきます。

Re:論理積と論理和

Posted: 2010年6月20日(日) 11:36
by 釣り師
管理人さん。

 >丁寧なお返事ありがとうございます^^
 >ところで、私のこちらの投稿はご覧になりました?
 >http://www.play21.jp/board/formz.cgi?ac ... 4867#54810
 >副作用について聞いていらっしゃったので、もし気になればこちら参考にして頂ければと思います。
すみません。全く気づいてませんでした。
では、変数の値を操作するときには、条件文の中に入れない、もしくは条件の先頭に持ってくるべき。
という事ですね?
ありがとうございました。

行ってらっしゃい。

Re:論理積と論理和

Posted: 2010年6月20日(日) 13:06
by Dixq (管理人)
そうですね。
コーディング規約によっては条件式の中で代入はしてはならないとかあるので、なるべく単純な比較に留めるのが良いでしょう。

そういう意味では私が書いたwhileに全部突っ込むのはどうなのって感じですが、あれは副作用が無いので(順番はある)そのままにしてます^_^;

>赤字

確かにお墓に赤字で彫ったりしますよね。
それにこの不景気の中赤字って文字は見たくn(ry

>みなさんには無礼なことをしてしまいました。

悪意が無い分には誰も不快な思いはしないと思うので大丈夫ですよ^_^;