Ir ao conteúdo
  • Cadastre-se
Skullcrusher777

C++ Tomohiko Sakamoto algoritmo ordem dos números

Recommended Posts

Por favor preciso de ajuda para compreender uma parte do código abaixo:

É um código para desenvolver calendários e na função abaixo:

int dayNumber(int day, int month, int year)
{
    static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };
    year -= month < 3;
    return ( year + year/4 - year/100 +
             year/400 + t[month-1] + day) % 7;
}

 

A minha dúvida é sobre os numeros desta linha:

 

static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1,  4, 6, 2, 4 }; 

 

Eu sei que os numeros se referem ao dia da semana mas o que eu não entendo é porque os números estão nessa ordem?

 

Abaixo está o códico completo:

 

 

 

// A C++ Program to Implement a Calendar
// of an year
#include<bits/stdc++.h>
using namespace std;
 
/*A Function that returns the index of the day
  of the date- day/month/year
  For e.g-
 
  Index     Day
  0         Sunday
  1         Monday
  2         Tuesday
  3         Wednesday
  4         Thursday
  5         Friday
  6         Saturday*/
int dayNumber(int day, int month, int year)
{
 
    static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1,
                       4, 6, 2, 4 };
    year -= month < 3;
    return ( year + year/4 - year/100 +
             year/400 + t[month-1] + day) % 7;
}
 
/*
  A Function that returns the name of the month
  with a given month number
 
  Month Number     Name
  0                January
  1                February
  2                March
  3                April
  4                May
  5                June
  6                July
  7                August
  8                September
  9                October
  10               November
  11               December */
string getMonthName(int monthNumber)
{
    string months[] = {"January", "February", "March",
                       "April", "May", "June",
                       "July", "August", "September",
                       "October", "November", "December"
                      };
 
    return (months[monthNumber]);
}
 
/* A Function to return the number of days in
   a month
 
  Month Number     Name        Number of Days
  0                January     31
  1                February    28 (non-leap) / 29 (leap)
  2                March       31
  3                April       30
  4                May         31
  5                June        30
  6                July        31
  7                August      31
  8                September   30
  9                October     31
  10               November    30
  11               December    31
 
*/
int numberOfDays (int monthNumber, int year)
{
    // January
    if (monthNumber == 0)
        return (31);
 
    // February
    if (monthNumber == 1)
    {
        // If the year is leap then February has
        // 29 days
        if (year % 400 == 0 ||
                (year % 4 == 0 && year % 100 != 0))
            return (29);
        else
            return (28);
    }
 
    // March
    if (monthNumber == 2)
        return (31);
 
    // April
    if (monthNumber == 3)
        return (30);
 
    // May
    if (monthNumber == 4)
        return (31);
 
    // June
    if (monthNumber == 5)
        return (30);
 
    // July
    if (monthNumber == 6)
        return (31);
 
    // August
    if (monthNumber == 7)
        return (31);
 
    // September
    if (monthNumber == 8)
        return (30);
 
    // October
    if (monthNumber == 9)
        return (31);
 
    // November
    if (monthNumber == 10)
        return (30);
 
    // December
    if (monthNumber == 11)
        return (31);
}
 
// Function to print the calendar of the given year
void printCalendar(int year)
{
    printf ("         Calendar - %d\n\n", year);
    int days;
 
    // Index of the day from 0 to 6
    int current = dayNumber (1, 1, year);
 
    // i --> Iterate through all the months
    // j --> Iterate through all the days of the
    //       month - i
    for (int i = 0; i < 12; i++)
    {
        days = numberOfDays (i, year);
 
        // Print the current month name
        printf("\n  ------------%s-------------\n",
               getMonthName (i).c_str());
 
        // Print the columns
        printf("  Sun  Mon  Tue  Wed  Thu  Fri  Sat\n");
 
        // Print appropriate spaces
        int k;
        for (k = 0; k < current; k++)
            printf("     ");
 
        for (int j = 1; j <= days; j++)
        {
            printf("%5d", j);
 
            if (++k > 6)
            {
                k = 0;
                printf("\n");
            }
        }
 
        if (k)
            printf("\n");
 
        current = k;
    }
 
    return;
}
 
// Driver Program to check above funtions
int main()
{
    int year = 2016;
    printCalendar(year);
 
    return (0);
}

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×