Q&Aコーナー

このコーナーには,代表的な質問に関する答えを掲げています。
今後充実する予定なので,どんどん質問をよせて下さい。
なお,質問は,Win-Yatから宛先として次のアドレスを指定してください。

kusiyama@arc.hokkai-s-u.ac.jp

 


Q1 何かの合計を求める次のような典型的なプログラムで,求めるべき合計の変数名をSとおいた場合,
  何故ループの外でS=0と置くのですか?

  S=0
  FOR i=1 TO 100
        :
     S=S+順番に加えるべき値を式,変数名あるいは数値で表示
  NEXT i

A1 算術代入文(=の付いた式のこと)の右辺にある変数名には,その代入文が実行される前までに必ず何らかの
   数値が代入されている必要があります。もし,仮に S=0 のステートメントがなければ,そのプログラムを理解
   しようとした場合,Sの値として何が代入されているのかプログラムをさかのぼって捜す必要があります。

    非常に長いプログラムの時に,これを行うのは大変な苦痛を伴います。結果として上の例で S=0 が無くても
   他の値がSに代入されていない限り,Quick Basicでは得られる合計は正しいのですが,S=0を明示することにより
   安心して何かの合計を求める構文であることが理解できます。この方が親切なプログラムといえます。


Q2 FOR〜NEXT文のループ回数を制御する初期値,最終値,STEPの増分値は,何故整数とした方がよいの
    ですか?ループ変数は,何故i〜nの英文字で始まる変数名を使用するのですか?

A2 理由は3点あります。
   ・ループ回数は必ず整数だから,ループを制御する変数は常に整数型とした方がよいこと。
   ・ループを制御する変数が実数値をとるようなプログラムを作成すると,計算機内部での実数の処理の都合から
    予期せぬミスを犯し易いこと(下記プログラム例参照のこと)
   ・最初に開発された科学技術計算用言語はFORTRANですが,FORTRANでは変数名の先頭がi〜nの英文字
    で始まる変数は暗黙の了解で整数型,その他の英文字で始まる変数は実数型であるという規則があります。
    多くのプログラマーはその習慣を身に付けており,それにならったプログラムの方が第3者にとって見易いこと。

                             予期せぬミスを誘発するプログラム例
                      

s=0
FOR i=0 TO 3 STEP 0.01

   s=s+(数値,変数名または計算式)
   IF i=1 OR i=2 OR i=3 THEN PRINT ”s=”;s
NEXT i
END

                      この例ではIF文の条件式中のiの値が1,2または3の値をとり得ると
                      考えがちですが,ループ変数iが実数値となっているので,条件式は
                      成立せず,従ってPRINT文は全く実行されません。
  
Q3 プログラムを作成する際,DEFINT文やDIM文などの宣言文と実行文の記述順序はどのように
   考えるべきなのですか?

A3 DEFINT文は型宣言文,DIM文は配列宣言文のひとつで,夫々次の機能をもっています。

     DEFINT 英文字 [,英文字,英文字,・・・] 
         DEFINT文により,その後ろに示された英文字で始まる変数名は,整数型の変数名として
         定義されます。実数型の変数名と区別することによりその値を記憶するためのメモリーおよび
         演算時間を節約出来ます。
     DIM 配列変数 [,配列変数,配列変数,・・・]
         その意味は,DIMの後ろに示された配列変数のための記憶場所をあらかじめ確保することです。

   以上の意味から,型宣言文は配列宣言文の常に前に置かれます。これらの文が複数あるときも同じ扱い
   となります。そして,その後に実行文(例えば,CLS,算術代入文,データの入力文,データ文など)が
   続きます。なお,’で始まる文は注釈文またはコメント文と呼ばれ,プログラムを分かり易いようにするため
   の文で,上の順序にこだわらず必要な所に置くことが出来ます。次の例を参考にして下さい。

        (例)
             ’Sample Program
             DEFINT I−N
             DEFDBL A,E
             DIM x(100),y(10,10),z(100)
             DIM aa(100),ee(50)
             ’
             CLS
             FOR i=1 TO 10
                READ aa(i)
             NEXT i
             DATA 12.3,23.2,55.0,53.1,21.9
             DATA 4.2,34.5,67.2,3.2,67.8
                         :
                         :

目次へ戻る