複雑な条件判断

2重のIF

郵便料金

定形の郵便料金は25gまで80円、50gまで90円で、それ以上は定形外料金となります。重さを入力してもらい料金を表示するプログラムを作るとします。

SET ECHO "OFF" 
LET  limit1 = 25
LET  ryokin1 = 80
LET  limit2 = 50
LET  ryokin2 = 90
INPUT PROMPT "重さは?":omosa
IF omosa > limit2 THEN
   PRINT "定形外料金です"
ELSE
   IF omosa > limit1 THEN
      LET ikura = ryokin2
   ELSE
      LET ikura = ryokin1
   END IF
   PRINT "料金は";ikura;"円です"
END IF
END

最初のIF文で条件が成立しないときだけ、次のIF文が実行されます。最初のIFでは定形外かどうかを判断し、次のIF文では25gより重いかどうかを判断します。

最初の部分で数字を変数に入れているのは、郵便料金の変更があったときにどこを直せばよいかすぐわかるようにするためです。

郵便料金その2

2重のIF文の使い方はわかったと思いますが、どうもわかりにくい表現です。25gまで80円つまり、limit1 まで ryokin1 というのが見えればよりよくなるでしょう。

SET ECHO "OFF" 
LET  limit1 = 25
LET  ryokin1 = 80
LET  limit2 = 50
LET  ryokin2 = 90
INPUT PROMPT "重さは?":omosa
IF omosa =< limit1 THEN
   PRINT "料金は";ryokin1;"円です"
ELSE
   IF omosa =< limit2 THEN
      PRINT "料金は";ryokin2;"円です"
   ELSE
      PRINT "定形外料金です"
   END IF
END IF
END

=< は≦の意味です。<= という書き方も許されます。= が入るかどうかは条件によります。この例では25のときにどう判断して欲しいかということです。

IF 〜 ELSEIF 〜 ELSE 〜 END IF

前のプログラムの内容は次のように書くこともできます。

SET ECHO "OFF" 
LET  limit1 = 25
LET  ryokin1 = 80
LET  limit2 = 50
LET  ryokin2 = 90
INPUT PROMPT "重さは?":omosa
IF omosa =< limit1 THEN
   PRINT "料金は";ryokin1;"円です"
ELSEIF omosa =< limit2 THEN
   PRINT "料金は";ryokin2;"円です"
ELSE
   PRINT "定形外料金です"
END IF
END

limit1 まで ryokin1 というのがよりわかりやすい形になっています。このほうが間違いがなく、プログラムの修正もしやすいはずです。

たとえば、75gまで100円というようになったときは ELSEIF を増やせばよいのです。

例14

ある商品は普通1個100円だが10個以上買うと1個90円に、100個以上買うと1個80円になるなるという。個数を入れると1個の値段と全部の金額が出るプログラムをつくりなさい。

IF kosuu < 10 THEN
   LET tanka = 100
   LET soukei = tanka * kosuu
ELSEIF …

…??

PRINT "単価";tanka;"円 全部で";soukei;"円"

結果は、

単価90円 全部で990円

注意

aとbとが等しくないこと(a≠b)は,a<>b または、a><b と書きます。

数学では 25 < x ≦ 50 という書き方をしますが、BASICでは 25 < x と、x =< 50 に分けて書かなければなりません。

AND,OR,NOTと括弧を用いて複雑な条件を記述することができます。 たとえば,「p かつ q」という条件をBASICでは p AND q と書きます。また,「p またはq」をBASICでは p OR qと書きます。 これを使えば 25 < x ≦ 50 も 25 < x AND x =< 50 と書いて一つの式にできます。AND よりも < の判断を先にしますからこのままでもいいのですが、( 25 < x ) AND ( x =< 50 ) の方がわかりやすいでしょう。


聖愛高等学校
http://www.seiai.ed.jp/