掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.30419

ジュリアンデー計算
投稿者---山男(2007/06/30 17:27:36)


年と月と日を入力してジュリアンデー(1 月1 日を1 として,閏年の12 月31 日を366)を計算するプログラムと年とジュリアンデーを入力して月と日を計算するプログラムを作ろうとしています。閏年を考慮しなくてはならないため苦戦しております。閏年は年を4で割ると余りが出ない年のこととと定義していますが、毎月の日数をスウィッチ文で表すとすごい文数になりそうです。何か良い例など御存知ないでしょうか?


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ジュリアンデー計算 30420 bugs 2007/06/30 17:32:19
<子記事> Re:ジュリアンデー計算 30426 TT414 2007/07/02 16:00:34
<子記事> Re:ジュリアンデー計算 30459 たかぎ 2007/07/06 16:13:20
<子記事> Re:ジュリアンデー計算 30462 山男 2007/07/06 16:34:22
<子記事> Re:ジュリアンデー計算 30463 Blue 2007/07/06 16:34:24


No.30420

Re:ジュリアンデー計算
投稿者---bugs(2007/06/30 17:32:19)


毎月の日数は、月数の値を添字とする配列で管理するとよさそうです。

それから、閏年の定義を見直してください。
西暦年が「4で割り切れて、かつ、100で割り切れない」か、または
「400で割り切れる」場合、閏年です。
2000年は閏年で、2100年は平年です。




この投稿にコメントする

削除パスワード

No.30426

Re:ジュリアンデー計算
投稿者---TT414(2007/07/02 16:00:34)


http://ja.wikipedia.org/wiki/%E4%BF%AE%E6%AD%A3%E3%83%A6%E3%83%AA%E3%82%A6%E3%82%B9%E6%97%A5
http://ja.wikipedia.org/wiki/%E3%83%84%E3%82%A7%E3%83%A9%E3%83%BC%E3%81%AE%E5%85%AC%E5%BC%8F
を参考にしてください。

また「ジュリアンデー」ではなく「ユリウス日」としたほうが、googleなどでたくさんHitします。


この投稿にコメントする

削除パスワード

No.30458

Re:ジュリアンデー計算
投稿者---yui(2007/07/06 15:42:03)


それはジュリアンデーの求め方であり、プログラムではありませんよね。どこか参考になる場所を探したいのですが。


この投稿にコメントする

削除パスワード

No.30479

Re:ジュリアンデー計算
投稿者---TT414(2007/07/08 12:06:55)


>それはジュリアンデーの求め方であり、プログラムではありませんよね。どこか参考になる場所を探したいのですが。
質問者でもない人間が、「プログラムではありませんよね」と書いてありますが、質問者さんは「何か良い例など御存知ないでしょうか?」としか、書いてありません、No.30426で十分ではないでしょうか。


この投稿にコメントする

削除パスワード

No.30459

Re:ジュリアンデー計算
投稿者---たかぎ(2007/07/06 16:13:20)
http://www.kijieneko.co.jp/


mktimeを使えば一発で出来ます。tm構造体の中のtm_wdayを見ればよいのです。
逆に、ユリウス日から月日を求めるには、1月123日のようにしてmktimeを実行するだけです。

ただし、time_t型で表現できない範囲を扱うのであれば話は別です。
その場合、そもそもグレゴリオ暦が使われるどうかは、国や地域や時代に依存します。
本能寺の変が起きた天正10年6月2日を入力してユリウス日を求めるのは、そんなに簡単ではないのです。

また、数千年後を扱う場合も話が違ってきます。
現行の暦法では誤差が出てきますので、例えば3200年を平年にするような措置が必要になるはずです。



この投稿にコメントする

削除パスワード

No.30460

Re:ジュリアンデー計算
投稿者---yui(2007/07/06 16:17:18)


>mktimeを使えば一発で出来ます。tm構造体の中のtm_wdayを見ればよいのです。

mktimeを使った事も聞いた事もないのでよくわかりません。せっかく御教え頂いたのにごめんなさい。


この投稿にコメントする

削除パスワード

No.30461

Re:ジュリアンデー計算
投稿者---たかぎ(2007/07/06 16:22:49)
http://www.kijieneko.co.jp/


>mktimeを使った事も聞いた事もないのでよくわかりません。せっかく御教え頂いたのにごめんなさい。

yuiさんは使ったことも聞いたことも無いかもしれませんが、山男さんなら分かるかもしれませんね。



この投稿にコメントする

削除パスワード

No.30464

Re:ジュリアンデー計算
投稿者---たかぎ(2007/07/06 16:55:41)
http://www.kijieneko.co.jp/


>mktimeを使えば一発で出来ます。tm構造体の中のtm_wdayを見ればよいのです。

すみません、誤記がありました。
tm_wdayではなく、tm_ydayです。



この投稿にコメントする

削除パスワード

No.30462

Re:ジュリアンデー計算
投稿者---山男(2007/07/06 16:34:22)


知り合いはswitch文を使うと言っていました。出来れば私もそうしたいですね。ただし、行数が多いので苦戦しています。


この投稿にコメントする

削除パスワード

No.30463

Re:ジュリアンデー計算
投稿者---Blue(2007/07/06 16:34:24)


掲示板ご利用上の注意は守ってください

違反事項
>環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
>マルチポスト(多重投稿)はしません。
http://www.shunzei.com/cgibin/lounge/kirifuda/wforum.cgi?no=413&reno=no&oya=413&mode=msgview&page=0

mktime
http://www9.plala.or.jp/sgwr-t/lib/mktime.html


この投稿にコメントする

削除パスワード

No.30465

Re:ジュリアンデー計算
投稿者---山男(2007/07/06 17:22:53)


失礼致しました。C++でやっています。他の掲示板を使ってはいけないとはわからなかったので、以後気をつけます。・・・しかし、難しくてなかなか解けません。



この投稿にコメントする

削除パスワード

No.30466

Re:ジュリアンデー計算
投稿者---bugs(2007/07/06 17:36:26)


例えば、2007年7月6日が1月1日から数えて
何日目であるかを手計算で求めるとき、
どういう風にしますか?


この投稿にコメントする

削除パスワード

No.30467

Re:ジュリアンデー計算
投稿者---山男(2007/07/06 17:39:54)


>例えば、2007年7月6日が1月1日から数えて
>何日目であるかを手計算で求めるとき、
>どういう風にしますか?

switch(c)
{
case 1:e=d;
break;
case 2:e=31+d;
break;
case 3:e=31+28+d;
break;
case 4:e=31+28+31+d;
break;
case 5:e=31+28+31+31+d;
break;
case 6:e=31+28+31+31+30+d;
break;
case 7:e=31+28+31+31+30+31+d;
break;
case 8:e=31+28+31+31+30+31+31+d;
break;
case 9:e=31+28+31+31+30+31+31+30+d;
break;
case 10:e=31+28+31+31+30+31+31+30+31+d;
break;
case 11:e=31+28+31+31+30+31+31+30+31+30+d;
break;
case 12:e=31+28+31+31+30+31+31+30+31+30+31+d;
break;}
printf("その日のジュリアンデーは>%d\n",e);

この様にして計算しましたが、膨大な量になり、あまりスマートに思えません。さらに、この逆(ジュリアンデーから日付)の計算が見当もつきません。


この投稿にコメントする

削除パスワード

No.30468

Re:ジュリアンデー計算
投稿者---acid(2007/07/06 18:21:21)


なんでそんなことに…


    int month_limit[] = {31,28,31,30,31,30,31,31,30,31,30,31};

    //月と日を入力
    //month=月, days=日
    
    // 月分加算
    for (i = 1; i < month; i++) {
        result += month_limit[i];
    }
    // 日分加算
    result += days;

うるう年と、日付の正当性チェックはやってないけど、
取り合えずこれで求められる。



この投稿にコメントする

削除パスワード

No.30469

Re:ジュリアンデー計算
投稿者---山男(2007/07/06 18:24:58)


やってみましたが、一応出来ました。160行もあるので貼る事は出来ませんが・・・。どうもありがとうございます。もう少し確認してみます。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