SRC質問掲示板Mk2
(現在 過去ログ111 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■19855 / inTopicNo.1)  完全に均等な分岐を複数作る
  
□投稿者/ 匿名希望 -(2007/04/16(Mon) 10:10:40) [ID:2eMbhZ9o]
    ↓ここから

    If InStr(読み出しバケラッタ[後部番号,読み出し],ビンズヴァンカー) <> 0 Then
    Print バケラッタサンライズ英雄譚ファイル "$(読み出しバケラッタ[後部番号,読み出し])"
    EndIf
    If InStr(読み出しバケラッタ[後部番号,読み出し],ビンズヴァンカー) <> 0 Then
    Print バケラッタサンライズ英雄譚ファイル "$(読み出しバケラッタ[後部番号,読み出し])"
    EndIf
    If InStr(読み出しバケラッタ[後部番号,読み出し],ビンズヴァンカー) <> 0 Then
    Print バケラッタサンライズ英雄譚ファイル "$(読み出しバケラッタ[後部番号,読み出し])"
    EndIf

    ↑ここまで(並べると処理が非常に重くなる)

    ↓ここから

    If InStr(読み出しバケラッタ[後部番号,読み出し],ビンズヴァンカー) <> 0 Then
    Print バケラッタサンライズ英雄譚ファイル "$(読み出しバケラッタ[後部番号,読み出し])"
    ElseIf InStr(読み出しバケラッタ[後部番号,読み出し],ビンズヴァンカー) <> 0 Then
    Print バケラッタサンライズ英雄譚ファイル "$(読み出しバケラッタ[後部番号,読み出し])"
    ElseIf InStr(読み出しバケラッタ[後部番号,読み出し],ビンズヴァンカー) <> 0 Then
    Print バケラッタサンライズ英雄譚ファイル "$(読み出しバケラッタ[後部番号,読み出し])"
    Else
    Print バケラッタサンライズ英雄譚ファイル "$(読み出しバケラッタ[後部番号,読み出し])"
    EndIf

    ↑ここまで(優先順位が生じる)

    タイトルの通りなのですが、どうにも私には思いつきません。
    If文を用いる方法は上記の二つしかないと思うのですが、
    条件を増やした時に双方とも欠点があります。

    もしいい方法があれば教えてください。お願いします。
引用返信/返信 削除キー/
■19856 / inTopicNo.2)  Re[1]: 完全に均等な分岐を複数作る
□投稿者/ 中箱 -(2007/04/16(Mon) 14:00:43) [ID:8NrUE61r]
    どうもお久しぶりです、中箱です。


    ええと、レスしておいてなんですが、
    匿名希望さんが想定されている状況と、例示されているものが何を意味しているのかを解釈しかねています。


    提示されているIf分岐に用いられる条件式がすべて同じなので、素直に読んでしまうとそもそもIf分岐する意味がわからなくなります。

    そこで、If分岐させるのだから、毎回全く同じ条件式というわけでは無い、と考えても、
    条件式のどれを変化させるのかが判別できないので、何をやろうとしているのか、はやはり見えません。

    ElseIfを使う方で言えば、
    > If InStr(読み出しバケラッタ[後部番号,読み出し],ビンズヴァンカー) <> 0 Then
    と、そのすぐ下の
    > ElseIf InStr(読み出しバケラッタ[後部番号,読み出し],ビンズヴァンカー) <> 0 Then
    とでは、どこが違うのかが分からない、ということですね。

    具体的には、配列の引数である[後部番号,読み出し] なのか、"ピンズヴァンカー" が変わるのか。



    とりあえず、本来は条件式も変化する、という解釈で続けます。
    (上の解釈が合っているなら、条件式のどの要素が変化するのか書いてくだされば、また別のレスが出来るかもしれません)


    その場合、
    「処理が重い」を欠点に挙げられた、

    [※A]
     if 条件1 then
      分岐後処理1
     endif
     if 条件2 then
      分岐後処理2
     endif
     if 条件3 then
      分岐後処理3
     endif
     if …
     …

    のようなやり方にも、処理速度以外の問題があるように思います。


    1:
    もしも「条件1,2,3…のうち、満たされるのは必ず一つ以下」であるなら

    [※B]
     if 条件1 then
      分岐後処理1
     elseif 条件2 then
      分岐後処理2
     elseif 条件3 then
      分岐後処理3
     endif

    と書き換えて問題ないでしょう。
    結果は※Aも※Bも変わりませんし、もちろん優先順位を考慮する必要はありません。
    処理速度も早くなると思いますし。


    けれど、

    2:
    もしも「条件1,2,3…のうち、二つ以上同時に満たされる可能性が少しでもある」なら
    ※Aと、※B では全く違う結果になります。


    例えば、条件2,3が満たされる場合を考えると、

     ※Aの場合は
     「分岐後処理2」 の後、 「分岐後処理3」 も実行される。

     ※Bの場合は
     「分岐後処理2」 が必ず優先されて実行され、「分儀後処理3」が実行されることは無い。

    つまり、※Aの場合、「分岐後処理」が複数実行されてしまいます。
    そして、分岐後処理が複数実行されても良いのであっても、実行する順番の優先順位は決まっています。

    したがって、※A方式であっても「均等な分岐」にはならないように思うわけです。


    私の解釈が合っているなら、
    「均等な分岐」にするためには、
     "複数の条件が満たされる場合は、そのうちのどれか一つをランダムに選んで処理を行う"
    という処理が必要だと考えますが、いかがでしょうか。



    正直、想定されている状況ややりたいことがイマイチ良く見えません。もう少し説明を詳しくお願いできませんでしょうか。

    もちろん、こちらの説明で分かり辛い点がありましたら指摘していただければ。


    では。
