User Tools

Site Tools


fidonet:clang.ita

CLANG.ITA

Descrizione

Area italiana dedicata al linguaggio C.

Messaggi interi

Re: Struttura messaggi OPUS

        09 Nov 89 15:54:00
From:   Flavio Bernardotti
To:     Luigi Rosa
Subj:   Re: Struttura messaggi OPUS
------------------------------------------------
Ah sì? Ma Opus Pavia è in rete? Se sì, è quello di Martinelli?  

Ciao 

--- ITALMAIL v2.06
 * Origin: ITALINK CBBS Montecastello (0131-355506)   (2:334/2)

FORMULA PER CALCOLO N.SETTIMANE

=============================================================================
* Area : CLANG.ITA (Linguaggio C)
* From : Salvatore Manzi, 2:332/108.7 (02 Apr 91 20:01)
* To   : Duncan Wilcox
* Subj : Congruenza di Zeller
=============================================================================

//                           by Jeff Duntemann
//---------------------------------------------------------
// calc_day_of_week calculates the day of the week using
//   Zeller's Congruence, and returns a value from 0-6,
//   where 0 = Sunday, 1 = Monday, and so on.
//

int calc_day_of_week(int year,
             int month,
             int day)

{
  int century, holder;

  // First test for error conditions on input values:
  if ((year < 0)  ||                   // Test for bad year
      (month < 1) || (month > 12) ||   // Test for bad month
      (day < 1)   || (day > 31))       // Test for bad day
     return -1;             // Return -1 to indicate an error
  else
    /* Do the Zeller's Congruence calculation as Zeller himself */
    /* described it in "Acta Mathematica" #7, Stockhold, 1887.  */
    {
      // First we separate out the year and the century figures:
      century = year / 100;  // I.e., 19
      year    = year % 100;  // I.e., 90

      // Next we adjust the month such that March remains month #3,
      //  but that January and February are months #13 and #14,
      //  *but of the previous year*.  This is done to put the
      //  weirdness of February at the *end* of the "year":

      if (month < 3)   // Do this only for January & February!
    {
      month += 12;         // Increment month by 12
      if (year > 0)        // The year before 2000 is
        year -= 1;         //  1999, not 20-1, so
      else                 //  so if the year is 00,
        {                  //  we decrement the century
          year = 99;       //  and make the year 99.
          century -= 1;
        };
        };

      // Here's Zeller's seminal black magic:
      holder = day;                        // Start with the day of month

      // This is a magic pill that figures the number of days that occur
      //  prior to the start of the current month from *MARCH 1*:
      holder = holder + (((month+1) * 26) / 10);

      holder = holder + year;              // Add in the year
      holder = holder + (year / 4);        // Correct for leap years
      holder = holder + (century / 4);     // Correct for century years
      holder = holder - century - century; // DON'T KNOW WHY HE DID THIS!

      // modulus non fa altro che calcolare il modulo, non e' di libreria e per
      // l'ho tolta
      holder = modulus(holder,7);          // Take holder modulus 7

      // Here we "wrap" Saturday around to be the last day:
      if (holder == 0)
    holder = 7;

      // Zeller kept the Sunday = 1 origin; computer weenies prefer to
      // start everything with 0, so here's a 20th Century kludge:
      holder--;

      return holder;  /* Return the end product! */
    };
};

Nel tuo Main bastera' chiamare :calc_day_of_week(year,month,day);
fidonet/clang.ita.txt · Last modified: 30/12/2024 14:27 by lrosa