フリーソフトの小道   

コンピュータ・プログラマー養成講座(入門編)

第8回 「よそ者」くんのBASICプログラムを解説する @
〜プログラミング・コンテストとセンター試験対策〜

 プログラミングコンテスト第1回「素数発見」競技、第4回「文字列並べ替え」競技、 第5回「文字列置き換え」競技と、 N88BASIC互換インタープリタで次々とコンテストを制覇している 「よそ者」くん ですが、 プログラムそのものは短くて初心者でも作れるレベルですから、 目の付け所が良いだけ(言い過ぎ?)かもしれません。 それが事実だとしても、他の人に先んじてプログラムを完成させたのですから、 コンテスト「第1位」にはまちがいないのです。

 では、「よそ者」くん のプログラムを詳細に見て、研究してみることにします。 最初は、第4回「文字列並べ替え」競技の「文字列逆転」部門をとりあげてみまそう。

100 PRINT "文字列の逆順並べ替えるプログラム BY よそ者"
110 INPUT "文字を入れてください(終了はリターンのみ)"; A$
120 IF A$="" THEN GOTO 200
130 B$=""
140 FOR I=1 TO KLEN(A$)
150   B$=B$+KMID$(A$,KLEN(A$)-I+1,1)
160 NEXT I
170 PRINT A$;" -> "; B$
180 GOTO 100
200 END

 行番号100は、「文字列の逆順並べ替えるプログラム BY よそ者」を画面に表示する部分、  行番号110は、処理したい文字列の入力を受け付ける部分で説明の必要はないでしょう。  行番号120は、入力文字列が「何もなし(改行のみ)」のとき、処理を終わり、 入力文字列があれば処理をする。繰り返しを判断する部分である。ここまでは、本論(並べ変え)ではない。
 行番号130は、処理済みの文字列(答え)をクリアしているだけ。
 行番号140の KLEN(A$) は漢字を含めた文字列の文字数を調べる関数[注1] KLEN で入力された文字列の長さを求める。

[注1] LEN()は英数字文字列の長さ(文字数)を返す関数であり、 それを漢字に拡張した関数が KLEN である。KLEN("あいうえおabcd") は 9 を返す。 なお、LEN("あいうえおabcd") は 14 を返す。

 FOR ・・・ NEXT は文字列の1文字目から最後の文字まで繰り返す部分である。 この繰り返し文はプログラムで頻繁に使われる代表的な構文であり、BASICに限らずどのプログラミング言語にもある。
 このプログラムの中心部分は行番号150に尽き、ここで使われている KMID$ という関数[注2] にある。 元々の MID$ という関数は英数字を扱うもので、文字列の途中の文字列を抜き出すという文字通りの関数である。

[注2] MID$("ABCDEFGHIJKLMN",3,5) は 文字列の3番目から5文字取り出すというもので "CDEFG" が返される。 同様に、KMID$("あいうえおabcd",4,3) では "えおa" の文字列が返される。

 上に示した英数字の文字列操作の関数を漢字に拡張したものが KMID$ であるので、行番号150 の理解は簡単だ。 FOR NEXT 文の最初は I=1 で、I は1ずつ増加しながら文字列の長さまで繰り返す。

文字列が A$="ABCDEF" としよう。LEN(A$) は 6 である。FOR NEXT 文の繰り返しは I が 1 から 6 まで繰り返す。
最初は I=1 だから、KMID$(A$,KLEN(A$)-I+1,1) は A$ の 6番目から 1 文字取り出すのだから、"F" が返される。 B$ は何もないので、B$=B$+"F" だから、B$="F" になる。
次に I=2 だから、KMID$(A$,KLEN(A$)-I+1,1) は A$ の 5番目から 1 文字取り出すのだから、"E" が返される。 B$ は "F" であるので、B$="F"+"E" だから、B$="FE" になる。
次に I=3 だから、KMID$(A$,KLEN(A$)-I+1,1) は A$ の 4番目から 1 文字取り出すのだから、"D" が返される。 B$ は "FE" であるので、B$="FE"+"D" だから、B$="FED" になる。
次に I=4 だから、KMID$(A$,KLEN(A$)-I+1,1) は A$ の 3番目から 1 文字取り出すのだから、"C" が返される。 B$ は "FED" であるので、B$="FED"+"C" だから、B$="FEDC" になる。
次に I=5 だから、KMID$(A$,KLEN(A$)-I+1,1) は A$ の 2番目から 1 文字取り出すのだから、"B" が返される。 B$ は "FEDC" であるので、B$="FEDC"+"B" だから、B$="FEDCB" になる。
次に I=6 だから、KMID$(A$,KLEN(A$)-I+1,1) は A$ の 1番目から 1 文字取り出すのだから、"A" が返される。 B$ は "FEDCB" であるので、B$="FEDCB"+"A" だから、B$="FEDCBA" になる。

 以上で、見事に文字列の順番が逆転したことになります。後は、結果を画面に表示するだけです。

2004/02/24  管理人(志)


感想・意見は、掲示板、または メールでどうぞ! --- 管理人(志)