No.75-2 |
アルファベットを昇順で並べたい |
回答者 入川 精二 |
1998年05月 196号 P.17 |
◆ No.75(1998年 4月号)の回答-2
“数字+アルファベット”の全組合せの表を作るのは日付に曜日をつけるより簡単ですね。何故なら、A,B,C,・・・ はASCIIコードの 65,66,67,・・・ に対応しているからです。まずは作り方を。
左側の数字と右側のアルファベットは別のルールで並んでいますから、最初は別の列で作って後から合体します。
まず左の数字ですが、'0'を26コ、次に'1'を26コ・・・・という数列を得るには、0〜259 の数字を「小数以下切捨て」で26で割ります。
0,1,2,3・・・それぞれのグループのグループ内番号をつけます。
NUM;M;C;2;H;65;1/90/C;
これは、2列目にH行から初期値65・ステップ1・最大値90・繰り返しnbsp; という設定のナンバリングです。便利ですねぇ
後は 65,66,67,・・・ を A,B,C,・・・ に変換するだけです。これは関数'CHR$'を使います。
LET V1=CHR$(65);
V1 には A が格納されます。65 の部分はX変数を使います。
以上のプロセスをプログラムにすると次のようになります。
1 <ABC>
2 SET;S;M;1;36;;Y; /* 桁数を36に設定 */
3 O;ABC;3*2;N;A;ESC; /* 3桁2列の表を作る */
4 SET;S;M;1;180;;Y; /* 桁数設定を元に戻しておく */
5 IR;S;H;260; /* 260行挿入 */
6 NUM;M;C;1;H;0;1; /* 1列目:0〜259の数列を書込む */
7 CAL;DF0;C1/26=C1; /* 1列目:「小数以下切捨」で26で割る */
8 NUM;M;C;2;H;65;1/90/C; /* 2列目:65〜90の数列を繰返書込 */
9 FOR X1=H TO T;
10 LET [X1,2]=CHR$(IVAL([X1,2])); /* 2列目:キャラクターコードから文字に変換 */ 11 NEXT;
12 NF;J;1,2; /* 1,2列を合体 */ 13 CJ;D;A;1;
/* スペース削除 */ 14 STOP;
もし ABC・・・ でなく abc・・・ にしたいときはCJ;
C;S;A;1; とすると、ローマ字部分を小文字に変換できます。
□
|
|