Syn BASICのサンプルプログラム(2)

このページをスマホなどでご覧になる場合は、画面を横長にする方が読みやすくなります。
目次へ  前のページへ (1) (2) (3) (4) (5) 次のページへ
2022年11月24日 公開。
2023年01月04日 筆算風に割り算をするプログラムを修正。

前のページから引き続き、Syn BASICで作ったプログラムの例を紹介します。

2.算数や数学に関するプログラム

2-1.筆算風に掛け算をするプログラム

リスト6のプログラムは、2つの整数を入力すると、それらの積を、筆算風に計算するプログラムです。

リスト6、2つの数の積を筆算風に計算するプログラムCOPY
10 PRINT "2つの整数を入力すると、それらの積を、筆算風に計算します。"
20 PRINT
30 PARAM_NO=1:GOSUB *INPUT_NUMBER:A=RESULT
40 PRINT
50 PARAM_NO=2:GOSUB *INPUT_NUMBER:B=RESULT
60 SA$=STR$(A)
70 SB$=STR$(B)
80 P=A*B
90 SP$=STR$(P)
100 W=LEN(SP$)
110 IF LEN(SA$)+2>W THEN W=LEN(SA$)+2
120 IF LEN(SB$)+2>W THEN W=LEN(SB$)+2
130 S$=""
140 FOR I=1 TO W:S$=S$+" ":NEXT
150 SA$=RIGHT$(S$+SA$,W)
160 PRINT
170 PRINT SA$
180 SB$="X "+RIGHT$(S$+SB$,W-2)
190 PRINT SB$
200 BAR$=""
210 FOR I=1 TO W:BAR$=BAR$+"-":NEXT
220 PRINT BAR$
230 I=0
240 BB=B
250 D=BB MOD 10
260 BB=INT(BB/10)
270 IF D=0 THEN 300
280 C$=RIGHT$(S$+STR$(A*D),W-I)
290 PRINT C$
300 I=I+1
310 IF BB<>0 THEN 250
320 PRINT BAR$
330 PRINT RIGHT$(S$+SP$,W)
340 PRINT
350 PRINT A;"×";B;"=";P
360 PRINT
370 GOTO 10
380 *INPUT_NUMBER
390 PRINT PARAM_NO;"番目の数を入力してください。"
400 INPUT IN_X
410 IF IN_X<=0 THEN PRINT "正の数を入力してください":GOTO 390
420 IF IN_X<>INT(IN_X) THEN PRINT "整数を入力してください":GOTO 390
430 IF IN_X>=10000000 THEN PRINT "10000000未満の数を入力してください":GOTO 390
440 RESULT=IN_X
450 RETURN

リスト6のプログラムは、画面5のRUNボタン(青い三角形のボタン)をクリックすると、実際に実行できます。

10 PRINT "2つの整数を入力すると、それらの積を、筆算風に計算します。"
20 PRINT
30 PARAM_NO=1:GOSUB *INPUT_NUMBER:A=RESULT
40 PRINT
50 PARAM_NO=2:GOSUB *INPUT_NUMBER:B=RESULT
60 SA$=STR$(A)
70 SB$=STR$(B)
80 P=A*B
90 SP$=STR$(P)
100 W=LEN(SP$)
110 IF LEN(SA$)+2>W THEN W=LEN(SA$)+2
120 IF LEN(SB$)+2>W THEN W=LEN(SB$)+2
130 S$=""
140 FOR I=1 TO W:S$=S$+" ":NEXT
150 SA$=RIGHT$(S$+SA$,W)
160 PRINT
170 PRINT SA$
180 SB$="X "+RIGHT$(S$+SB$,W-2)
190 PRINT SB$
200 BAR$=""
210 FOR I=1 TO W:BAR$=BAR$+"-":NEXT
220 PRINT BAR$
230 I=0
240 BB=B
250 D=BB MOD 10
260 BB=INT(BB/10)
270 IF D=0 THEN 300
280 C$=RIGHT$(S$+STR$(A*D),W-I)
290 PRINT C$
300 I=I+1
310 IF BB<>0 THEN 250
320 PRINT BAR$
330 PRINT RIGHT$(S$+SP$,W)
340 PRINT
350 PRINT A;"×";B;"=";P
360 PRINT
370 GOTO 10
380 *INPUT_NUMBER
390 PRINT PARAM_NO;"番目の数を入力してください。"
400 INPUT IN_X
410 IF IN_X<=0 THEN PRINT "正の数を入力してください":GOTO 390
420 IF IN_X<>INT(IN_X) THEN PRINT "整数を入力してください":GOTO 390
430 IF IN_X>=10000000 THEN PRINT "10000000未満の数を入力してください":GOTO 390
440 RESULT=IN_X
450 RETURN
画面5、2つの数の積を筆算風に計算するプログラム

2-2.筆算風に割り算をするプログラム

