Autor Beitrag
Fiete
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 601
Erhaltene Danke: 339

W7
Delphi 6 pro
BeitragVerfasst: So 01.11.15 13:05 
Das Programm berechnet aus einem Zeitraum zweier Kalenderdaten welche Wochentage ein 13-ter gewesen sind.
F13
Viel Spaß beim Testen
Gruß Fiete

Moderiert von user profile iconNarses: Inline- in normalen Anhang gewandelt und Bild als Inline-Anhang hochgeladen.
Einloggen, um Attachments anzusehen!
_________________
Fietes Gesetz: use your brain (THINK)

Für diesen Beitrag haben gedankt: Mathematiker
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: So 01.11.15 15:10 
Hallo,
nach der Programmmeldung:
Zitat:
Der längste Zeitraum ohne Freitag den 13. ist
548 Tage lang, vom
14.3.2001 bis 12.9.2002

müsste der 13.3.2001 ein Freitag gewesen sein. Der 13.3.2001 war aber ein Dienstag. 2001 gab es im April und Juli Freitag, den 13. Irgendetwas stimmt noch nicht. 2002 gab es im September und Dezember den 13. am Freitag. Das ist korrekt.

Mögliche Ergänzungen des Programms wären:

1. Freitag, der 13. Vollmond
Besonders kritisch ist "Freitag, der 13.", wenn zusätzlich zum schrecklichen Datum auch noch Vollmond ist. Denn dann sind ja die Wesen der Nacht, Werwölfe, Vampire, Dämonen, Hexen, Banker und Politiker, unterwegs. :lol:
Das Zusammentreffen beider Ereignisse ist sehr selten. Von 2000 bis 2100 betrifft es
  • Freitag, der 13., Vollmonduhrzeit
  • 13.10.2000 um 9:55 MEZ
  • 13.6.2014 um 5:13 MEZ
  • 13.8.2049 um 10:21 MEZ
  • 13.4.2063 um 3:36 MEZ
  • 13.11.2065 um 1:40 MEZ
  • 13.2.2082 um 7:19 MEZ
  • 13.10.2084 um 21:16 MEZ
  • 13.3.2093 um 5: 8 MEZ
  • 13.6.2098 um 21:29 MEZ

2. Doppelter Freitag, der 13.
Besonders selten sind sogenannte doppelte "Freitage, der 13".
Tage, die "Freitag, der 13." sind, werden so bezeichnet, wenn zusätzlich die Summe der Ziffern des Datums gleich 13 ist.
Im Zeitraum 2000 bis 5000 sind dies:
13.01.2006, 13.10.2006, 13.05.2011, 13.04.2012, 13.12.2013, 13.02.2032, 13.01.2051, 13.10.2051, 13.05.2101, 13.02.2122, 13.11.2122, 13.01.2141, 13.10.2141, 13.01.2204, 13.04.2210, 13.12.2211, 13.11.2212, 13.04.2300, 13.12.2301, 13.02.2320, 13.06.3000, 13.03.3012, 13.01.3032, 13.11.3040, 13.02.3103, 13.11.3103, 13.01.3122, 13.10.3122, 13.01.3212, 13.11.3220, 13.01.3302, 13.10.3302, 13.04.4001, 13.12.4002, 13.03.4020, 13.01.4040, 13.02.4111, 13.11.4111, 13.01.4130, 13.10.4130, 13.02.4201, 13.11.4201, 13.10.4220, 13.10.4400
Nur für die Tage
13.05.2011, 13.01.2141, 13.10.2141, 13.04.4001, 13.02.4111, 13.11.4111, 13.02.4201, 13.11.4201
ist das Jahr selbst Primzahl. Noch seltener ist auch der Monat eine Primzahl.

Beste Grüße
Mathematiker

Nachtrag: Ich vermute, der Fehler liegt in
ausblenden Delphi-Quelltext
1:
   W:=ABS((FrTag+(M+1)*26 DIV 10+5*R DIV 4+H DIV 4-2*H-1))MOD 7					

Wird der Wert negativ, so müsstest du 7 addieren und nicht den absoluten Betrag bilden.
Dann bekommst du
Zitat:
Der längste Zeitraum ohne Freitag den 13. ist
426 Tage lang, vom
14.7.1945 bis 12.9.1946

was richtig sein müsste.

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein

Für diesen Beitrag haben gedankt: Fiete
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: So 01.11.15 15:51 
Hallo Fiete,
du berechnest den Abstand zweier Tage relativ aufwendig über die Monatslängen und die Schaltjahre.
In der Astronomie wird für die Zeitraumberechnung das Julianische Datum benutzt.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
function juldat(const jahr,mon,tag:integer):double;
var y,m,k:integer;
    a,b:double;
begin
  k:=10000*jahr+100*mon+tag;
  b:=-63.5;
  y:=jahr+4712;
  m:=mon+1;
  if mon<=2 then begin
    dec(y);
    inc(m,12);
  end;
  if k>=15821015 then begin
    a:=int((y+88)/100);
    b:=b+38-a+int(0.25*a);
  end;
  juldat:=int(365.25*y)+int(30.6001*m)+tag+b;
end;

Der 1540 in Frankreich geborene Gelehrte Joseph Justus Scaliger schlug im Jahre 1583 eine fortlaufende Zählung der Tage innerhalb einer "Julianischen Periode" vor. Diese Periode hat eine Länge von 7980 Jahren und stellt das kleinste gemeinsame Vielfache von Mondzyklus (19 Jahre), Sonnenzyklus (28 Jahre) und der Indiktion (15 Jahre) dar.
Das Jahr 4713 v.u.Z. ist das erste in allen drei Zyklen, daher beginnt die Zählung am 1. Januar 4713 v.u.Z. (astronomisch -4712 Jan 1.5).
Der Vorteil ist, das ein Zeitabstand nur noch die Differenz zweier Julianischer Daten ist.

Außerdem gibt es noch einen Vorteil. Auf Grund des Startdatums lässt das abgerundete Julianische Datum für jeden Freitag den Rest 3 bei mod 7. Abrunden deshalb, da die Zählung 12 Uhr mittags begann und man daher für die Tage immer einen Bruchteil ,5 erhält.
Vielleicht nutzt das ja etwas.

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein