7月25日

Back to BASIC


BASIC の準備

BASIC言語の処理系を、PC にインストールするやり方とプログラムを実行するやり方を、(1)古典的な1980年代風のBASIC言語、および(2)やや現代風な言語要素を取り入れたモダンなBAISC言語の両方について例を次にあげておく。プログラムは、どちらもWindows OS に標準の メモ帳をつかって書くことにする。

この練習では、==言語処理系(プロセッサ)とプログラム(コード)は、どちらも == Windows デスクトップに保存するやり方ですすめる。

  • メモ帳: コードを書き、編集し、デスクトップにファイルとして名前をつけて保存する。
  • 言語プロセッサ: Chipmunk Basic または FreeBASIC
  • コードの実行 (つくったアプリを動かす)

クラシカルな BASIC言語

chipmunkLogo

Chipmunk Basicをクリックし、次のリンク先からダウンロードする。

chipmunkDownload

ダウンロード先は、デスクトップにする。

次に、コマンドプロンプトを起動する。

モダンな BASIC言語

freebasicLogo


数のパズル

コンピュータと人間、どちらが勝つのか。まず、四則演算で10をつくるパズルをやってみる。

「10」 のつくり方

1, 2, 3, 4 の4つの数をつかって、加減乗除だけで 10 をつくる問題を考えてみよう。

例えば、

1 + 2 + 3 + 4

の式は、足し算だけで 10 になる。

では、加減乗除「+, -, *, /」を組み合わせて 10 になる式をつくることができるだろうか?

次のコードは、BASIC言語で書いた、あまりきれいではないけど、とりあえず Chipmunk Basicで動くプログラムである。

2 dim p$(4)
4 p$(1) = "+"
6 p$(2) = "-"
8 p$(3) = "*"
10 p$(4) = "/"
100 s = 0
102 input a,b,c,d
104 for i = 1 to 4
106  x = a
108  y = b
110  on i gosub 300,310,320,330
112  e = z
114  for j = 1 to 4
116   x = e
118   y = c
120   on j gosub 300,310,320,330
122   f = z
124   for k = 1 to 4
126    x = f
128    y = d
130    on k gosub 300,310,320,330
132    if z = 10 then gosub 400
134   next k
136  next j
138 next i
140 if s = 0 then print "Can't find!"
142 goto 100
300 z = x+y : return
310 z = x-y : return
320 z = x*y : return
330 z = x/y : return
400 s = s+1
402 print a;p$(i);b;p$(j);c;p$(k);d
404 return
406 end

メモ帳を起動させて、このコードをコピーし、メモ帳に貼り付けてみる。

このコードを、プログラム(アプリ)として動かすためには、ファイル名を付けてデスクトップに保存する必要がある。

そこで例えば、ファイル名を簡単な「a.bas」として保存する。

コマンドプロンプトからコードを実行するやり方

コンソール画面を開き(cmd.exe)、Chipmunk Basic を動かすやり方

  1. デスクトップでコマンドプロンプトを動かす。
  2. chipmunkbasicとタイプしてEnterキーを押す。

次のように Chipmunk Basic のコンソールが開く。

Annotation-2019-07-23-133313

> の右にBasicに対する命令をタイプする。

  1. ヘルプ

Annotation-2019-07-23-134812

  1. 計算と結果

? は、print と同じ、*はかけ算だが、けた数が大きいと怪しい結果になってしまうことがある。

Annotation-2019-07-23-135317

  1. プログラムファイル「a.bas」を Basic に読み込む。

load "a.bas"

  1. 実行

run

a.bas は、次のように「1 2 3 4」をひとつずつ入力する。

Annotation-2019-07-23-140314

結果は、

1 + 2 + 3 + 4
1 × 2 × 3 + 4

の2通りが出力された。

練習問題 その他の組み合わせを探してみよう。例:4468

