AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Schaltjahr

Ein Thema von bixi400 · begonnen am 12. Nov 2003 · letzter Beitrag vom 14. Nov 2003
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von bixi400
bixi400

Registriert seit: 19. Mai 2003
179 Beiträge
 
Turbo Delphi für Win32
 
#1

Schaltjahr

  Alt 12. Nov 2003, 18:54
So kannst du heraus finden ob die eingegebene Jahreszahl ein Schaltjahr ist:

Delphi-Quellcode:
function Schaltjahr(year:Integer):Boolean;
 var v:Integer;
     x:Real;
begin
  x := year / 4;
  v := trunc ( x );
  if ((x > v)and(x < v+1)) then
   Schaltjahr := False
    else
   Schaltjahr := True;
end;
Beispiel:
Delphi-Quellcode:
...
  if Schaltjahr(2004) = True then
   Label1.Caption := '2004 ist ein Schaltjahr!';
...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Schaltjahr

  Alt 12. Nov 2003, 18:55
Aus der Delphi Hilfe:
function IsLeapYear(Year: Word): Boolean;
Zitat:
Call IsLeapYear to determine whether the year specified by the Year parameter is a leap year. Year specifies the calendar year.
Unit: SysUtils (D6)
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#3

Re: Schaltjahr

  Alt 12. Nov 2003, 19:09
Das hatte ich hier schon mal verbrockt.
Und wenn du dir mal die Berechnung für Februar anschaust, wirst du bemerken, das nicht jedes durch 4 teilbare Jahr ein Schaltjahr ist.

Zitat von himitsu:
In 'nem Schaltjahr gibt es sogar noch einen 29-Tage-Monat.

Das hier hatte ich mal nach dem gregorianisch-julianischen Kalender (des ist der aktuelle) erstellt.
(das stimmt etwas seit dem 15. Jahrhundert (1583 in Deutschand) bis ...)
Delphi-Quellcode:
Function TageImMonat(Monat, Jahr: Integer): Integer;
  Begin
    Case Monat of
      1, 3, 5, 7, 8, 10, 12: Result := 31;
      4, 6, 9, 11: Result := 30;
      2: If ((Jahr div 4 = 0) and (Jahr div 100 <> 0)) or (Jahr div 400 = 0) Then
           Result := 29 Else Result := 28;
      Else Result := -1;
    End;
  End;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von HomerGER
HomerGER

Registriert seit: 9. Jun 2003
390 Beiträge
 
Delphi 7 Professional
 
#4

Re: Schaltjahr

  Alt 12. Nov 2003, 19:15
wie war das noch alle 2000 jahre ist ein schaltjahr alle 200 nicht alle 100 wieder oder wie war das ?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#5

Re: Schaltjahr

  Alt 12. Nov 2003, 19:30
Alle 4 Jahre ist eins, es sei denn das Jahr ist durch 100 teilbar.
Aber wenn es auch noch duch 400 teilbar ist, ist es wieder eins, daher war das Jahr 2000 auch ein Schaltjahr, während das Jahr 1900 kein's war.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Schaltjahr

  Alt 12. Nov 2003, 19:59
Aufgrund dessen, daß obiger Code die beiden Ausnahmen (alle 100 Jahre, alle 400 Jahre) nicht berücksichtigt, schiebe ich den mal aus der CodeLib raus. Ausserdem gibt es ja noch IsLeapYear, wie Luckie schon angemerkt hat

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#7

Re: Schaltjahr

  Alt 12. Nov 2003, 20:00
Wie Luckie schon sagte gibt es die Funktion in Delphi bereits, die folgendermassen aussieht:
Result := (Year mod 4 = 0) and ((Year mod 100 <> 0) or (Year mod 400 = 0)); Und das ist meine etwas schnellere Lösung:
Result := ((Year and 3) = 0) and ((Year mod 100 > 0) or (Year mod 400 = 0));
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Schaltjahr

  Alt 12. Nov 2003, 20:06
Und warum ist deine schneller? Ich muss allerdings zu geben, dass sich beide nicht richtig verstehe...
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#9

Re: Schaltjahr

  Alt 14. Nov 2003, 12:09
Hab bei mir 'nen kleine Fehler entdekt.
(DIV zu MOD geändert)

Delphi-Quellcode:
Function TageImMonat(Monat, Jahr: Integer): Integer;
  Begin
    Case Monat of
      1, 3, 5, 7, 8, 10, 12: Result := 31;
      4, 6, 9, 11: Result := 30;
      2: If ((Jahr mod 4 = 0) and (Jahr mod 100 <> 0)) or (Jahr mod 400 = 0) Then
           Result := 29 Else Result := 28;
      Else Result := -1;
    End;
  End;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.604 Beiträge
 
#10

Re: Schaltjahr

  Alt 14. Nov 2003, 13:04
Das find ich schicker:

Delphi-Quellcode:
uses SysUtils;

function TageImMonat(const Monat, Jahr: integer): integer;
const
   TageImSchaltMonat: array[1..12] of integer = (31,29,31,30,31,30,31,31,30,31,30,31);
   TageImMonat: array[1..12] of integer = (31,28,31,30,31,30,31,31,30,31,30,31);
begin
   if isLeapYear(Jahr) then
      result := TageImSchaltMonat[Monat]
   else
      result := TageImMonat[Monat];
end;
Sebastian Gingter
Phoenix - 不死鳥
Mein Blog: http://gingter.org
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz