アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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

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

if( (hoge[0]=1) or (hoge[1]=1)・・・・){
//配列全てに0を代入

A 回答 (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;


// 簡略化のため無駄なループを回してます(^^;

この回答への補足

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

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

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

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

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

質問だらけとなってしまいますが、よろしくお願い致します。

補足日時:2002/01/30 10:06
    • good
    • 0

>3個だけに限定されている場合は、自分の手で3つ分の値を「1」と


>比べて・・と言うように記述するのでしょうか?
>なんか、スマートに書ける方法をご存知の方がいれば教えて欲しいのですが。。

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


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

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

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

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

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

ソースを綺麗に見せたい場合は、関数化して、外にだしておけばよいのですね。
結構、わかってきました。
色々とアドバイスして頂き、助かりました。
ありがとうございました。

お礼日時:2002/01/31 09:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!