回答箱 No.75-2: アルファベットを昇順で並べたい

  ◆ 質問箱 No.75  質問者:  罍 昭夫   1998年-04月 195号 P.19
      ◆  質問箱 目次へ
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; とすると、ローマ字部分を小文字に変換できます。                                             □
戻る