OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

Delphiでの条件分岐について

  • すぐに回答を!
  • 質問No.207931
  • 閲覧数166
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 72% (161/221)

すいません。ちょっとわからないので、質問させて頂きます。

Delphiで下記のようにIntegerの配列を宣言したとします。
var hoge : array [1..5] of integer;
この配列の全ての要素のうち、ひとつでも「1」(いち)と言う値であれば、
配列の全てを「0」(ぜろ)にすると言う条件分岐(if)を作りたいのです。

どのようにして作ればいいでしょうか?
一つずつ下記(途中までですが)のように書けば出来そうですが、配列の数が
増えた場合に大変面倒な事になりそうなので、何か良い知恵があれば
よろしくお願い致します。

if( (hoge[0]=1) or (hoge[1]=1)・・・・){
//配列全てに0を代入
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル13

ベストアンサー率 34% (574/1662)

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;


// 簡略化のため無駄なループを回してます(^^;
補足コメント
mkim

お礼率 72% (161/221)

ご回答ありがとうございます。

forループを使えば、数がいくつ増えても大丈夫ですよね^^
noOfArrayの所も配列の要素数を取得するようにすれば、
どのようにも対応できそうです。

さらに質問となってしまいますが、多数の場合には、terra5さんの
お答えにて対応したいと思いましたが、配列の要素数が例えば、
3個だけに限定されている場合は、自分の手で3つ分の値を「1」と
比べて・・と言うように記述するのでしょうか?
なんか、スマートに書ける方法をご存知の方がいれば教えて欲しいのですが。。

if( hoge[0..3] = 1){
//ここで処理
}

みたいに簡潔に書く事はできないでしょうか?
みなさんは、どのようにされているのでしょうか?
3つくらいでもループを回すと言う書き方をしているのでしょうか?
それとも、3つ限定なら、ごりごり3個と比較する書き方をしているのでしょうか?

質問だらけとなってしまいますが、よろしくお願い致します。
投稿日時 - 2002-01-30 10:06:58
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.2
レベル13

ベストアンサー率 34% (574/1662)

>3個だけに限定されている場合は、自分の手で3つ分の値を「1」と >比べて・・と言うように記述するのでしょうか? >なんか、スマートに書ける方法をご存知の方がいれば教えて欲しいのですが。。 場合によりますね。 2回でもループにすることもあります。 ループにする場合は、回数が変化する可能性がある場合、ループにした方が見やすいと思われる場合, タイプ数が少なくなる場合(笑)なんかですね。 ...続きを読む
>3個だけに限定されている場合は、自分の手で3つ分の値を「1」と
>比べて・・と言うように記述するのでしょうか?
>なんか、スマートに書ける方法をご存知の方がいれば教えて欲しいのですが。。

場合によりますね。
2回でもループにすることもあります。
ループにする場合は、回数が変化する可能性がある場合、ループにした方が見やすいと思われる場合,
タイプ数が少なくなる場合(笑)なんかですね。


見た目を簡潔にするには、関数などで書き換えるぐらいでしょう。

>if( hoge[0..3] = 1){
私が知る範囲では、こういう記述ができる言語はないです。
でも、もしあったとすると、直感的には全て1の場合という意味にとりますね(^^;
お礼コメント
mkim

お礼率 72% (161/221)

またまたの回答、ありがとうございます。

配列の要素数が変化する場合などは、ループにしておくと
要素数が変化しても対応できるので、そちらを使うのがよいのですね!
状況によって、使い分けるようにします。

>見た目を簡潔にするには、関数などで書き換えるぐらいでしょう。

ソースを綺麗に見せたい場合は、関数化して、外にだしておけばよいのですね。
結構、わかってきました。
色々とアドバイスして頂き、助かりました。
ありがとうございました。
投稿日時 - 2002-01-31 09:51:46
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