Programmieren

Bedeutende Tage für Esoteriker

Christian Humer

PROGRAMM



Bedeutende Tage für Esoteriker

Christian Humer

/* Bedeutende Tage fr 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 w„re der Wochentag ohne Schaltjahre */

  /* im 4-j„hrigen 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++;