連休。久しぶり。朝からプログラム作り。午後は部屋の掃除(何ヶ月ぶりか)。家の掃除手伝い。明日は女房の旧友が遊びに来るので、外出予定。学校で仕事でもするか・・・。プログラムは「素因数分解」のあと「素数のリスト」を作るプログラム、今さっき「最大公約数」を求めるプログラムが終わった。これでしばらくは選択授業に使えそう。今、ビール飲みながらブログを書いている。部屋に5月の風が気持ちよく入ってくる。時間があればもっといろいろなプログラム作りができそうだ。
十進Basicで悪戦苦闘の末、素因数分解のプログラムができた。プログラムの基本設定は、授業のときのように分解したい数を素数の小さい順に割っていくこと。命令は入出力に関するINPUT PROMPT LET PRINT を使った。素数の記録にDIM文、条件分岐はIF文のみとした。FOR~NEXTは使わないことにした。以下にソースを掲載します。
素因数分解に関するいろいろなプログラムでは130行からの割る数である素数準備は必要ない。実は素数で割らなくとも割る数は2から1ずつ増やしていけばよいのだが、生徒には分かりにくいと思ったので、教科書通り素数で割る設定にした。なお素数の準備のないプログラムも完成しているので、近々公開する予定。
十進Basicの文法はMicrosoft BasicやN88BASICとは少し違う。マルチステートメントが使えないので(オプションでは使える)、なれない方にはくどいかも知れない。
バグがあったら教えてください。
1 !
2 !素因数分解プログラム1(基本型)
3 ! '06.5.5 By Takasu
4 !
5 ! filname "soinsu1.bas"
6 !
7 ! 入力 n
8 !
9 ! 出力 n=a*b*c*... 累乗の指数は用いない
10 !
100 ! Program start
110 !
120 DIM p(50) !素因数の定義
130 LET p(1)=2
131 LET p(2)=3
132 LET p(3)=5
133 LET p(4)=7
134 LET p(5)=11
135 LET p(6)=13
136 LET p(7)=17
137 LET p(8)=19
138 LET p(9)=23
139 LET p(10)=29
140 LET p(11)=31
141 LET p(12)=37
142 LET p(13)=41
143 LET p(14)=43
144 LET p(15)=47
145 LET p(16)=53
146 LET p(17)=59
147 LET p(18)=61
148 LET p(19)=67
149 LET p(20)=71
150 LET p(21)=73
151 LET p(22)=79
152 LET p(23)=83
153 LET p(24)=89
154 LET p(25)=91
155 LET p(26)=97
156 !
157 !
158 !
160 !nの入力
170 PRINT "9409まで"
180 INPUT PROMPT "n=":n
190 PRINT n;"=";
200 !
210 LET c=1
220 LET b=n !nの保存
230 LET n=n/p(c) !素因数で割る
240 IF INT(n)<>n THEN 280 !割り切れないとき280
250 IF n=1 THEN 320 !割った結果が1になったら320
260 PRINT p(c);"×";
270 GOTO 220
280 LET n=b
290 LET c=c+1
300 IF c>26 THEN 320 !最後まで割り切れなかったら320
310 GOTO 220
320 PRINT b !保存したn(商)の出力
330 PRINT
340 !
350 END
素因数分解に関するいろいろなプログラムでは130行からの割る数である素数準備は必要ない。実は素数で割らなくとも割る数は2から1ずつ増やしていけばよいのだが、生徒には分かりにくいと思ったので、教科書通り素数で割る設定にした。なお素数の準備のないプログラムも完成しているので、近々公開する予定。
十進Basicの文法はMicrosoft BasicやN88BASICとは少し違う。マルチステートメントが使えないので(オプションでは使える)、なれない方にはくどいかも知れない。
バグがあったら教えてください。
1 !
2 !素因数分解プログラム1(基本型)
3 ! '06.5.5 By Takasu
4 !
5 ! filname "soinsu1.bas"
6 !
7 ! 入力 n
8 !
9 ! 出力 n=a*b*c*... 累乗の指数は用いない
10 !
100 ! Program start
110 !
120 DIM p(50) !素因数の定義
130 LET p(1)=2
131 LET p(2)=3
132 LET p(3)=5
133 LET p(4)=7
134 LET p(5)=11
135 LET p(6)=13
136 LET p(7)=17
137 LET p(8)=19
138 LET p(9)=23
139 LET p(10)=29
140 LET p(11)=31
141 LET p(12)=37
142 LET p(13)=41
143 LET p(14)=43
144 LET p(15)=47
145 LET p(16)=53
146 LET p(17)=59
147 LET p(18)=61
148 LET p(19)=67
149 LET p(20)=71
150 LET p(21)=73
151 LET p(22)=79
152 LET p(23)=83
153 LET p(24)=89
154 LET p(25)=91
155 LET p(26)=97
156 !
157 !
158 !
160 !nの入力
170 PRINT "9409まで"
180 INPUT PROMPT "n=":n
190 PRINT n;"=";
200 !
210 LET c=1
220 LET b=n !nの保存
230 LET n=n/p(c) !素因数で割る
240 IF INT(n)<>n THEN 280 !割り切れないとき280
250 IF n=1 THEN 320 !割った結果が1になったら320
260 PRINT p(c);"×";
270 GOTO 220
280 LET n=b
290 LET c=c+1
300 IF c>26 THEN 320 !最後まで割り切れなかったら320
310 GOTO 220
320 PRINT b !保存したn(商)の出力
330 PRINT
340 !
350 END