Cálculo del día de la semana de una fecha dada

David Mompel

/* Este programa sirve para calcular qué día de la semana
fue una fecha dada. Este programa solo sirve para el calendario
gregoriano, por lo que el año se exige ser mayor o igual que 1600 */

#include <math.h>
#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
    int E, Y, D, R, nD, bisiesto;
    int A, B, C, diamax;
    char nh;
    nh=164;
    cout << "Dame una fecha valida:" <<endl <<endl;
    cout << "Dia: ";
    cin >> A;
    cout << "Mes: ";
    cin >> B;
    cout << "A"<<nh<<"o: ";
    cin >> C;
    cout << endl;
    while (A>31 || A<1 || B<1 || B>12 || C<1600)
    {
        cout << "La fecha no es correcta"<<endl<<endl;
        cout << "Dame una fecha valida:" <<endl <<endl;
        cout << "Dia: ";
        cin >> A;
        cout << "Mes: ";
        cin >> B;
        cout << "A"<<nh<<"o: ";
        cin >> C;
        cout << endl;
    }
    switch (B)
    {
        case 2:
        if (C%400==0 || (C%4==0&&C%100!=0))
        {
            bisiesto=1;
            diamax=29;
        }
        else
        {
            diamax=28;
            bisiesto=0;
        }
        break;
        case 4:
        case 6:
        case 9:
        case 11: diamax=30;
        break;
        default: diamax=31;
        break;
    }
    while (A>diamax)
    {
        cout << "La fecha no es correcta"<<endl<<endl;
        cout << "Dame una fecha valida:" <<endl <<endl;
        cout << "Dia: ";
        cin >> A;
        cout << "Mes: ";
        cin >> B;
        cout << "A"<<nh<<"o: ";
        cin >> C;
        cout << endl;
        while (A>31 || A<1 || B<1 || B>12 || C<1600)
        {
            cout << "La fecha no es correcta"<<endl<<endl;
            cout << "Dame una fecha valida:" <<endl <<endl;
            cout << "Dia: ";
            cin >> A;
            cout << "Mes: ";
            cin >> B;
            cout << "A"<<nh<<"o: ";
            cin >> C;
            cout << endl;
        }
        switch (B)
        {
            case 2:
            if (C%400==0 || (C%4==0&&C%100!=0))
            {
                bisiesto=1;
                diamax=29;
            }
            else
            {
                diamax=28;
                bisiesto=0;
            }
            break;
            case 4:
            case 6:
            case 9:
            case 11: diamax=30;
            break;
            default: diamax=31;
            break;
        }
    }
    if (C%400==0 || (C%4==0&&C%100!=0))
    {
        bisiesto=1;
    }
    else
    {
        bisiesto=0;
    }
    switch (B)
    {
        case 1: nD=0;
        break;
        case 2: nD=31;
        break;
        case 3: nD=59+bisiesto;
        break;
        case 4: nD=90+bisiesto;
        break;
        case 5: nD=120+bisiesto;
        break;
        case 6: nD=151+bisiesto;
        break;
        case 7: nD=181+bisiesto;
        break;
        case 8: nD=212+bisiesto;
        break;
        case 9: nD=243+bisiesto;
        break;
        case 10: nD=273+bisiesto;
        break;
        case 11: nD=304+bisiesto;
        break;
        case 12: nD=334+bisiesto;
        break;
    }

    D=nD+A;
    E=(C-1)/4;
    Y=D+C+E;
    R=Y%7;
    switch (R)
    {
        case 0: cout<<A<<"-"<<B<<"-"<<C<<" es viernes";
        break;
        case 1: cout<<A<<"-"<<B<<"-"<<C<<" es sabado";
        break;
        case 2: cout<<A<<"-"<<B<<"-"<<C<<" es domingo";
        break;
        case 3: cout<<A<<"-"<<B<<"-"<<C<<" es lunes";
        break;
        case 4: cout<<A<<"-"<<B<<"-"<<C<<" es martes";
        break;
        case 5: cout<<A<<"-"<<B<<"-"<<C<<" es miercoles";
        break;
        case 6: cout<<A<<"-"<<B<<"-"<<C<<" es jueves";
        break;
    }
    cout<<endl;

    system("PAUSE");
    return 0;
}
Esta entrada fue publicada en Informática e Internet. Guarda el enlace permanente.

Una respuesta a Cálculo del día de la semana de una fecha dada

  1. Curiosa esa fórmula para calcular el día de la semana!.. Muy bien aunque haya detalles mejorables.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s