引用返信/返信 削除キー/
■19857 / inTopicNo.3)  Re[2]: 完全に均等な分岐を複数作る
□投稿者/ 匿名希望 -(2007/04/16(Mon) 19:41:23) [ID:2eMbhZ9o]
    ↓ここから

    If InStr(読み出しバケラッタ[後部番号,読み出し],狼) <> 0 Then
     Print バケラッタ動物ファイル "$(読み出しバケラッタ[後部番号,読み出し])"
    EndIf
    If InStr(読み出しバケラッタ[後部番号,読み出し],タバコを吸った犬) <> 0 Then
     Print バケラッタ動物ファイル "$(読み出しバケラッタ[後部番号,読み出し])"
    EndIf
    If InStr(読み出しバケラッタ[後部番号,読み出し],タコラヅカ) <> 0 Then
     Print バケラッタモンスターファームファイル "$(読み出しバケラッタ[後部番号,読み出し])"
    EndIf
    If InStr(読み出しバケラッタ[後部番号,読み出し],クチビリーヌ) <> 0 Then
     Print バケラッタモンスターファームファイル "$(読み出しバケラッタ[後部番号,読み出し])"
    EndIf
    If InStr(読み出しバケラッタ[後部番号,読み出し],メカクローン) <> 0 Then
     Print バケラッタバイオマンファイル "$(読み出しバケラッタ[後部番号,読み出し])"
    EndIf

    ↑ここまで

    ↓ここから

    If InStr(読み出しバケラッタ[後部番号,読み出し],狼) <> 0 Then
     Print バケラッタ動物ファイル "$(読み出しバケラッタ[後部番号,読み出し])"
    ElseIf InStr(読み出しバケラッタ[後部番号,読み出し],タバコを吸った犬) <> 0 Then
     Print バケラッタ動物ファイル "$(読み出しバケラッタ[後部番号,読み出し])"
    ElseIf InStr(読み出しバケラッタ[後部番号,読み出し],タコラヅカ) <> 0 Then
     Print バケラッタモンスターファームファイル "$(読み出しバケラッタ[後部番号,読み出し])"
    ElseIf InStr(読み出しバケラッタ[後部番号,読み出し],クチビリーヌ) <> 0 Then
     Print バケラッタモンスターファームファイル "$(読み出しバケラッタ[後部番号,読み出し])"
    ElseIf InStr(読み出しバケラッタ[後部番号,読み出し],メカクローン) <> 0 Then
     Print バケラッタバイオマンファイル "$(読み出しバケラッタ[後部番号,読み出し])"
    EndIf

    ↑ここまで

    これでやりたいことはわかるでしょうか。
    アトランダムに算出されたバケラッタにはこれらの文字列が入る可能性があります。
    そういう設定をしています。
    それでそれらの文字列が入ったバケラッタを条件付で種類別に分けたいのです。

    上の処理では「狼」と「タコラヅカ」が同時に入っていても規定のファイルに処理されますが、
    条件を増やすと処理が重くなります。

    下の処理では「狼」と「タコラヅカ」が同時に入っている場合、
    「タコラヅカ」の該当するファイルハンドル「モンスターファームファイル」には、
    「狼」が入っていない場合にのみ、入り、「狼」が入っている時には入りません。

    これをどうにかしたいのですが、なんとかならないでしょうか。
