投稿
ヨッシー okkun2002
何か、配列の中にない数字を見つけ出す関数や 方法はありませんか?
1そうだね
プレイ済み
返信[1]
親投稿
頭から順番にさがして、最後までみつからなかったら無いということにすればよいのでは
1そうだね
プレイ済み
返信[2]
親投稿
oo meidoin21
関数にするなら多分これでいい…と思う。 使い方は、DIMINSTR(配列名、探したい数値) 数値があれば1、なければ0を返す
1そうだね
プレイ済み
返信[3]
親投稿
ヨッシー okkun2002
>クッキー さん なるほど...なぜそれを... いや、ちょっと大きな配列だったんでループを沢山することをあまり考えなかったんです。
0そうだね
プレイ済み
返信[4]
親投稿
ヨッシー okkun2002
テレビ見ながら投稿してるので遅いです。 >oo さん おお、関数にもしていただいてありがとうございます。今から写してみます。
0そうだね
プレイ済み
返信[5]
親投稿
ヨッシー okkun2002
ooさんの関数を0になるまでループすることでやってみます。
0そうだね
プレイ済み
返信[6]
親投稿
ヨッシー okkun2002
っと思いきや、時間が掛かりすぎました...orz
0そうだね
プレイ済み
返信[7]
親投稿
検索に時間かかるくらいならソートも時間かかりますかね… 配列がソートされてれば2つに分けて検索したりとかできますけど FORは遅いのでUNTILで回してみると気持ち速くなるかもしれません。 あと、コピーせずにそのまま参照してみては?
1そうだね
プレイ済み
返信[8]
親投稿
クッキーさんの言うようにコピーの必要はないですよね。 あと見つけたらすぐにRETURNした方が早いと思います。
1そうだね
プレイ済み
返信[9]
親投稿
ヨッシー okkun2002
うーん、一生終わらない...(泣) 考えてみます。
0そうだね
プレイ済み
返信[10]
親投稿
クッキーさんが言われているようにソート済み配列であれば二分検索なども出来ますし、それ以外でも用途によっては工夫すれば別のやり方がある場合もありますから、具体的にどうしているとか言ってみるのもいいかもしれないですね
0そうだね
プレイ済み
返信[11]
親投稿
少し前の『0になるまでループする』というのがよくわかりませんが、「値が見つかったのに0になるまで繰り返してる」なら、ただの無限ループになってしまいますが、合ってます?
0そうだね
プレイ済み
返信[12]
親投稿
otta777 otta777a
配列変数の中に任意の数値が無いか調べる方法は 配列変数の中身を文字列変数に書き出してINSTR関数で 検索するって手もあるかな。 余り文字列が長くなると使えない方法ではありますけど、 複数の数字をチェックするには有利かもしれません。
0そうだね
プレイ済み
返信[13]
親投稿
otta777 otta777a
N$="":I=0 WHILE I<LEN(X) N$=N$+STR$(X(I))+",":I=I+1 WEND FLG1=INSTR(N$,"1") FLG2=INSTR(N$,"9") 数字が無いときは-1が返ってきます。
0そうだね
プレイ済み
返信[14]
親投稿
otta777 otta777a
> N$=N$+STR$(X(I))+",":I=I+1 N$=N$+STR$(X[I])+",":I=I+1 の間違いでした。
0そうだね
プレイ済み
返信[15]
親投稿
けん KenichiShindou
ひょっとして、配列の中に無い数を探すって言うこの質問は、こう言うこと? 配列に1,2,3と3つの数が入ってたら、4以上の数全て(0以下も?)が答えとして出てきて欲しいってこと?
0そうだね
プレイ済み
返信[16]
親投稿
けん KenichiShindou
皆、配列の中に探している数が有るか調べようとしていると思うのだけど・・・
0そうだね
プレイ済み
返信[17]
親投稿
配列検索するのそんなに遅かったっけ?って思って試したけど、65535個の配列で1フレームで帰って来ました(NEW3DS) どれだけ大きな配列なんだろ…
0そうだね
プレイ済み
返信[18]
親投稿
嘘です9フレームです><
0そうだね
プレイ済み
返信[19]
親投稿
けん KenichiShindou
9フレーム そんなもんでしょ 人間にとっては一瞬で終わります。 終わらないのは無限ループにでもなっているのでは・・・
0そうだね
プレイ済み
返信[20]
親投稿
ヨッシー okkun2002
でんペンさんの言う二分検索について後で調べてみますが、もしかしてSORTして急に飛んだらないってことかな?それならこんな感じかな?無駄ループとかありますが簡単に作ったので(^^;) otta777さんのも試してみます。 早さは、newじゃないのでもうちょっと遅いのですが少しで終わります。 ですが、けんさんの言う通りない数字のため、配列が厄介な配列で、関数をループすると長いです
0そうだね
プレイ済み
返信[21]
親投稿
けん KenichiShindou
配列の要素数どのくらい? クッキーさんの画面だと6万5000ちょいだったけど
0そうだね
プレイ済み
返信[22]
親投稿
ヨッシー okkun2002
うーん何だかいいのかわからないけど、頑張って終われるようになったのでいいかな?ゴメンナサイ ありがとうございました。
0そうだね
プレイ済み
返信[23]
親投稿
けん KenichiShindou
って、画面見てなかった 10・・・
0そうだね
プレイ済み
返信[24]
親投稿
MIKI ifconfig
こーたさんのバイナリサーチと KU さんのソート https://miiverse.nintendo.net/posts/AYIHAAAEAAArVRTpsfDIQw
0そうだね
プレイ済み
返信[25]
親投稿
ヨッシー okkun2002
画像のはテストです。 あと、無駄ループ本当にごめんなさい。15行ってか、DEFDIM2はすべて抜いてください。
0そうだね
プレイ済み
返信[26]
親投稿
けん KenichiShindou
要素数2桁なら、わざわざソートして二分探索しなくても、線形探索で充分ではないかと思う
0そうだね
プレイ済み
返信[27]
親投稿
なんか要件定義がハッキリしてないような感じですね…。 僕も勘違いしていましたが、要するに配列に数字がたくさん入っていて、その配列には含まれない数字を求めたいって感じですか? その場合、求める数字は含まれない中の最小の値ですか? あとは想定している配列の要素数ですが、10ですか…? 10ならすぐに求まりそうです…
0そうだね
プレイ済み
返信[28]
親投稿
ヨッシー okkun2002
そうです。配列に無いものを見つけるんです。最小でなくても良いですが。 配列要素数はクッキーさんのに近いぐらいですが、出来ればどんな配列もしたい気がします。 まぁ、もうこれでいいかなーって感じです。本当すみません。
0そうだね
プレイ済み
返信[29]
親投稿
てらこや actorbug
もう終わってる話題かもしれませんんが、 単純に MAX(配列名)+1 じゃ駄目ですかね。 途中の未使用の値が拾えませんけど。
0そうだね
プレイ済み
返信[30]
親投稿
てらこや actorbug
配列がソート済みで要素の重複がなければ、二分探索を応用して、こんな感じで未使用の値を拾えます。 (プログラム修正のため再投稿)
0そうだね
プレイ済み
返信[31]
親投稿
ヨッシー okkun2002
おお!わざわざありがとうございます。MAX関数は知ってたんですが忘れてました。 最小を求めてるなら考えますが、違うならこんな方法が… ありがとうございました。ナンカ スミマセン
0そうだね
プレイ済み