もう少し複雑な条件分岐を考えてみます。前回のお笑いネタは、もともと「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 では AND
と OR
では AND
の方が優先順位が高いので、上の式でカッコがなくても同じ意味になります。ただ、AND
と OR
の優先順位はプログラム言語によって違うこともあるし、「あれ、どっちだっけ?」と迷うこともありますので、カッコをつける習慣をつけておいた方が安全です。
次は、二つ目。
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ケタの数でも正しく判定できるように、プログラムを改造してみましょう。
[ ← トップページへ ]
[ ダウンロードページへ → ]