- Delphiartiklar, tips, forum, länksamling - 

      

START | DELPHI | LÄNKARGÄSTBOK 




 Forum

Grundkurs
  »Introduktion
  »Snabbguide
  »Komponenter
  »Händelser
  »Strängar
  »Räkna med Delphi   »Egna typer
  »Selektion
  »Iteration
  »Menyer
  »Funktioner
  »Arraystrukturer

Tips & Tricks
  »Nya tips
  »Blandat
  »Databaser
  »Filer
  »Forms
  »Grafik
  »Internet
  »Komponenter
  »Matematik
  »Multimedia
  »Objekt/ActiveX
  »Skrivare
  »Strängar
  »System
  »Mest lästa tips

Artiklar
  »Delphi och ADO
  »Bygga en DLL
  »Skapa en enkel rapport
  »Hantera registret
  »Enheter, units
  »Klassen TCanvas
  »Använd LookUp Controls

 Nya tips
 Lägg till tips
 Delphilänkar
 Gästbok

 

Räkna ut månfas för ett givet datum Kategori: Matematik
Inlagt: 2004-10-23
Läst: 1430
Inlagt av: Staffan Berg
Beskrivning
Detta trevliga exempel returnerar aktuell månfas för ett angivet datum. Se vidare beskrivning under Function MoonPhase. 
Kod
TYPE DATETYPE = record 
   day:WORD; 
   MONTH:WORD; 
   YEAR:WORD; 
   dow:word; 
   end; 
 
{=================================================================} 
 
Procedure GregorianToJulianDN(Year, Month, Day:Integer; 
               var JulianDN  :LongInt); 
var 
 Century, 
 XYear  : LongInt; 
 
begin //GregorianToJulianDN 
 If Month <= 2 then begin 
  Year := pred(Year); 
  Month := Month + 12; 
  end; 
 Month := Month - 3; 
 Century := Year div 100; 
 XYear := Year mod 100; 
 Century := (Century * D1) shr 2; 
 XYear := (XYear * D0) shr 2; 
 JulianDN := ((((Month * 153) + 2) div 5) + Day) + D2 
                  + XYear + Century; 
 end; //GregorianToJulianDN 
 
//================================================================= 
 
Function MoonPhase(Date:Datetype):Real; 
 
//Determines APPROXIMATE phase of the moon (percentage lit)   
// 0.00 = New moon, 1.00 = Full moon  
//Due to rounding, full values may possibly never be reached  
//Valid from Oct. 15, 1582 to Feb. 28, 4000   
                        
 
var 
j:longint; m:real; 
 
Begin 
 GregorianToJulianDN(Date.Year,Date.Month,Date.Day,J); 
 M:=(J+4.867)/ 29.53058; 
 M:=2*(M-Int(m))-1; 
 MoonPhase:=Abs(M); 
end; 

 
 
© Copyright 2005 - Staffan Berg
- Alla rättigheter förbehålles -