引用返信/返信 削除キー/
■19858 / inTopicNo.4)  Re[3]: 完全に均等な分岐を複数作る
□投稿者/ 中箱 -(2007/04/16(Mon) 21:16:10) [ID:8NrUE61r]
    >これでやりたいことはわかるでしょうか。
    例だけを書き換えられても、やりたいことの説明が不十分なままではなかなか把握が難しいのですが、
    ・・まあある程度は分かったと思います。



    配列要素 "読み出しバケラッタ[後部番号,読み出し]" に、
    例えば「狼」と「タコラヅカ」が同時に入っている場合は
     ・バケ〜動物ファイル
     ・バケ〜モンスターファームファイル
    の 両方のファイル に "読み出しバケラッタ[後部番号,読み出し]" を記録したいということでよろしいでしょうか?



    情報不足で確信が持てないのですが、
    「狼」と「タバコを吸った犬」が同時に入っている場合 はどうなるのでしょう?
    匿名希望さんが挙げられたものの前者の、一つずつIf〜EndIfをやっていく方法だと、バケ〜動物ファイル に2回記録されるわけですが。

    2回記録されなければ困るのであれば、前者の方法を取る以外には無いと思います。


    けれども、同じファイルへの記録は一度で良いのであれば、
    記録するファイルの種類ごとにIf〜EndIfで括ってみてはどうでしょうか。


    例えば、

    「"狼" "タバコを吸った犬" "背筋の伸びたぬこ" はバケ動物ファイルに、
     "タコラヅカ" "クチビリーヌ" はバケモンスターファームファイルに入れる」

    のであれば、

    #=====
     If InStr(読み出しバケラッタ[後部番号,読み出し],狼) <> 0 Then
      Print バケ動物ファイル "$(読み出しバケラッタ[後部番号,読み出し])"
     ElseIf InStr(読み出しバケラッタ[後部番号,読み出し],タバコを吸った犬) <> 0 Then
      Print バケ動物ファイル "$(読み出しバケラッタ[後部番号,読み出し])"
     ElseIf InStr(読み出しバケラッタ[後部番号,読み出し],背筋の伸びたぬこ) <> 0 Then
      Print バケ動物ファイル "$(読み出しバケラッタ[後部番号,読み出し])"
    #*1*
     EndIf

     If InStr(読み出しバケラッタ[後部番号,読み出し],タコラヅカ) <> 0 Then
      Print バケモンスターファームファイル "$(読み出しバケラッタ[後部番号,読み出し])"
     ElseIf InStr(読み出しバケラッタ[後部番号,読み出し],クチビリーヌ) <> 0 Then
      Print バケモンスターファームファイル "$(読み出しバケラッタ[後部番号,読み出し])"
    #*2*
     EndIf
    #=====

    のようにすると言うことです。

    もちろん、バケ動物ファイルに分類する為の文字列を増やすのであれば、
    *1* の所に新たな ElseIf〜Then を追加していく必要がありますが。
    バケモンスターファームファイルに分類するならば*2* に、と。


    これならば、
    分類先となるファイルの種類だけIf〜EndIfを使えばよくなるので、
    分類に用いる為の文字列の数だけIf〜EndIfを繰り返すよりは、処理はだいぶ軽減されるかと。

    もちろん、全部一つのIf〜EndIfに入れてしまう後者(私の前回レスで言えば※B)の方法よりも速度は落ちますが、正確に処理できなければ無意味ですし。





    なお、「複数のファイルに入る可能性があっても、どれか一つのファイルにだけ記録される」処理を求めている場合、

    つまり例えば、
     「狼」と「タコラヅカ」と「メカクローン」が同時に入っている時は、
     「バケ〜動物ファイルに入る」or「バケ〜モンスターファームファイルに入る」or「バケ〜バイオマンファイルに入る」

    という動作を求められているなら話は別になりますが、
    説明を見る限りではこの可能性は低いように思いましたので、必要であれば書くということで。



    まだそちらの実現したい動作が把握し切れていませんので、
    確かな内容のレスが出来ていないかもしれませんが、以上です

    では。
