2016-10-18 5 views
-4

私は初心者なしで大学でプログラミングを始めました。私たちはすでに基礎を知っていますが、以前はC#クラスを持っていませんでした。1P/Halley "Tiberius" Algorithm

このエクササイズでは、過去3000年のティベリウス彗星の出現をすべて調べるように求めています。この彗星は、75年、116日、19時間、および12分に1回出現する。私たちが最後に見たのは、1986 5 2月21:29でした。私は最後から2番目の日付を計算しました:1910 285日(10月12日)2時間:17分。私はこの単純な微積分を適切なC#プログラムに転置することはできません。私はいくつかのアドバイスが必要です。多分求心性のある説明があれば、もっと助けになるでしょう。もしあなたが貢献できれば、私は満足する以上のものになるでしょう。

私は、年、日、時間を日に変換し、その75年を(すでに分に変換して)差し引いて考えています。75年116日19時間12分= 27491.8034726日1986年36日21時間29分= 724926.8951389日私たちはこの最後の数字を減らすと思いますすべての外観とそれが登場するたびに年、日付、時間を印刷します。

+4

あなたのアルゴリズムを擬似コードで表現できますか(https://en.wikipedia.org/wiki/Pseudocode)? –

+4

.NETの 'DateTime'には、時間単位を追加するのに便利な方法がたくさんあります。 –

+0

私たちは残念ながらコードブロックでしか動作しません。 @Chris Farmer素早く対応してくれてありがとうございます。@ EdPlunkett、私は数分で擬似コードを提供します。 – crt01

答えて

1

のDateTimeとTimeSpanのは、このための便利なクラスです:

var lastOccurrence = new DateTime(1986, 2, 5, 21, 29, 0); 
var previous = lastOccurrence.AddYears(-75).AddDays(-116).AddHours(-19).AddMinutes(-12); 
// Previous is now 10/12/1910 2:17:00 

私は読者の演習として、3000年戻ってループのまま;)


私はもともとあることを期待していましたTimeSpanを作成してDateTime.Subtractメソッドを使用することはできますが、TimeSpanには何年もかかるコンストラクタがないようで、うるう年を正しく処理できないため、上記の方が優れていると思います。

+0

前の場合<-1013years 365日23hrs 59分programmがここで停止する – crt01

+0

前> -1013年365日23時間59分前の場合は1986年から-1013までのすべての日付を出力します。その他の場合は前の時刻が-1013年で365日23時間59分です。 – crt01

関連する問題