- ベストアンサー
Delphiでの条件分岐について
- Delphiで配列の条件分岐を作る方法について質問です。
- 配列の要素の中に「1」という値が含まれていれば、配列全体を「0」にするような条件分岐を作りたいです。
- 一つずつ要素をチェックする方法では、配列が増えた場合に面倒なので、効率的な方法があれば教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
delphiに限った話では無く、この種のプログラミング言語で共通の内容ですね。C,FORTRAN,JAVA.... まず、基本はループを使うことです。 そうしておけば、ループの終了条件を変えるだけで, 配列がいくつあろうと同じ処理が可能です。 で、そのための手段として、別に変数を一つ用意します. mustClearFlagとでもしておきます。 integerでもいいんですが、本来は論理型(bool,boolean?)を使います。 で、ループに入る前にmustClearFlagをfalseで初期化しておきます。 ループ中で配列の内容をチェックし、1の時にmustClearFlagにtrueを設定します。 ループを抜けたときに、mustClearFlagがtrueなら 1があったことになりますので、配列を0クリアします。 Delphiは忘れたのでCで書きますが、こんな感じですね. noOfArray = 5; mustClearFlag = 0; for ( i=0 ; i<noOfArray ; i++ ) if ( hoge[i] == 1 ) mustClearFlag = 1; if ( mustClearFlag ) for ( i=0 ; i<noOfArray ; i++ ) hoge[i]=0; // 簡略化のため無駄なループを回してます(^^;
その他の回答 (1)
- terra5
- ベストアンサー率34% (574/1662)
>3個だけに限定されている場合は、自分の手で3つ分の値を「1」と >比べて・・と言うように記述するのでしょうか? >なんか、スマートに書ける方法をご存知の方がいれば教えて欲しいのですが。。 場合によりますね。 2回でもループにすることもあります。 ループにする場合は、回数が変化する可能性がある場合、ループにした方が見やすいと思われる場合, タイプ数が少なくなる場合(笑)なんかですね。 見た目を簡潔にするには、関数などで書き換えるぐらいでしょう。 >if( hoge[0..3] = 1){ 私が知る範囲では、こういう記述ができる言語はないです。 でも、もしあったとすると、直感的には全て1の場合という意味にとりますね(^^;
お礼
またまたの回答、ありがとうございます。 配列の要素数が変化する場合などは、ループにしておくと 要素数が変化しても対応できるので、そちらを使うのがよいのですね! 状況によって、使い分けるようにします。 >見た目を簡潔にするには、関数などで書き換えるぐらいでしょう。 ソースを綺麗に見せたい場合は、関数化して、外にだしておけばよいのですね。 結構、わかってきました。 色々とアドバイスして頂き、助かりました。 ありがとうございました。
補足
ご回答ありがとうございます。 forループを使えば、数がいくつ増えても大丈夫ですよね^^ noOfArrayの所も配列の要素数を取得するようにすれば、 どのようにも対応できそうです。 さらに質問となってしまいますが、多数の場合には、terra5さんの お答えにて対応したいと思いましたが、配列の要素数が例えば、 3個だけに限定されている場合は、自分の手で3つ分の値を「1」と 比べて・・と言うように記述するのでしょうか? なんか、スマートに書ける方法をご存知の方がいれば教えて欲しいのですが。。 if( hoge[0..3] = 1){ //ここで処理 } みたいに簡潔に書く事はできないでしょうか? みなさんは、どのようにされているのでしょうか? 3つくらいでもループを回すと言う書き方をしているのでしょうか? それとも、3つ限定なら、ごりごり3個と比較する書き方をしているのでしょうか? 質問だらけとなってしまいますが、よろしくお願い致します。