ここしばらく、どういうわけかBASICへの関心が高まっていて、UbuntuでBywater BASICとか動かして遊んでいるわけです。かつて広く使われたBASICですが、2018年現在、ゼロからこのプログラミング言語を勉強する意義はないでしょう。実用的なプログラミング能力を身につけたければPythonなんかを勉強すべきです。私がBASICをちまちまやってるのは、ノスタルジーにひたってるというか、骨董趣味のようなものです。

で、少しBASICの書き方を思い出してきたので、誕生日を入力すると星座を判定するコードを書いてみました。今の言語には当然あるようなライブラリがぜんぜんBASICにはないので、こんな冗長な書き方になってしまいましたが、もうちょっと上手いやり方ないだろうか…。

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
REM 誕生日から星座を判定するプログラム

REM 初期化
dim constellation$(12)
dim mlast(13)
restore

for i = 0 to 11
read s$
constellation$(i) = s$
next
for i = 1 to 12
read lastday
mlast(i) = lastday
next

REM sは星座配列のインデックス
s = 0

print "誕生月と誕生日をそれぞれ数値で入力してください。"
input "誕生月は"; month
input "誕生日は"; day

REM エラー処理(手抜き
if (month < 1) or (month > 12) then end
if (day < 1) or (mlast(month) < day) then end

bd = month * 100 + day

if (bd >= 121) and (bd <= 219) then s = 1
if (bd >= 220) and (bd <= 320) then s = 2
if (bd >= 321) and (bd <= 420) then s = 3
if (bd >= 421) and (bd <= 521) then s = 4
if (bd >= 522) and (bd <= 621) then s = 5
if (bd >= 622) and (bd <= 723) then s = 6
if (bd >= 724) and (bd <= 823) then s = 7
if (bd >= 824) and (bd <= 923) then s = 8
if (bd >= 924) and (bd <= 1023) then s = 9
if (bd >= 1024) and (bd <= 1122) then s = 10
if (bd >= 1123) and (bd <= 1222) then s = 11

print month; "月"; day; "日生まれは "; constellation$(s)
end

data "山羊座", "水瓶座", "魚座", "牡羊座", "牡牛座", "双子座"
data "蟹座", "獅子座", "乙女座", "天秤座","蠍座", "射手座"
data 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31

Bywater BASICで動作確認しています。

1
2
3
4
5
6
7
8
9
10
11
Bywater BASIC Interpreter/Shell, version 2.20 patch level 2
Copyright (c) 1993, Ted A. Campbell
Copyright (c) 1995-1997, Jon B. Volkoff

bwBASIC: load "seiza.bas"
bwBASIC: run
誕生月と誕生日をそれぞれ数値で入力してください。
誕生月は? 12
誕生日は? 18
12月 18日生まれは 射手座
bwBASIC:

これは ryecroft Advent Calendar 2018 18日目の記事です。