新しく発言する EXIT インデックスへ
辞書式配列?について

  辞書式配列?について Urabutyou 2007/01/08 21:35:18 
  こういうことでしょうか。 荒田浩二 2007/01/08 23:16:03 
   └作っていただいてありがとうございます。で... Urabutyou 2007/01/08 23:39:16 
    ├これではいかがでしょうか。 荒田浩二 2007/01/09 00:47:36 
    │└ありがとうございます。これでやってみよう... Urabutyou 2007/01/09 01:29:02 
    ├!この2進・カウンターを調べる。 SECOND 2007/01/09 03:09:05 
    └前スレの問題(1)の派生ですが、これはどうで... 山中和義 2007/01/09 11:25:00 

  辞書式配列?について Urabutyou 2007/01/08 21:35:18  ツリーへ

辞書式配列?について 返事を書く
Urabutyou 2007/01/08 21:35:18
どうも。早速ですが、タイトルがうまく付けられなかったので説明します。ある数(例えば9)とします。その数分の1と2の列(11111111)というものをつくり、かつ、その数ひとつひとつをある箱に代入する(つまり、「111」ならa=1,b=1,c=1と・・・)ということをしたいです。さらに、1と2の列は「11111・・・」から「22222・・・」までのものまでしたいんです。困ったことに、ある数(上では9)は決まっていません。こういうことはできるのでしょうか。

  こういうことでしょうか。 荒田浩二 2007/01/08 23:16:03  ツリーへ

Re: 辞書式配列?について 返事を書く
荒田浩二 2007/01/08 23:16:03
こういうことでしょうか。
それとも、数字の個数は他の方法で得るのでしょうか。(例えば、先に"11111"と入力するのでしょうか?)

INPUT n ! 数字の個数
DIM box1(n),box2(n)
MAT box1=1*CON ! 配列の全要素に1を代入
MAT box2=2*CON ! 配列の全要素に2を代入
MAT PRINT box1 ! 配列の全要素を出力
MAT PRINT box2
FOR i=1 TO n
LET a1=a1+1*10^(i-1)
LET a2=a2+2*10^(i-1)
NEXT i
PRINT a1
PRINT a2
END


   └作っていただいてありがとうございます。で... Urabutyou 2007/01/08 23:39:16  ツリーへ

Re: こういうことでしょうか。 返事を書く
Urabutyou 2007/01/08 23:39:16
作っていただいてありがとうございます。でも、ちょっと違うんですね。数字の数が3つとしたら、「111,112,121,122,211,212,221,222」というものをつくり、それを「111」ならその数字の順通りに数値を「abc」に代入するというものなんですが・・・(「111」の場合だとa=1,b=1,c=1。「121」の場合だとa=1,b=2,c=1、という風に)。
数がきまっていたら下のようにできるのですけどその数が決まってないのでそこがよく分かりません。

数が決まっているとき。(例えば3つのとき)
for a=1 to 2
for b=1 to 2
for c=1 to 2
print a,b,c
next c
next b
next a
end

    ├これではいかがでしょうか。 荒田浩二 2007/01/09 00:47:36  ツリーへ

Re: 作っていただいてありがとうございます。で... 返事を書く
荒田浩二 2007/01/09 00:47:36
これではいかがでしょうか。
標準モードで n=15 まで可能です。

INPUT n ! 数字の個数
DIM box(n)
FOR i=1 TO n
LET a1=a1+1*10^(i-1)
NEXT i
FOR i=0 TO 2^n-1
LET m=bin(i)+a1
PRINT m
FOR j=1 TO n
LET ms$=STR$(m)
LET box(j)=VAL(ms$(j:j))
PRINT box(j);
NEXT j
PRINT
NEXT i
FUNCTION bin(k) ! 2進法に変換
LET a$=""
DO
LET q=INT(k/2)
LET r=MOD(k,2)
LET a$=STR$(r)&a$
LET k=q
LOOP UNTIL q=0
!PRINT a$
LET bin=VAL(a$)
END FUNCTION
END

    │└ありがとうございます。これでやってみよう... Urabutyou 2007/01/09 01:29:02  ツリーへ

Re: これではいかがでしょうか。 返事を書く
Urabutyou 2007/01/09 01:29:02
ありがとうございます。これでやってみようと思います。

    ├!この2進・カウンターを調べる。 SECOND 2007/01/09 03:09:05  ツリーへ

Re: 作っていただいてありがとうございます。で... 返事を書く
SECOND 2007/01/09 03:09:05
!この 2進・カウンターを調べる。

LET bits=3 ! 1〜49 まで

FOR i=0 TO 2^bits -1
LET B$=right$( REPEAT$("0",bits)&BSTR$(i,2), bits )
FOR j=1 TO bits
PRINT VAL( B$(j:j) )+1; ! +1 を取れば通常の2進数。
NEXT j
PRINT
NEXT i
END

    └前スレの問題(1)の派生ですが、これはどうで... 山中和義 2007/01/09 11:25:00  ツリーへ

Re: 作っていただいてありがとうございます。で... 返事を書く
山中和義 2007/01/09 11:25:00
前スレの問題(1)の派生ですが、これはどうでしょうか?


DECLARE EXTERNAL SUB a.generator

PRINT " 1 2 3 4 5 6 桁目"
CALL generator(3,3,2) !3桁の数、各桁0〜1 ※2進数
PRINT
!CALL generator(2,3,10) !2桁以上の数、各桁0〜9 ※10進数
!PRINT
CALL generator(1,2,26) !A〜Z,AA〜AZ,BA〜BZ,・・・,ZA〜ZZ ※26進数

END


MODULE a
SHARE NUMERIC stk(0 TO 100) !スタック
SHARE NUMERIC p !スタックポインタ
LET p=0

PUBLIC SUB generator !辞書式に数値/文字コードを発生させる
EXTERNAL SUB generator(m,n,c) !m〜n:桁数、c:数値/文字コードの範囲(0〜c-1)
IF n>0 THEN
FOR i=0 TO c-1 !取り得る範囲をすべて
LET p=p+1 !push
LET stk(p)=i !この桁を記録する

!----- ↓↓↓ ----- ここに本処理を入れる
IF p>=m THEN !全桁揃って処理するなら
!FOR k=1 TO p !全桁を表示する
FOR k=p TO 1 STEP -1 !全桁を表示する
PRINT stk(k);
NEXT k
PRINT
END IF
!----- ↑↑↑ -----

CALL generator(m,n-1,c) !次の桁へ
LET p=p-1 !pop
NEXT i
END IF
END SUB

END MODULE


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。