Daruma BASIC 入門 (5)
複雑な条件分岐

もう少し複雑な条件分岐を考えてみます。前回のお笑いネタは、もともと「3の倍数と3のつく数のときにアホになる」というものでした。これをプログラミングしてみましょう。

複雑なプログラムを作りたい時は、「問題を小さい部分に分ける」ことが役に立ちます。この場合は、「3の倍数である」という条件判定と、「3のつく数である」という条件判定をまず考えます。「3の倍数である」方はもうわかっていますね。「3で割った余りが0である」と書けばよいわけです。もう一つの条件、「3のつく数である」の方を考えましょう。

これは実は少し面倒です。まず、どんな数が「3のつく数」なのか、書き出して考えてみましょう。

3, 13, 23, ← ここまでは「○十三」という形の数
30, 31, ..., 39, ← 「三十○」という形の数
43, 53, 63, ... ← ふたたび「○十三」という形の数

2ケタまでの数に限定すれば、「○十三」という形か、「三十○」という形であることがわかります。そこで、「3のつく数である」という条件を「○十三という形である」または「三十○という形である」とさらに分けることにします。

「○十三という形である」かどうかは、「10 で割った余りが3である」ことで判定できます。「10 で割った余り」は1の位の数になるからです。この判定は、BASIC では、I%10=3 と表すことができます。

3, 13, 23, 33, 43, ... ← 10 で割った余り=3

「三十○という形である」という条件は、判定の仕方がいくつかあります。一つ目は、「30 以上で 39 以下である」というものです。BASIC では、I>=30 AND I<=39 と書けます。もう一つは、「10 で割って余りを切り捨てたものが3である」というものです。これは、BASIC では I/10=3 と表すことができます(整数のわり算は余りが切り捨てられることを思い出しましょう)。

30, 31, ..., 39 ← 10 で割って余りを切り捨てる=3

それでは、「I が三十○という形である」という条件を BASIC で書いてみます。とりあえず、2ケタまでの数限定ということにします。まず、一つ目。

I%10=3 OR (I>=30 AND I<=39)

実は Daruma BASIC では ANDOR では AND の方が優先順位が高いので、上の式でカッコがなくても同じ意味になります。ただ、ANDOR の優先順位はプログラム言語によって違うこともあるし、「あれ、どっちだっけ?」と迷うこともありますので、カッコをつける習慣をつけておいた方が安全です。

次は、二つ目。

I%10=3 OR I/10=3

どちらでもいいのですが、二つ目の方が簡単なので、二つ目を採用することにしましょう。それでは、「3の倍数と3のつく数のときにアホになる」プログラムです。数は 100 まで奮発(?)しました。

   1 FOR I=1 TO 100
   2 PRINT I;
   3 IF I%3=0 OR (I%10=3 OR I/10=3) THEN PRINT "!!";
   4 PRINT " ";
   5 NEXT
    

実行結果です。

>> RUN
1 2 3!! 4 5 6!! 7 8 9!! 10 11 12!! 13!! 
14 15!! 16 17 18!! 19 20 21!! 22 23!! 24
!! 25 26 27!! 28 29 30!! 31!! 32!! 33!! 
34!! 35!! 36!! 37!! 38!! 39!! 40 41 42!!
43!! 44 45!! 46 47 48!! 49 50 51!! 52 53
!! 54!! 55 56 57!! 58 59 60!! 61 62 63!!
 64 65 66!! 67 68 69!! 70 71 72!! 73!! 7
4 75!! 76 77 78!! 79 80 81!! 82 83!! 84!
! 85 86 87!! 88 89 90!! 91 92 93!! 94 95
 96!! 97 98 99!! 100 >>

【やってみよう】このプログラムでは、数が3ケタになると対応できません。3ケタの数でも正しく判定できるように、プログラムを改造してみましょう。

[ ← トップページへ ]

[ ダウンロードページへ → ]