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

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

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

■15454 / inTopicNo.1)  時間算出システムに関する質問
  
□投稿者/ ドラモンスター -(2004/10/27(Wed) 11:34:19) [ID:57T32sOL]
http://kagemaro.gozaru.jp/index.html
    私はドラモンスターです。

    自作の時間算出システムの不備がなかなか自分では修復できません。

    以下の処理をしているのですが、
    「12月31日」が二度算出されるなど不備が多く
    どう直せばよいかわからないので、書き込みました。

    ・TimeSearch関数に年などを与えると総秒数で返す。
     (実際には年から秒まで正確に指定)
    ・TimeSearchReverse関数は数値を日付などの文字列情報で返す。
     (0を与えると0年1月1日0時0分0秒の情報を返す。)
    ・「4年に一回閏年」、「閏年100回に1回閏年はなし」に対応。
    ・西暦(正の整数の年)、紀元前(負の整数の年)、紀元(0年)に対応。
    ・必要であれば曜日も返す。

    おそらく年関係でズレが発生しているものと思われますが、
    直接の原因がわからず直せないのです。

    1年のうちで何日目かを返す処理で不備があることはわかるのですが、
    どう直してもどこかで不備が発生してしまいます。

    どうか正常に直す方法を知っていれば教えてください。お願いします。

    URLをクリックした先の「コンテンツ」というリンクから
    問題のシナリオ(?)をダウンロード可能です。
引用返信/返信 削除キー/
■15456 / inTopicNo.2)  Re[1]: 時間算出システムに関する質問
□投稿者/ GAMEMASTER -(2004/10/27(Wed) 23:55:27) [ID:NF1HVyQI]
http://nagoya.cool.ne.jp/gamemaster/
     GAMEMASTERです。

    > 自作の時間算出システムの不備がなかなか自分では修復できません。
    >
    > 以下の処理をしているのですが、
    > 「12月31日」が二度算出されるなど不備が多く
    > どう直せばよいかわからないので、書き込みました。
    >
    > (中略)
    >
    > おそらく年関係でズレが発生しているものと思われますが、
    > 直接の原因がわからず直せないのです。
    >
    > 1年のうちで何日目かを返す処理で不備があることはわかるのですが、
    > どう直してもどこかで不備が発生してしまいます。
    >
    > どうか正常に直す方法を知っていれば教えてください。お願いします。

     当方でテストしたところ、閏年の前年の12月31日が2回現れ、その翌年(閏年)の12月29日の次に12月31日が現れた(12月30日が飛ばされた)現象を確認しました。
     内部処理を調べましたが、変数「4年残り」の値が閏年の1月1日では86399、閏年の前年の12月31日では126230399(86399+31536000×4)となるため変数「仮日」が共に0となり、その後の条件分岐で12月31日だけでなく閏年の1月1日まで12月31日に変換されることになります。そして、閏年の12月29日(本来なら12月30日)まで1日ずれた状態で月日が出力された後に閏年の12月31日で変数「仮日」が0となることで正常な出力に戻るという処理が行われているものと思われます。

     閏年の1月1日は前年の12月31日と同一(変数「仮日」=0)と見なされ、普通の年の場合は1〜364の範囲を取る変数「仮日」が閏年の場合は0〜364の範囲を取ることから、この1日分のずれを計算に入れて月日の出力を行うようにしましょう。変数「仮日」が関与する他の処理においても同様に閏年であるかどうかの判断を行って条件が合うなら変数に修正を加えるようにして下さい。


     Switch Call(閏年判定,整年)

     Case 閏年

      If 仮日 = 0 Then

       If 4年残り = 126230399 Then

        整年 = 整年 - 1
        整月 = 12
        整日 = 31

        Switch Call(閏年判定,整年)

        Case 閏年

         仮日 = 366

        Case 普通の年

         仮日 = 365

        EndSw

       Else

        整月 = 1
        整日 = 1

       EndIf

      ElseIf 仮日 <= 30 Then

       整月 = 1
       整日 = 仮日 + 1

      ElseIf 仮日 <= 59 Then

       整月 = 2
       整日 = 仮日 - Call(日数計算,1,整年) + 1

      ElseIf 仮日 <= 90 Then

       整月 = 3
       整日 = 仮日 - Call(日数計算,2,整年) + 1

      ElseIf 仮日 <= 120 Then

      (中略)

      EndIf

     Case 普通の年

     (中略)

     EndSw


     参考になれば幸いです。

     もう時間がないようでございますね。では、これにて退散させてもらいましょう。
引用返信/返信 削除キー/
■15461 / inTopicNo.3)  Re[2]: 時間算出システムに関する質問
□投稿者/ ドラモンスター -(2004/10/28(Thu) 03:33:07) [ID:57T32sOL]
http://kagemaro.gozaru.jp/index.html
    私はドラモンスターです。

    申し訳ありませんが、この処理は字面だけがよければいいというものではありません。

    この処理は基本的にTimeSearch関数による時間の取得からはじめます。
    現状の処理ではこの関数で入力した引数の値と
    TimeSearchReverse関数が返す情報が
    閏年の時にのみ1日ズレてしまいます。

    TimeSearch関数で入力した情報と
    TimeSearchReverse関数が返す情報が一致することが前提条件です。
    こんな大事なことを書き忘れてごめんなさい。

    「TimeSearch(2003,1,1,3,15,9,年号)」
    という指定では正常に
    「2003年1月1日3時15分9秒」
    の情報を返したのですが、

    「TimeSearch(2004,10,27,3,15,9,年号)」
    の指定では
    「2004年10月28日3時15分9秒」
    の情報が返りました。(曜日は水曜日でした。)

    URLをクリックした先の「コンテンツ」というリンクから
    問題のシナリオ(?)をダウンロード可能です。
引用返信/返信 削除キー/
■15463 / inTopicNo.4)  Re[3]: 時間算出システムに関する質問
□投稿者/ シャアペン -(2004/10/28(Thu) 15:37:27) [ID:Jk7d8zpp]
http://charpen-web.hp.infoseek.co.jp/

    まず、どこがどのような処理なのかということをコメント表記で書いといてくれないとこちらも細かな修正を指定できない場合があります。そちらでどのような処理をするかがわかっていても、こちらがどのような処理をしているかということが理解できないということが往々にしてあります。

    Talk から次の結果が表示されるまでがEndとなっていますが、ここはSuspendとしたほうがよろしいかと。Endだとスペックの低いPCでは点滅するような表示となり長時間見ていると目が疲れます。

    あと、2月以外は全部決まった日数しかないわけですので、直接決められた数値(1月なら31)を代入しても一向に構わないのではないでしょうか? 天地がひっくり返っても1月が30日になったり32日になったりしませんから。

    > TimeSearch関数で入力した情報と
    > TimeSearchReverse関数が返す情報が一致することが前提条件です。

    見る限りそこを一致させるという必要性を感じ取ることができません。むしろ、二度手間になってしまうのではないかという懸念があります。

    > 申し訳ありませんが、この処理は字面だけがよければいいというものではありません。

    では何を求めているのでしょうか?
    それを話してもらえなければこちら側としても具体的なアドバイスを提示することはできません。

    毎回言っていることですが、提示しているインクルが“何を表す”もので“何のために”使い“なぜ”必要なのかが全く見えません。そういった情報をきっちり提示してください。

    失敗をして、その失敗を教訓にしないでまた同じ失敗をし、それを繰り返していますが、いい加減に失敗を教訓にしたらどうですか? 尻切れトンボな発言では差し伸べる手も差し伸べられませんよ。 

    それと、自分が制御できるものから確実に作っていくことをいい加減覚えてください。今のあなたがやっていることは、若葉マークのドライバーがF1マシンに乗るくらい無謀なことです。基本からちゃんと積み上げないから自分で訳が分からなくなるのです。地ならしをしない土台に家を建てても安定しないのと同じことです。ちょっとした衝撃ですぐに土台が崩れてすべてが台無しになりますよ。

引用返信/返信 削除キー/
■15466 / inTopicNo.5)  Re[4]: 時間算出システムに関する質問
□投稿者/ ドラモンスター -(2004/10/28(Thu) 21:04:38) [ID:57T32sOL]
http://kagemaro.gozaru.jp/index.html
    私はドラモンスターです。

    「次の結果」とはどこのことですか?
    しっかりと「Suspend」を指定しています。

    「1日に32日はない」云々に関してですが、
    私は「使えるものは使う」ということでやってます。
    つまり、「何かに使えるかもしれない」と思っているわけです。
    そうではなくても月間日数は様々に応用が利きます。

    TimeSearch関数とTimeSearchReverse関数を組み合わせると意味がありませんが、
    これらは基本的に別々に使用します。

    TimeSearch関数で算出された値が基本時間となり、
    時間の経過などはこの数値を代入した変数にプラスするなどして処理します。
    しかし、数値情報では殆ど役に立たないので、文字列情報にする必要があります。
    そこで必要になるのがTimeSearchReverse関数です。
    数値情報も普通に算出可能ですが、本質はそこではありません。
    本質は文字列情報でこれを利用するとシステムメッセージ内でリアルな日付を表示できます。
    完全時間システムを採用するシナリオのシステムメッセージを真面目に作ると、
    容量が嵩むので、文字列を一括算出するようにしました。これはその結果です。

    これで私が
    「字面だけがよければいいというものではありません。」
    と言った意味がわかっていただけたでしょうか。
    上記のことを実現するためには
    入力する値と出力される値が完全に一致していなければならないのです。

    一応言いますが、
    総秒数からそれが何年何月何日何時何分何秒であるかを確実に導き出すのは
    一部の天才でなければ不可能だと思います。ちなみに私は天才ではありません。
    もちろん何年何月何日何時何分何秒という情報から総秒数を確実に導き出すのも
    一部の天才でなければ不可能でしょう。
    ということで二つの関数、どちらかでも欠けていては役に立ちません。

    私は好きで制御できないものを作っているわけではありません。
    私は超大作シナリオの基本システムを製作している最中でこれはその産物です。
    結果的に私の手に終えなかったわけですが、使うのをあきらめるつもりはありません。
    私はこの処理が必要だと思って作っているのです。
引用返信/返信 削除キー/
■15480 / inTopicNo.6)  Re[5]: 時間算出システムに関する質問
□投稿者/ ドラモンスター -(2004/10/31(Sun) 01:24:53) [ID:57T32sOL]
http://kagemaro.gozaru.jp/index.html
    私はドラモンスターです。

    問題は解決しました。

    皆さん、ありがとうございました。
解決済み!
引用返信/返信 削除キー/



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

このトピックに書きこむ

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

Pass/

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

- Child Tree -
- Antispam Version -