リスト7のプログラムは、2つの整数を入力すると、それらの商を、筆算風に計算するプログラムです。

リスト7、筆算風に割り算をするプログラムCOPY
10 *START
20 INPUT "割られる数は";DIVIDEND
30 IF DIVIDEND<>INT(DIVIDEND) THEN PRINT "整数を入力してください。":GOTO *START
40 IF DIVIDEND<0 THEN PRINT "0または正の数を入力してください。":GOTO *START
50 IF DIVIDEND>=1E15 THEN PRINT "15桁以内の数を入力してください。":GOTO *START
60 *INPUT_DIVISOR
70 INPUT "割る数は";DIVISOR
80 IF DIVISOR<>INT(DIVISOR) THEN PRINT "整数を入力してください。":GOTO *INPUT_DIVISOR
90 IF DIVISOR<=0 THEN PRINT "正の数を入力してください。":GOTO *INPUT_DIVISOR
100 IF DIVISOR>=1E15 THEN PRINT "15桁以内の数を入力してください。":GOTO *INPUT_DIVISOR
110 PRINT
120 QUOTIENT=INT(DIVIDEND/DIVISOR)
130 X=DIVISOR:GOSUB *GET_DIGIT_NUM
140 DIVISOR_LEN=DIGIT_NUM
150 X=DIVIDEND:GOSUB *GET_DIGIT_NUM
160 DIVIDEND_LEN=DIGIT_NUM
170 X=QUOTIENT:GOSUB *GET_DIGIT_NUM
180 QUOTIENT_LEN=DIGIT_NUM
190 IF DIVISOR_LEN<DIVIDEND_LEN THEN MAX_LEN=DIVIDEND_LEN ELSE MAX_LEN=DIVISOR_LEN
200 N=DIVISOR_LEN+MAX_LEN-QUOTIENT_LEN+3
210 FOR I=1 TO N:PRINT " ";:NEXT
220 PRINT QUOTIENT
230 FOR I=1 TO DIVISOR_LEN+1:PRINT " ";:NEXT
240 FOR I=1 TO MAX_LEN+2:PRINT "-";:NEXT:PRINT
250 PRINT DIVISOR;
260 PRINT " ) ";
270 N=DIVISOR_LEN-DIVIDEND_LEN
280 FOR I=1 TO N:PRINT " ";:NEXT
290 PRINT DIVIDEND
300 POSITION=DIVIDEND_LEN-DIVISOR_LEN
310 IF POSITION<0 THEN POSITION=0
320 N=1:FOR I=1 TO POSITION:N=N*10:NEXT
330 OFFSET=DIVISOR_LEN+MAX_LEN+3
340 FIRST=-1:TOP=-1
350 *LOOP
360 Q=INT(QUOTIENT/N) MOD 10
370 M=INT(DIVIDEND/N) MOD 10
380 IF NOT FIRST THEN IF M<>0 OR NOT TOP OR POSITION=0 THEN PRINT M;:TOP=0 ELSE PRINT " ";
390 IF Q=0 THEN *NEXT_POSITION
400 IF FIRST THEN FIRST=0 ELSE PRINT
410 M=Q*DIVISOR
420 X=M:GOSUB *GET_DIGIT_NUM
430 M_LEN=DIGIT_NUM
440 FOR I=1 TO OFFSET-M_LEN-POSITION:PRINT " ";:NEXT
450 PRINT M
460 FOR I=1 TO DIVISOR_LEN+3:PRINT " ";:NEXT
470 FOR I=1 TO MAX_LEN:PRINT "-";:NEXT:PRINT
480 M=INT(DIVIDEND/N) MOD DIVISOR
490 X=M:GOSUB *GET_DIGIT_NUM
500 M_LEN=DIGIT_NUM
510 FOR I=1 TO OFFSET-M_LEN-POSITION:PRINT " ";:NEXT
520 IF M<>0 OR POSITION=0 THEN PRINT M;:TOP=0 ELSE PRINT " ";:TOP=-1
530 *NEXT_POSITION
540 POSITION=POSITION-1:N=N/10
550 IF POSITION>=0 THEN GOTO *LOOP
560 PRINT
570 PRINT
580 PRINT DIVIDEND;" ÷ ";DIVISOR;" = ";QUOTIENT;
590 REMAINDER=DIVIDEND MOD DIVISOR
600 IF REMAINDER<>0 THEN PRINT " あまり ";REMAINDER ELSE PRINT
610 PRINT
620 GOTO *START
630 *GET_DIGIT_NUM
640 SUB_X=X:DIGIT_NUM=1
650 IF SUB_X>=10 THEN SUB_X=INT(SUB_X/10):DIGIT_NUM=DIGIT_NUM+1:GOTO 650
660 RETURN

リスト7のプログラムは、画面6のRUNボタン(青い三角形のボタン)をクリックすると、実際に実行できます。

