Syn BASIC (オンラインBASICインタプリタ)(3)

このページをスマホなどでご覧になる場合は、画面を横長にする方が読みやすくなります。
目次へ  前のページへ (1) (2) (3) (4) (5) (6) 次のページへ
2021年05月25日 公開。

記事きじにふりがなをけたいときは、つぎのチェックボックスをクリックしてください。

3.Synシン BASICベーシックつくったプログラムのれい

このしょうでは、Synシン BASICベーシックつくったプログラムのれいを、いくつか紹介しょうかいします。

3-1.2つのかずもとめるプログラム

リスト5は、INPUTインプットぶんでaとbのふたつのかず入力にゅうりょくして、aとbの(a+b)を計算けいさんし、結果けっか画面がめん表示ひょうじするプログラムです。

リスト5、2つのかずもとめるプログラム
10 PRINT "二つの数aとbを入力すると、それらの和a+bを計算して表示します。"
20 INPUT "a:",A
30 INPUT "b:",B
40 PRINT "a+bの計算結果:";a+b
50 PRINT
60 GOTO 10

リスト5のプログラムは、画面がめん7のRUNランボタンをクリックすると、実際じっさい実行じっこうできます。

10 PRINT "二つの数aとbを入力すると、それらの和a+bを計算して表示します。"
20 INPUT "a:",A
30 INPUT "b:",B
40 PRINT "a+bの計算結果:";a+b
50 PRINT
60 GOTO 10
CLS:LIST
画面7、2つのかずもとめるプログラム

3-2.入力にゅうりょくした複数ふくすうかず最大値さいだいち最小値さいしょうち合計ごうけい、および平均値へいきんちもとめるプログラム

リスト6は、いくつかのかず入力にゅうりょくすると、それらの最大値さいだいち最小値さいしょうち合計ごうけい、および平均値へいきんちもとめるプログラムです。0またはせいかずをいくつか入力にゅうりょくしたあとかず入力にゅうりょくすると、入力にゅうりょくしたかず個数こすう最大値さいだいち最小値さいしょうち合計ごうけい、および平均値へいきんち表示ひょうじしたあとに、ふたたかず入力にゅうりょくもどります。

リスト6最大値さいだいち最小値さいしょうち合計ごうけい、および平均値へいきんちもとめるプログラム
10 PRINT "0または正の数をいくつか入力すると、それらの最大値、最小値、合計、平均値を求めます。入力を終了する時は、負の数を入力してください。"
20 N=0    :'入力済みの数の個数
30 SUM=0  :'合計
40 PRINT N+1;"番目の数を入力してください"
50 INPUT R          :'数を入力
60 IF R<0 THEN 130  :'負の数が入力されたら入力終了
70 IF N=0 THEN MIN=R:MAX=R :'最初の数が入力されたら、最小値と最大値を入力された数にする
80 IF R<MIN THEN MIN=R     :'今までの最小値よりも小さい数が入力されたら、最小値を更新
90 IF R>MAX THEN MAX=R     :'今までの最大値よりも大きい数が入力されたら、最大値を更新
100 SUM=SUM+R  :'合計を更新
110 N=N+1      :'入力済みの数の個数を更新
120 GOTO 40    :'次の数を入力するためジャンプ
130 IF N=0 THEN PRINT "数を入力していません。":GOTO 10  :'いきなり負の数を入力した場合の対策
140 PRINT "入力した数の個数:";N
150 PRINT "最大値:";MAX
160 PRINT "最小値:";MIN
170 PRINT "合計:";SUM
180 PRINT "平均値:";SUM/N
190 PRINT
200 GOTO 10

リスト6のプログラムは、画面がめん8のRUNランボタンをクリックすると、実際じっさい実行じっこうできます。

10 PRINT "0または正の数をいくつか入力すると、それらの最大値、最小値、合計、平均値を求めます。入力を終了する時は、負の数を入力してください。"
20 N=0 :'入力済みの数の個数
30 SUM=0 :'合計
40 PRINT N+1;"番目の数を入力してください"
50 INPUT R :'数を入力
60 IF R<0 THEN 130 :'負の数が入力されたら入力終了
70 IF N=0 THEN MIN=R:MAX=R :'最初の数が入力されたら、最小値と最大値を入力された数にする
80 IF R<MIN THEN MIN=R :'今までの最小値よりも小さい数が入力されたら、最小値を更新
90 IF R>MAX THEN MAX=R :'今までの最大値よりも大きい数が入力されたら、最大値を更新
100 SUM=SUM+R :'合計を更新
110 N=N+1 :'入力済みの数の個数を更新
120 GOTO 40 :'次の数を入力するためジャンプ
130 IF N=0 THEN PRINT "数を入力していません。":GOTO 10 :'いきなり負の数を入力した場合の対策
140 PRINT "入力した数の個数:";N
150 PRINT "最大値:";MAX
160 PRINT "最小値:";MIN
170 PRINT "合計:";SUM
180 PRINT "平均値:";SUM/N
190 PRINT
200 GOTO 10
CLS:LIST
画面8、最大値さいだいち最小値さいしょうち合計ごうけい、および平均値へいきんちもとめるプログラム

3-3.じゃんけんをするプログラム

リスト7は、コンピュータとじゃんけんができるプログラムです。

グーをときは、1またはGのキーをしてください。チョキをとき2またはCのキーをしてください。パーをときは、3またはPのキーをしてください。

リスト7、じゃんけんをするプログラム
10  CLS:PRINT "じゃんけんをします。"
20  DIM A$(2)
30  A$(0)="グー"
40  A$(1)="チョキ"
50  A$(2)="パー"
60  PRINT "グーを出す時は、1またはGのキーを押してください。"
70  PRINT "チョキを出す時は、2またはCのキーを押してください。"
80  PRINT "パーを出す時は、3またはPのキーを押してください。"
90  PRINT
100 C=INT(RND*3)  :'コンピュータの次の手
110 U$=INKEY$     :'ユーザーの手の入力
120 IF U$="1" OR U$="G" OR U$="g" THEN U=0:GOTO 160
130 IF U$="2" OR U$="C" OR U$="c" THEN U=1:GOTO 160
140 IF U$="3" OR U$="P" OR U$="p" THEN U=2:GOTO 160
150 GOTO 100
160 CLS
170 PRINT "あなたの手: ";A$(U)
180 PRINT "私の手: ";A$(C)
190 IF U=C THEN PRINT "あいこです。":GOTO 220
200 IF U=(C+1) MOD 3 THEN PRINT "あなたの負けです。":GOTO 220
210 PRINT "あなたの勝ちです。"
220 PRINT
230 GOTO 60

リスト7のプログラムは、画面がめん9のRUNランボタンをクリックすると、実際じっさい実行じっこうできます。

10 CLS:PRINT "じゃんけんをします。"
20 DIM A$(2)
30 A$(0)="グー"
40 A$(1)="チョキ"
50 A$(2)="パー"
60 PRINT "グーを出す時は、1またはGのキーを押してください。"
70 PRINT "チョキを出す時は、2またはCのキーを押してください。"
80 PRINT "パーを出す時は、3またはPのキーを押してください。"
90 PRINT
100 C=INT(RND*3) :'コンピュータの次の手
110 U$=INKEY$ :'ユーザーの手の入力
120 IF U$="1" OR U$="G" OR U$="g" THEN U=0:GOTO 160
130 IF U$="2" OR U$="C" OR U$="c" THEN U=1:GOTO 160
140 IF U$="3" OR U$="P" OR U$="p" THEN U=2:GOTO 160
150 GOTO 100
160 CLS
170 PRINT "あなたの手: ";A$(U)
180 PRINT "私の手: ";A$(C)
190 IF U=C THEN PRINT "あいこです。":GOTO 220
200 IF U=(C+1) MOD 3 THEN PRINT "あなたの負けです。":GOTO 220
210 PRINT "あなたの勝ちです。"
220 PRINT
230 GOTO 60
CLS:LIST
画面9、じゃんけんをするプログラム

3-4.素数そすうつけるプログラム(1)

リスト8は、入力にゅうりょくしたかず以下いかすべての素数そすうもとめるプログラムです。

このプログラムは、エラトステネスのふるいばれる方法ほうほう素数そすうつけます。エラトステネスのふるいを簡単かんたん説明せつめいすると、つぎよう素数そすう探索たんさくほうです。

2から素数そすう探査たんさする最大さいだいかずまでのフラグ配列はいれつもうけ、最初さいしょはフラグをろしておきます。

つぎに2からじゅんに3、4、…と、最大さいだいかずまで、フラグの状態じょうたいていきます。もしフラグがっていたら、そのあたいはそれよりちいさいかずばいすうで、素数そすうではありません。フラグがりていたら、そのかず素数そすうです。画面がめんにその素数そすう表示ひょうじするとともに、その素数そすうばいすうのフラグをすべてます。

エラトステネスのふるいは、上記じょうき方法ほうほう素数そすうつけますが、2以外いがい素数そすう奇数きすうであること利用りようすると、計算けいさんりょうらすことができます。リスト8のプログラムは、この計算けいさんりょうらしたプログラムです。

エラトステネスのふるいは、フラグよう配列はいれつがメモリを消費しょうひするという欠点けってんはあるものの、高速こうそく素数そすう探索たんさくできる特長とくちょうがあります。

リスト8入力にゅうりょくしたかず以下いかすべての素数そすうもとめるプログラム
10  'エラトステネスのふるいにより素数を求めるプログラム
20  PRINT "指定した数以下の素数を全部求めます。"
30  INPUT "素数を探索する最大の数:",MAX
40  IF MAX<2 THEN PRINT "2以上の数を入力してください":GOTO 30
50  IF MAX<>INT(MAX) THEN PRINT "整数を入力してください。":GOTO 30
60  DIM F(MAX)  :'ふるいに使うフラグ配列の宣言(配列の初期値は0)
70  PRINT 2,    :'2は無条件に素数として表示
80  FOR I=3 to MAX STEP 2        :'3以上MAX以下の数を素数かどうか判定
90    IF F(I)=1 THEN GOTO 140    :'フラグが立っていたのでIは素数でなかった
100   PRINT I,  :'見つかった素数を表示
110   FOR J=I*3 TO MAX STEP I*2  :'Iの奇数倍のフラグを立てる
120     F(J)=1
130   NEXT J
140 NEXT I
150 PRINT
160 END

リスト8のプログラムは、画面がめん10のRUNランボタンをクリックすると、実際じっさい実行じっこうできます。

10 'エラトステネスのふるいにより素数を求めるプログラム
20 PRINT "指定した数以下の素数を全部求めます。"
30 INPUT "素数を探索する最大の数:",MAX
40 IF MAX<2 THEN PRINT "2以上の数を入力してください":GOTO 30
50 IF MAX<>INT(MAX) THEN PRINT "整数を入力してください。":GOTO 30
60 DIM F(MAX) :'ふるいに使うフラグ配列の宣言(配列の初期値は0)
70 PRINT 2, :'2は無条件に素数として表示
80 FOR I=3 to MAX STEP 2 :'3以上MAX以下の数を素数かどうか判定
90 IF F(I)=1 THEN GOTO 140 :'フラグが立っていたのでIは素数でなかった
100 PRINT I, :'見つかった素数を表示
110 FOR J=I*3 TO MAX STEP I*2 :'Iの奇数倍のフラグを立てる
120 F(J)=1
130 NEXT J
140 NEXT I
150 PRINT
160 END
CLS:LIST
画面10、入力にゅうりょくしたかず以下いかすべての素数そすうもとめるプログラム

3-5.素数そすうつけるプログラム(2)

リスト9のプログラムも、リスト8のプログラムと同様どうようちいさいじゅん素数そすうつけていきます。リスト8が入力にゅうりょくしたかず以下いか素数そすうつけるプログラムだったのにたいし、リスト9は入力にゅうりょくしたかずおな個数こすう素数そすうつけます。