引用返信/返信 削除キー/
■19859 / inTopicNo.5)  Re[4]: 完全に均等な分岐を複数作る
□投稿者/ 匿名希望 -(2007/04/17(Tue) 04:50:16) [ID:2eMbhZ9o]
    処理速度は改善されませんでした。結果はボロボロです。
    もう一度にやるのはあきらめます。

    もしかしてこれはソースコードを弄ることでなんとかなる問題なのでしょうか。
    こちらも一応テキストエディタがあるので、なんとかできます。

    それとも内部操作系でこちらからではどうにもできない問題なのでしょうか。

    もしこちらからなんとかできる問題なのであれば、対処します。

    単純な処理なのになぜこんなにかかるのかが疑問です。
    ファイルに書き込むタイプのコマンドだからというだけなのでしょうか。
引用返信/返信 削除キー/
■19860 / inTopicNo.6)  Re[5]: 完全に均等な分岐を複数作る
□投稿者/ 中箱 -(2007/04/17(Tue) 12:03:04) [ID:8NrUE61r]
    >処理速度は改善されませんでした。結果はボロボロです。

    元々いくつの条件でいくつのファイルに分けようとしていたのか、や
    それを実際どのように変更した結果なのか、などが全く分からないので残念ながら、
    そうですか。
    以上はなんとも。

    結局、前のレスでの私の解釈で合っていたのかどうかすら私には分からないままですし。
    諦めるという結論が出ているのであれば、私が具体的にレス出来る事はなさそうですし。



    ソースコード云々についても分かりかねますので、レスはいたしません。

    なにせ、内部操作系とソースコード、どう違うのかピンと来ない程度の知識ですので。



    ただとりあえず、
    >ファイルに書き込むタイプのコマンドだからというだけなのでしょうか。
    と言うぐらいならば、試しに
     ファイルではなく画面に書き込むようにした場合どうなるか
     他のコマンドならどうなるか
    あたりさえ試せば、容易に結論は出ると思いますが?


    ・・・以前にも似たような事を書いた覚えがありますけれど、
    他人に言う前に、自分で試した方が遥かに早い事は多々ありますよ、と今一度。



    頑張ってください。
    では



    PS.
    何度もこの掲示板を利用しているのですから、そろそろ一つ自分だけのHNを作られた方がよろしいかと。

    そりゃまあ、匿名禁止、とされている掲示板ではありませんし、
    IDを見れば「前の人だ」ということは分かるので誰か分からなくて困るというわけではありませんが。
引用返信/返信 削除キー/
■19869 / inTopicNo.7)  Re[6]: 完全に均等な分岐を複数作る
□投稿者/ 匿名希望 -(2007/04/18(Wed) 23:49:43) [ID:2eMbhZ9o]
    2007/04/18(Wed) 23:50:10 編集(投稿者)

    すみません。これに関してはあきらめます。
    別の方法でやろうと思います。ありがとうございました。
解決済み!
引用返信/返信 削除キー/
■19870 / inTopicNo.8)  匿名希望さんへ
□投稿者/ 猫王@管理 -(2007/04/19(Thu) 00:12:19) [ID:vVKpjjUl]
    匿名希望さん

    一連のやり取りを傍から見ていると、
    匿名希望さんがやりたかった事は最後まで伝わっていなかった様に感じます。

    私自身、貴方が何をやろうとしてしていたのか理解できませんでしたし、
    理解できない意図に対して助言をする事は不可能です。

    失敗した結果だけを見せても、多くの人が理解するには不十分なので、
    以後はご自身のやろうとしている事を失敗した結果や例以外に文章で説明してください。
    宜しくお願いします。


引用返信/返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Pass/

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

- Child Tree -
- Antispam Version -