10 *START
20 INPUT "割られる数は";DIVIDEND
30 IF DIVIDEND<>INT(DIVIDEND) THEN PRINT "整数を入力してください。":GOTO *START
40 IF DIVIDEND<0 THEN PRINT "0または正の数を入力してください。":GOTO *START
50 IF DIVIDEND>=1E15 THEN PRINT "15桁以内の数を入力してください。":GOTO *START
60 *INPUT_DIVISOR
70 INPUT "割る数は";DIVISOR
80 IF DIVISOR<>INT(DIVISOR) THEN PRINT "整数を入力してください。":GOTO *INPUT_DIVISOR
90 IF DIVISOR<=0 THEN PRINT "正の数を入力してください。":GOTO *INPUT_DIVISOR
100 IF DIVISOR>=1E15 THEN PRINT "15桁以内の数を入力してください。":GOTO *INPUT_DIVISOR
110 PRINT
120 QUOTIENT=INT(DIVIDEND/DIVISOR)
130 X=DIVISOR:GOSUB *GET_DIGIT_NUM
140 DIVISOR_LEN=DIGIT_NUM
150 X=DIVIDEND:GOSUB *GET_DIGIT_NUM
160 DIVIDEND_LEN=DIGIT_NUM
170 X=QUOTIENT:GOSUB *GET_DIGIT_NUM
180 QUOTIENT_LEN=DIGIT_NUM
190 IF DIVISOR_LEN<DIVIDEND_LEN THEN MAX_LEN=DIVIDEND_LEN ELSE MAX_LEN=DIVISOR_LEN
200 N=DIVISOR_LEN+MAX_LEN-QUOTIENT_LEN+3
210 FOR I=1 TO N:PRINT " ";:NEXT
220 PRINT QUOTIENT
230 FOR I=1 TO DIVISOR_LEN+1:PRINT " ";:NEXT
240 FOR I=1 TO MAX_LEN+2:PRINT "-";:NEXT:PRINT
250 PRINT DIVISOR;
260 PRINT " ) ";
270 N=DIVISOR_LEN-DIVIDEND_LEN
280 FOR I=1 TO N:PRINT " ";:NEXT
290 PRINT DIVIDEND
300 POSITION=DIVIDEND_LEN-DIVISOR_LEN
310 IF POSITION<0 THEN POSITION=0
320 N=1:FOR I=1 TO POSITION:N=N*10:NEXT
330 OFFSET=DIVISOR_LEN+MAX_LEN+3
340 FIRST=-1:TOP=-1
350 *LOOP
360 Q=INT(QUOTIENT/N) MOD 10
370 M=INT(DIVIDEND/N) MOD 10
380 IF NOT FIRST THEN IF M<>0 OR NOT TOP OR POSITION=0 THEN PRINT M;:TOP=0 ELSE PRINT " ";
390 IF Q=0 THEN *NEXT_POSITION
400 IF FIRST THEN FIRST=0 ELSE PRINT
410 M=Q*DIVISOR
420 X=M:GOSUB *GET_DIGIT_NUM
430 M_LEN=DIGIT_NUM
440 FOR I=1 TO OFFSET-M_LEN-POSITION:PRINT " ";:NEXT
450 PRINT M
460 FOR I=1 TO DIVISOR_LEN+3:PRINT " ";:NEXT
470 FOR I=1 TO MAX_LEN:PRINT "-";:NEXT:PRINT
480 M=INT(DIVIDEND/N) MOD DIVISOR
490 X=M:GOSUB *GET_DIGIT_NUM
500 M_LEN=DIGIT_NUM
510 FOR I=1 TO OFFSET-M_LEN-POSITION:PRINT " ";:NEXT
520 IF M<>0 OR POSITION=0 THEN PRINT M;:TOP=0 ELSE PRINT " ";:TOP=-1
530 *NEXT_POSITION
540 POSITION=POSITION-1:N=N/10
550 IF POSITION>=0 THEN GOTO *LOOP
560 PRINT
570 PRINT
580 PRINT DIVIDEND;" ÷ ";DIVISOR;" = ";QUOTIENT;
590 REMAINDER=DIVIDEND MOD DIVISOR
600 IF REMAINDER<>0 THEN PRINT " あまり ";REMAINDER ELSE PRINT
610 PRINT
620 GOTO *START
630 *GET_DIGIT_NUM
640 SUB_X=X:DIGIT_NUM=1
650 IF SUB_X>=10 THEN SUB_X=INT(SUB_X/10):DIGIT_NUM=DIGIT_NUM+1:GOTO 650
660 RETURN
画面6、筆算風に割り算をするプログラム

次のページでは、素数を見つけるプログラムを紹介します。

目次へ  前のページへ (1) (2) (3) (4) (5) 次のページへ

関連ページ

Arduino 電子工作
このサイトの記事が本になりました。
書名:Arduino 電子工作
ISBN:978-4-7775-1941-5
工学社の書籍の内容の紹介ページ
本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。