HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0712
SqOc文字列にない数字16解決


SqOc

リンク

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を出してほしいです。

いろいろ多くてすいません。
回答お願いします!!



この記事に返信する


SqOc

リンク

2015/7/12(Sun) 15:39:32|NO.70069

3つ目については、なくてもいいです。



kanamaru

リンク

2015/7/12(Sun) 15:50:02|NO.70070

splitで,で区切って配列にしてループを回すか、instrを使うかすればできます。



SqOc

リンク

2015/7/12(Sun) 21:07:08|NO.70082

具体的にはどのようなプログラムを組めばよいでしょうか??



Humi/BassClef

リンク

2015/7/12(Sun) 21:17:39|NO.70083

>SqOcさん
まず、自分で整理して考えてみてください。
ここは人に頼んでソースを作成してもらう場所ではありません。

次に、一度 F1キー を押して今回の疑問点に関係ありそうな、標準命令を調べてみてください。
関係ない命令でもいいです、今後やくに立つかもしれませんし、
なにかいい方法が見つかるかもしれません。

プログラミングは命令という要素をいくつも組み合わせて作成するので
その要素が多ければ多いほど今後役に立つと思います。

単一の命令だけで考えないで、よく使い方を調べていろいろ組み合わせてみてください。
具体的にどう使えばいいのかは、
HSPは親切なので、例ものってると思います。

今回はもう要素はでています。
split, 配列操作, repeat-loop, if を使えば出来ます。
また、 if, instr でもできます。



SqOc

リンク

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=","

は無しで大丈夫です



SqOc

リンク

2015/7/12(Sun) 22:35:44|NO.70088

この

repeat 11
のところって、自動化できないでしょうか?



SqOc

リンク

2015/7/12(Sun) 22:41:23|NO.70089

あと、なぜか10がないときに9と表示されてしまうのですが、、、



SqOc

リンク

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 }



SqOc

リンク

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で配列化し、配列の要素数から算出する。



SqOc

リンク

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



ONION software Copyright 1997-2023(c) All rights reserved.