|
|
2015/7/7(Tue) 18:05:51|NO.69984
cntは1,2,3,4....
って返してくるのですが、
a,b,c,d,e,f,g.......
って返してくれる方法って何か単純なのでありますか?
あったら教えてください!!
おねがいします!!
|
|
2015/7/7(Tue) 18:33:52|NO.69985
cntが25を超えると正しく動作しません。
//ここから本体
#module "mod_cnt"
#define global _cnt __cnt@mod_cnt()
#defcfunc local __cnt
a = ""
poke a, 0, 'a' + cnt
return a
#global
//ここまで
//サンプル
repeat
color 255, 255, 255 : boxf
pos 0, 0 : color
mes cnt
mes _cnt
wait 10
loop
|
|
2015/7/7(Tue) 19:11:29|NO.69986
26文字しかアルファベットはないので25を超えるとダメですね。
いっそのことアルファベットのみ使った26進法を定義するというのはどうでしょう?
27はA0にするということです。
|
|
2015/7/7(Tue) 19:12:50|NO.69987
間違えた。
アルファベットのみ使うんだから
27はAAかな?
|
|
2015/7/7(Tue) 20:25:39|NO.69988
さらに違った。
27はABだった。
|
|
2015/7/8(Wed) 01:26:04|NO.69989
こんな感じで a 〜 z を循環させておけば
難しいこと考えなくて良さそうですけどどうでしょう。
#define cnt_ab strf("%%c", 'a' + cnt \ 26) ; strf は遅いかも
font MSGOTHIC, 17 ; 文字の大きさ調節
repeat 28
mes cnt_ab ; アルファベット
loop
|
|
2015/7/8(Wed) 01:36:12|NO.69990
こう?
#module
#defcfunc ALPABET int p_N
a_LIST = "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"
A = p_N
repeat -1
i++
if A < 26 : break
A /= 26
loop
A = p_N
s = ""
repeat i
i--
B = 1
repeat i
B *= 26
loop
C = A / B
if i > 0 : c--
s += a_LIST(C)
A \= B
loop
return s
#global
repeat
color 255, 255, 255 : boxf
pos 0, 0 : color
mes cnt
mes ALPABET(cnt)
wait 500
loop
|
|
2015/7/10(Fri) 14:53:23|NO.70016
?解決してないのですかな?
一応昔自分が作ったn進数変換モジュールを載せときます。
n進数変換なので桁上がりもできてます
#module
// n進数交互変換
#deffunc setBaseTable str wordtable_
table_ = wordtable_
return
#defcfunc nBase int prm_, int base_, int negative_
dst_ = prm_ :rem_ = 0
sdim buf_, 128
repeat
if (dst_ == 0) :break
rem_ = dst_ \ base_
if (rem_ >= 128) :break
buf_ = strmid(table_, abs(rem_) ,1) + buf_
dst_ = dst_ / base_
loop
if buf_ == "" :return strmid(table_, 0, 1)
if negative_ :if prm_ < 0 :return strmid(table_, strlen(table_)-1, 1)+buf_
return buf_
#defcfunc nBase_ str string, int base, int negative_
buf = string
len = strlen(buf)
if negative_ {
if peek(buf, 0) == peek(table_, strlen(table_)-1) {
m = -1.0
len--
buf = strmid(buf, 1, len)
}else :m = 1.0
}
dst = 0.0
i = len-1
repeat len
n = instr(table_, 0, strmid(buf, cnt, 1))
if n == -1 :dst = -1 :break
dst += n*powf(base, i)
i--
loop
if negative_ :return dst*m
return dst
#global
setBaseTable "abcdefghijklmnopqrstuvwxyz"
font msgothic, 10
repeat 36
mes ""+cnt+":"+nBase(cnt, 26)
loop
a の次桁が ba なのは a が0扱いなので 0,1,2,3... の桁上がりが 1 なのと一緒です
setBaseTableの文字列を変えると好きな文字で数字を扱えます。
一応交互変換できます。暗号化にも使えますかな。

| |
|
2015/7/11(Sat) 00:58:38|NO.70031
皆さんこんなにたくさんの方法ありがとうございました!!
きちんとプログラム内に組み込むこともできました!!
|
|