リスト9のプログラムでは、つかった素数そすうを、配列はいれつPに記録きろくしておきます。あたらしいかず素数そすうかどうかを判定はんていするには、そのかずよりちいさい素数そすうってみて、あまりがるかどうかを調しらべます。素数そすう判定はんていをしたいかず以下いかすべての素数そすうってみなくても、素数そすう判定はんていをしたいかず平方根へいほうこん以下いかすべての素数そすうれば素数そすう判定はんていができるので、これにより計算けいさんりょうらしています。

リスト8のプログラムでは、素数そすう探索たんさくをしたい範囲はんいおなじサイズの配列はいれつ必要ひつようだったので、メモリをたくさん消費しょうひしていましたが、リスト9のプログラムでは、つかった素数そすうかずとおなじサイズの配列はいれつ確保かくほすればよく、メモリの消費しょうひおさえられます。ただし、素数そすう探査たんさ速度そくどおそくなります。

参考さんこう:リスト9のプログラムでは採用さいようしていませんが、つけた素数そすう全部ぜんぶ配列はいれつ記録きろくしておく必要ひつようはなく、つける最大さいだい素数そすう平方根へいほうこん以下いか素数そすうだけを記録きろくすればいいので、工夫くふう次第しだいでさらにメモリ消費しょうひさえることもできます。ただし、プログラムが複雑ふくざつになります。

リスト9入力にゅうりょくしたかずおな個数こすう素数そすうつけるプログラム
10 PRINT "素数を小さい順に、指定した個数だけ見つけます。"
20 INPUT "個数:",CNT  :'見つける素数の個数を入力
30 DIM P(CNT)  :'見つけた素数を記録する配列の宣言
40 IF CNT<1 THEN END  :'個数が1個未満なら直ちに終了
50 N=1    :'Nはすでに見つけた素数の数
60 P(N)=2 :'2は無条件に素数とする
70 PRINT N;"番目: ";P(N)  :'2を表示
80 IF CNT<2 THEN END   :'見つける素数が1個だけの場合はここで終了
90 I=3    :'3以降の数を探索
100 FOR J=2 to N  :'Iが素数か確かめるためのループ
110   IF P(J)*P(J)>I THEN GOTO 140   :'P(J)がIの平方根より大きいので、Iが素数であることが確定
120   IF I MOD P(J)=0 THEN GOTO 180  :'IがP(J)で割り切れたので、Iは合成数
130 NEXT
140 N=N+1
150 P(N)=I  :'見つかった素数を配列に記録
160 PRINT N;"番目: ";I     :'見つかった素数を表示
170 IF N>=CNT THEN END  :'素数をN個見つけたので終了
180 I=I+2  :'奇数のみを探索するので、2刻みで探索
190 GOTO 100  :'次の数を探索

リスト9のプログラムは、画面がめん11のRUNランボタンをクリックすると、実際じっさい実行じっこうできます。

10 PRINT "素数を小さい順に、指定した個数だけ見つけます。"
20 INPUT "個数:",CNT :'見つける素数の個数を入力
30 DIM P(CNT) :'見つけた素数を記録する配列の宣言
40 IF CNT<1 THEN END :'個数が1個未満なら直ちに終了
50 N=1 :'Nはすでに見つけた素数の数
60 P(N)=2 :'2は無条件に素数とする
70 PRINT N;"番目: ";P(N) :'2を表示
80 IF CNT<2 THEN END :'見つける素数が1個だけの場合はここで終了
90 I=3 :'3以降の数を探索
100 FOR J=2 to N :'Iが素数か確かめるためのループ
110 IF P(J)*P(J)>I THEN GOTO 140 :'P(J)がIの平方根より大きいので、Iが素数であることが確定
120 IF I MOD P(J)=0 THEN GOTO 180 :'IがP(J)で割り切れたので、Iは合成数
130 NEXT
140 N=N+1
150 P(N)=I :'見つかった素数を配列に記録
160 PRINT N;"番目: ";I :'見つかった素数を表示
170 IF N>=CNT THEN END :'素数をN個見つけたので終了
180 I=I+2 :'奇数のみを探索するので、2刻みで探索
190 GOTO 100 :'次の数を探索
CLS:LIST
画面11、入力にゅうりょくしたかずおな個数こすう素数そすうつけるプログラム

