Programmieren
Bedeutende Tage für Esoteriker
Christian Humer
PROGRAMM
Bedeutende Tage für Esoteriker
Christian Humer
/* Bedeutende Tage fr Esoteriker */
/* Christian Humer 3BBN */
/* 27. November 1997 */
/* Berechnet ausgehend von einem gegeben Datum, z.B. Geburtdatum
den 1000. Tag im Zehnersystem
den 1000. Tag im Zwölfersystem
den 4096. (2^12) Tag
den 8192. (2^13) Tag
den 10000. Tag
den 16384. (2^14) Tag
den 10000. Tag im Zwölfersystem
den 32768. (2^15) Tag, wenn wirs erleben */
#include <stdio.h>
#include <conio.h>
/* wochentag ***************************************
Berechnet den Wochentag für ein beliebiges Datum
gegeben durch tag, mon, jahr
ohne Fehlerprüfung, d.h. Datum muss korrekt sein
z.B. 72.11.1999 ist nicht erlaubt
*/
int wochentag(int tag,int mon,int jahr)
{
int iWochentag;
/* AD 0 war ein Sonntag tag=0 */
/* 31.12 des Vorjahres jahr-1 */
/* der Neujahrstag ist normalerweise einen Tag nach dem Neujahrstag des Vorjahres */
/* jahr-1 %7 wre der Wochentag ohne Schaltjahre */
/* im 4-jhrigen Schaltjahr verschiebt sich der Jahresanfang gegenüber dem Vorjahr um 2 */
/* alle 100 Jahre ist kein Schaltjahr */
/* alle 400 Jahre aber schon */
iWochentag=(jahr-1 + (jahr-1)/4 - (jahr-1)/100 + (jahr-1)/400) %7;
/* Wochentage des laufenden Jahres */
iWochentag+=(mon-1)*31-(mon-1)/2;
/* Monate mit 30 Tagen wegen Augustus */
if (mon==9 || mon==11) iWochentag++;
/* Berücksichtigung des Februars */
if (mon>=3) iWochentag-=2;
/* Berücksichtigung des Schaltjahres */
if ( ( (jahr %4==0) && ((jahr%100!=0)||(jahr%400==0)) ) && (mon>=3) ) iWochentag++;
/* Wochentage des laufenden Monats */
iWochentag+=tag;
iWochentag%=7;
return iWochentag;
}
/* datadd *****************************************
Addiert eine Anzahl von Tagen "tage" zu einem
Datum gegeben durch "&tag", "&mon", "&jahr"
ohne Fehlerprüfung, d.h. Datum muss korrekt sein
z.B. 72.11.1999 ist nicht erlaubt
Die als Adressen übergebenen Variablen werden
durch die Funktion überschrieben
*/
void datadd(int *tag,int *mon,int *jahr,long int tage)
{
int contr; /* gibt an, ob im Datum etwas verändert wurde
und ist für das Programmende entscheidend */
/* tage wird solange auf jahr, mon und tag aufgeteilt
als tage überbleiben */
do
{
contr=0;
/* Wenn kein Schaltjahr -365 */
if ((tage>=365)&& ( (((*jahr)-1)%4!=0) || ( ((*jahr)%100==0) && ((*jahr)%400!=0) ) ) )
{
(*jahr)++;
tage-=365;
contr++;