[
新規
] - [
ツリー
] - [
スレッド
] [
未解決
] [
緊急
] - [
優先
] - [
検索
] - [
なでしこTOP
]
「なでしこv1」開発掲示板
なでしこv1のバグや要望を書き込む掲示板
→
書き込み(
#3044
)を編集する:
名前
タイトル
本文
その後また色々やってみて、おかげさまでとっても賢くなりました! 朔を旧暦変換、中気を二十四節気取得で無理矢理取得しているのであんまり実用的ではないケド、旧暦の計算もなでしこでいちおう出来たと思います。 それから、元のAWKのスクリプトもだうんろーどしてみました。 それで、ひらめきまして、普通になおりそうな予感! 問題はこの部分なんですが・・・(300行目?) //----------------------------------------------------------------------- // 朔日行列から旧暦を求める。 //----------------------------------------------------------------------- _state := 0; j := 4; for i := 0 to 4 do begin if(Trunc(_tm0) < Trunc(_m[i, 2]))then begin _state := 1; j := i; Break; end else if(Trunc(_tm0) = Trunc(_m[i, 2])) then begin _state := 2; j := i; Break; end; end; if (_state=0) or (_state=1) then begin Dec(j); end; Result.uruu := Trunc(_m[j, 1]); Result.q_mon := Trunc(_m[j, 0]); Result.q_day := Trunc(_tm0) - Trunc(_m[j, 2]) + 1; #----------------------------------------------- なでしこで書くと、こうゆうことだと思いますが・・・ #----------------------------------------------- ※mは朔日行列(要素数5)。tm0は対象日のユリウス日。 state=0。j=4。 iを0から4まで繰り返す もし、INT(tm0)<INT(m[i][2])ならば、 state=1。j=i。抜ける。 違えば、もし、INT(tm0)=INT(m[i][2])ならば、 state=2。j=i。抜ける。 もし、(state=0)または(state=1)ならば、 j=j-1。 閏=INT(m[j][1]) 月=INT(m[j][0]) 日=INT(tm0)-INT(m[j][2])+1。 #----------------------------------------------- 元のAWKのスクリプトではカウンタのiを直接使っていて、もしに引っかからずに繰り返しが終了した時(state0)、タブンiが5になっているので-1しなければならなかったんだと思います。 しかし、こちらはiをjに代入して使用していて、jの初期値を朔日行列の要素数-1である4としているので、-1してはいけません。state1の時だけ-1すればいいので、別にstateのフラグで仕分けする必要もない感じ。 とゆうわけで、これでいけます!!!(なでしこではできました) 前回のとりあえずな修正も、2033年問題の部分以外は不要になるハズ。 #----------------------------------------------- ※mは朔日行列(要素数5)。tm0は対象日のユリウス日。 j=4。 iを0から4まで繰り返す もし、INT(tm0)<INT(m[i][2])ならば、 // state1。対象日のユリウス日が朔日のユリウス日より前なので j=i-1。抜ける。 // いっこ前の月(行)を参照します。(j=i-1) 違えば、もし、INT(tm0)=INT(m[i][2])ならば、// state2。対象日のユリウス日と朔日のユリウス日が同じ日なので j=i。抜ける。 // その行を参照します。(j=i) // state0。該当せずに繰り返しが終了した場合は、最後の行(j=4)を参照します。 閏=INT(m[j][1]) 月=INT(m[j][0]) 日=INT(tm0)-INT(m[j][2])+1。 #----------------------------------------------- Delphiさんだと・・・こう・・・ですかねえ・・・? //----------------------------------------------------------------------- // 朔日行列から旧暦を求める。 //----------------------------------------------------------------------- j := 4; for i := 0 to 4 do begin if(Trunc(_tm0) < Trunc(_m[i, 2]))then begin j := i-1; Break; end else if(Trunc(_tm0) = Trunc(_m[i, 2])) then begin j := i; Break; end; end; Result.uruu := Trunc(_m[j, 1]); Result.q_mon := Trunc(_m[j, 0]); Result.q_day := Trunc(_tm0) - Trunc(_m[j, 2]) + 1; #----------------------------------------------- うまくいったらおなぐさみ☆ 自分ではなでしこでしかお試しができないので、試してみていただけたらと思います。 このあたりがOKならタブンだいじょぶそう。 #----------------------------------------------- 『2025/09/23』を旧暦変換して表示。#×2025/08/03→○2025/08/02 『2028/09/20』を旧暦変換して表示。#×2028/08/03→○2028/08/02 『2031/06/21』を旧暦変換して表示。#×2031/05/03→○2031/05/02 『2042/06/21』を旧暦変換して表示。#×2042/05/05→○2042/05/04 『2044/09/22』を旧暦変換して表示。#×2044/閏08/02→○2044/08/02 『2047/09/22』を旧暦変換して表示。#×2047/08/04→○2047/08/03 #----------------------------------------------- どうでしょう?
優先度
低
中
高
緊急
状態
未処理
詳細求む!
調査中
議論中
修正中
確認待ち
再修正依頼
解決
---
重複
---
アイデア
感想
告知
感謝
確認キー
👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。
編集キー
編集時に使うキーを入力(省略可能)
添付ファイル
🎁
ファイルを選択...
画像ファイル(最大300KB)を添付可能