3-6.円周率えんしゅうりつもとめるプログラム

リスト10は、しき(1)の公式こうしき使つかって円周率えんしゅうりつもとめるプログラムです。

π=0141+x2dx ・・・ (1)

参考さんこう:しき(1)が成立せいりつする理由りゆうについては、あとのコラムで説明せつめいします。

しき(1)の定積分せきぶんシンプソンほう近似きんじ計算けいさんします。シンプソンほうでは、積分せきぶん区間くかんとうぶんわりして近似きんじ計算けいさんおこないますが、リスト10のプログラムでは、0~1の区間くかんを100ふんわりしています。

リスト10円周率えんしゅうりつもとめるプログラム
10 'シンプソン法で円周率を求める
20 DIV=100 :'積分区間の分割数
30 SUM=0   :'区間積分値の合計
40 FOR I=0 TO DIV
50 X=I/DIV  :'区間のX
60 IF I=0 OR I=DIV THEN K=1 ELSE IF I MOD 2=1 THEN K=4 ELSE K=2  :'Kは重み(1か2か4)
70 SUM=SUM+K*(4/(1+X^2))  :'関数4/(1+X^2)を積分する
80 NEXT
90 PRINT SUM/(3*DIV) :'円周率を表示
100 END

リスト10のプログラムは、画面がめん12のRUNランボタンをクリックすると、実際じっさい実行じっこうできます。

円周率えんしゅうりつただしいあたいは3.141592653589793238…ですが、プログラムを実行じっこうすると、表示ひょうじされる小数点しょうすうてん以下いか11けたまで正確せいかく円周率えんしゅうりつもとまっていることかります。

10 'シンプソン法で円周率を求める
20 DIV=100 :'積分区間の分割数
30 SUM=0 :'区間積分値の合計
40 FOR I=0 TO DIV
50 X=I/DIV :'区間のX
60 IF I=0 OR I=DIV THEN K=1 ELSE IF I MOD 2=1 THEN K=4 ELSE K=2 :'Kは重み(1か2か4)
70 SUM=SUM+K*(4/(1+X^2)) :'関数4/(1+X^2)を積分する
80 NEXT
90 PRINT SUM/(3*DIV) :'円周率を表示
100 END
CLS:LIST
画面12、円周率えんしゅうりつもとめるプログラム
【コラム】しき(1)の証明しょうめい

しき(1)のりょうへん14ばいしてられるしき(2)を証明しょうめいします。

π4=0111+x2dx ・・・ (2)

まず、しき(3)の積分せきぶん計算けいさんしてみましょう。

11+x2dx ・・・ (3)

しき(4)のようθをおいて、置換ちかん積分せきぶんをします。

x=tanタンジェントθ ・・・ (4)

しき(4)のりょうへんθ微分びぶんすると、しき(5)をます。

dxdθ=1cosコサイン2θ
∴ dx=1cosコサイン2θdθ ・・・ (5)

しき(3)にしき(4)としき(5)を代入だいにゅうすると、しき(6)をます。

11+x2dx =11+tanタンジェント2θ1cosコサイン2θdθ =11+sinサイン2θcosコサイン2θ1cosコサイン2θdθ =1cosコサイン2θ+sinサイン2θdθ =dθ =θ+C ・・・ (6)

ただし、C積分せきぶん定数ていすう

さらに、しき(4)よりしき(7)が成立せいりつします。

θ=arcアークtanタンジェントx ・・・ (7)

しき(7)をしき(6)に代入だいにゅうすると、しき(8)をます。

11+x2dx =arcアークtanタンジェントx+C ・・・ (8)

しき(8)を利用りようすれば、しき(2)はつぎよう証明しょうめいできます。

0111+x2dx =arcアークtanタンジェントx01 =arcアークtanタンジェント 1−arcアークtanタンジェント 0 =π4 ・・・ (9)

次のページから、Synシン BASICベーシック使つかかたについて説明せつめいをします。

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

関連ページ

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