|
|
2015/7/12(Sun) 15:39:00|NO.70068
data="0,1,3,4,5,6,7,8,9,10,11,12,13"
だったとして、この中には2がかけています。
その2を出す方法ってありますか?
又、
data="0,1,3,5,6,8,9,10,12,13"
のように、2,7,11が抜けていたとしたら、2,7,11のどれかが出ればいいです。
もし
data="0,1,2,3,4,5,6,7,8,9,10,11,12,13"
のように抜けているものがなければ14を出してほしいです。
いろいろ多くてすいません。
回答お願いします!!
|
|
2015/7/12(Sun) 15:39:32|NO.70069
3つ目については、なくてもいいです。
|
|
2015/7/12(Sun) 15:50:02|NO.70070
splitで,で区切って配列にしてループを回すか、instrを使うかすればできます。
|
|
2015/7/12(Sun) 21:07:08|NO.70082
具体的にはどのようなプログラムを組めばよいでしょうか??
|
|
2015/7/12(Sun) 21:17:39|NO.70083
>SqOcさん
まず、自分で整理して考えてみてください。
ここは人に頼んでソースを作成してもらう場所ではありません。
次に、一度 F1キー を押して今回の疑問点に関係ありそうな、標準命令を調べてみてください。
関係ない命令でもいいです、今後やくに立つかもしれませんし、
なにかいい方法が見つかるかもしれません。
プログラミングは命令という要素をいくつも組み合わせて作成するので
その要素が多ければ多いほど今後役に立つと思います。
単一の命令だけで考えないで、よく使い方を調べていろいろ組み合わせてみてください。
具体的にどう使えばいいのかは、
HSPは親切なので、例ものってると思います。
今回はもう要素はでています。
split, 配列操作, repeat-loop, if を使えば出来ます。
また、 if, instr でもできます。
|
|
2015/7/12(Sun) 22:15:26|NO.70085
できました。命令のヒントありがとうございました!
確かに自分でやるときちんと理解しながらできるような気がします(気だけかもしれませんがw)
data="0,1,2,3,4,5,6,8,9,10"
repeat 11
if instr(data, , ""+cnt+"")>=0{
}else{
no=cnt
break
}
loop
mes ""+no+""
このようにしたのですが、
上のようにdataから7が抜けている場合はきちんと
7
と表示されるのですが、
data="0,2,3,4,5,6,7,8,9,10"
のように1が抜けていると、最後の10のなかに1があるので誤反応?してしまいます。
どうすればよいでしょうか?
お願いします!!
|
|
2015/7/12(Sun) 22:31:19|NO.70086
どうぞ
data="0,2,3,4,5,6,8,9,10" : dele=","
repeat 11
_str=""+cnt+","
if instr(data, , _str)>=0{
}else{
strrep _str,",",""
mes _str
}
loop
|
|
2015/7/12(Sun) 22:32:02|NO.70087
間違えました、
dele=","
は無しで大丈夫です
|
|
2015/7/12(Sun) 22:35:44|NO.70088
この
repeat 11
のところって、自動化できないでしょうか?
|
|
2015/7/12(Sun) 22:41:23|NO.70089
あと、なぜか10がないときに9と表示されてしまうのですが、、、
|
|
2015/7/12(Sun) 22:48:28|NO.70090
すいません。NO.70089は解決しました。
>repeat 11
>のところって、自動化できないでしょうか?
はまだ解決できていません
|
|
2015/7/12(Sun) 23:11:45|NO.70091
「なぜ繰り返しが11回なのか」を考えられれば自動化はできますよ。
|
|
2015/7/12(Sun) 23:34:18|NO.70093
splitを使った方が早いかと思って作ってみたけど、意外とめんどいことがわかった
data="0,1,2,3,6,7,8,10"
split data, ",", listB ; ","で分割
n = stat ;分割数
foreach listB
listA(cnt) = int(listB(cnt)) ;整数化
loop
if listA(n-1) = n-1 { ;欠けがない場合(最後の数が分割数-1と同じ)
mes n ;分割数を表示(0から欠けなく連番であれば分割数は必ず最後の数より1大きい)
} else { ;欠けがある場合
dim nowhere ;ないものリスト
i = 0 ;nowhereの添え字
repeat listA(n-1) ;1〜最後の数 分リピート
m = cnt ;調べる数
check = 1 ;チェック用 最初は1
foreach listA ;listAすべてに対しmがあるか検索する
if listA(cnt) = m { check = 0 : break} ;listA中にmがあればcheckを0にして検索終了
loop
if check = 1 { nowhere(i) = m : i++} ;checkが1ならlistA中にmはないのでnowhereにmを追加
loop
foreach nowhere
mes nowhere(cnt)
loop
}
|
|
2015/7/13(Mon) 01:03:53|NO.70096
data="1,2,3,4,5,6,7,8,9,10,"
のなかから、「,」の数を数えることってできますか?
|
|
2015/7/13(Mon) 09:15:28|NO.70100
>data="1,2,3,4,5,6,7,8,9,10,"
>のなかから、「,」の数を数えることってできますか?
ぱっと思いついたのは下の3パターンでした。
・strrepで置換し、置換回数を得る。
・instrを繰り返し、基点をずらしながら検索することで、","の個数をカウントする。
・splitで配列化し、配列の要素数から算出する。
|
|
2015/7/13(Mon) 16:50:15|NO.70104
data="0,1,2,3,4,5,6,7,8,9,"
split data, ",",aaa
repeat stat-1
_str=""+cnt+","
if instr(data, , _str)>=0{
realzero=0
}else{
realzero=1
strrep _str,",",""
no= _str
break
}
loop
if no=0&realzero=0:no=stat-1
mes ""+no+""
できました!!
一応スクリプトのせときます!
皆さんありがとうございました!!
完全に解決です!!!
"!!"使いすぎてすいません!!
|
|
2015/7/13(Mon) 18:13:23|NO.70107
解決したとのことで、自作のを載せておきます。
#module
#defcfunc 欠番検索 str _input
入力文字列=_input
入力配列=""
split 入力文字列,",",入力配列
foreach 入力配列
検索番号=""+cnt
foreach 入力配列
await 5 //値を上げすぎると遅くなる。
if 検索番号=入力配列(cnt){
検索番号=""
break
}
loop
if 検索番号!=""{
break
}
loop
if 検索番号=""{
return length(入力配列)
}else{
return 検索番号
}
#global
data="1,8,3,5,6,8,9,10,12,13,0"
mes "元データ:"+data+"\n"
repeat 10
欠番=欠番検索(data)
data+=","+欠番
mes "追加後:"+data
loop
stop
|
|