練習問題 このコードはまったく不十分で、人間の能力よりも低い。計算に自信がある人は、8884 3379 4416 4478 1349 3569 などで試してみよう。

ヒント:
もう少し改良したコードで実験してみた結果を示す。

Annotation-2019-07-23-164727

この改良したコードでは、さきほどの結果に2つ追加され、合計4通りのパターンが出力された。

さて、その他の結果も示すと、次のようになった。明らかに間違った結果も出力されている。この間違いの原因がどこにあるかを探し、コードを修正しなければいけない。

Annotation-2019-07-23-164231

Annotation-2019-07-23-164307

Annotation-2019-07-23-164354

コードを改良しながら、実験してみると、加減乗除で10をつくる問題はかなり奥が深いことがわかってきた。あまり単純にコードを書いたのでは、行き詰まりギブアップしてしまう。ここでは、これ以上は深入りしないことにする。

ともかく人間の知能を上回るようなコードを書くことは、このような単純な10をつくるという問題でさえかなり困難であることを体験した。

実行を中断するには、Ctrl C。コントロールキーを押しながら C を押す。キャンセル。

  1. コードを確認するやり方

list

  1. 画面消去

cls

  1. 終了

exit

参考「Windowsのメモ帳を使ってキーボードからコンピュータの中へ入る!


花びらを数える

1,1,2,3,5,8,13,21,34,55 ...

この数列は、1番目の項が1、2番目の項が1と定義され、3番目以降は、前項と前々項の和となっている。

練習問題 (A)(B)の花びらに数列 1,1,2,3,5,8,13 ... ― の一部 ― を見つけることができるか。

(A)

Annotation-2019-07-23-125816-1

(B)

Annotation-2019-07-23-125702

練習問題 将来希望する年収が350万円くらいとすれば、それを超えるのは、この数列の何番目か?

フィボナッチ数列

dim f(30)
f(1)=1:f(2)=1
print 1,f(1):print 2,f(2)
for i=3 to 30
  f(i)=f(i-1)+f(i-2)
  print i,f(i)
next i
end

1から30番目までのフィボナッチ数列

Annotation-2019-07-23-142508


(参考リンク)

情報処理、情報リテラシーでの考え方

これらの問題を調べ、答えを考え出してください。来週をしめきりとします。

1 対 1 の対応

ある部屋におかれている椅子の数と、その部屋にいる人数を比べるには、椅子の数や人数を数える必要はなく、1つの椅子に一人ずつ腰掛てもらえばわかります。あまった椅子、あるいは人数を数えればいいというのが1対1対応の考え方です。

あらかじめ人数が分かっていれば、部屋にいくつ椅子があるのかも逆にわかります。

さて、問題です。

練習問題 その1

信長が家来たちに「この杉林に何本の杉があるか、しらべてまいれ!」と命令をくだしました。ところが家来たちは1本、2本と数えますがなかなかうまく最後までしらべることができませんでした。ところが藤吉郎、のちの秀吉は、うまい方法を考え出しました。信長は、これをたいそうほめたというエピソードがあったということです。さて、藤吉郎が考え出したアイデアは?」

簡略、図式化

練習問題 その2

にわか雨が降り出しました。かさを持っていないのですが、こんなとき君はどうしますか?人体を直方体と簡略化し、走る速度を変化させたとき直方体の前面にかかる雨水の量はどうなるか考えてみよう。

バイナリー、2分法

未知の世界 <------> 2値(バイナリー)の世界

「情報リテラシー」のテキストの中に印刷されているどれか一つの文字または記号(画像と図はのぞきます)を覚えてください。 あなたがどんな文字や記号を覚えようとも私が 20 回質問するだけで、それを当ててみせます。ただし、あなたはイエスかノーの返事をするだけでよいのです。

バイナリー法、2分法では、n 回の質問をするだけで、2n通りのうちのどれかであることを当てることが可能です。

練習問題 その3

さて、私はどのような質問をするとおもいますか?