Red de conocimientos turísticos - Conocimientos sobre calendario chino - Ayuda del programa calendario perpetuo c

Ayuda del programa calendario perpetuo c

#include "stdio.h"

#define ENTER 0x1C0D /* Ingresar clave */

int año, mes, día

carácter estático *días[ 8 ] = {" ", "Domingo ", "Lunes ", "Martes ","

"Miércoles ", "Jueves ", "Viernes ", "Sábado"};

struct TIMEDATE {

int año; /* año 1980..2099 */

int mes; /* mes 1=2 de enero=febrero, etc.

int día; /* mes día 0...31 */

int horas; /* hora 0...23 */

int minutos /* minuto 0 ...59 */

int segundos; /* segundo 0...59 */

int hsecs /* 1/100s de segundo 0,99 */

char dateline[47]; /* fecha y hora juntas */

};

estructura estática TIMEDATE hoy

main();

{

char cmes[3];

char cday[3]

char caño[5]; >

double getdays();

double daynumb, numbnow;

int día laborable, retcode, dayer,

dayer = datetime(&. hoy

clrscn();

para (i=0;i<3;++i)cmonth[i]='\0'; p> para (i=0;i<3;++i)cdía[i]='\0';

para (i=0;i<5;++i)caño[i ]='\0';

putstr(5,8,14, "Ingrese la fecha en formato MM DD AAAA:");

while (retcode! = ENTER)

{

retcode = bufinp(5,41,13,2,cmonth);

if (retcode ! = ENTER) retcode = bufinp (5,44,13,2,cdía);

if (retcode ! = ENTER) retcode = bufinp(5,47,13,4,cyear); /p>

Año = atoi(&caño);

Mes = atoi(&cmes);

Día = atoi(&. cdía); daynumb = getdays(año, mes, día);

entumecido = getdays(hoy.año, hoy.mes, hoy.

día);

día de la semana = días de la semana( día entumecido);

if (numbnow - día entumecido == 0)

printf("\n\n%02d- %02d-%d es",mes, día, año);

if (numbnow - daynumb > 0)

printf("\n\n%02d-%02d- %d era",mes, día, año);

if (numbnow - daynumb < 0)

printf("\n\n%02d-%02d-%d ser",mes, día, año);

printf("\n\n%02d-%02d-%d será",mes, día, año);

printf(" a %s\n",días[día de la semana]);

}/* end MAIN */

/************ ********************************************

* GETDAYS: basándose en el valor entero del año (AAAA), mes *

* día (DD), esta subrutina devuelve un *

* número de punto flotante doble que representa los años transcurridos desde 1980 El *

* número de días desde el 1 de enero (Día 1).

*Esta rutina es lo opuesto a GETDATE.

******************************************* *******************/

double getdays(año, mes, día)

int año, mes, día;

p>

{

int y,m;

doble a,b,d, día entumecido; intg();

doble piso(),intg()

/***************************; **** ****

** Corrección sin año 0 **

******************** **** **********/

if (año & lt; 0) y = año + 1

else y = año

/********************************************* **** *********

** En este cálculo, enero y febrero son los meses 13 y 14**

****** ************************************************** * */

m = mes

si (mes < 3)

{

m = m + 12

p >

y = y - 1

}

/************************ * **

** Calcular el día juliano**

********************** ** /

d = piso(365.25 * y) + intg(30.6001 * (m + 1)) + día - 723244.0

/************ **********************************

** Si en Octubre de 1582 Antes del 5 del mes, utilice el calendario juliano**

****************************** ** ************/

if (d < -145068.0) daynumb = d

/ ******** ** ***************************

**En caso contrario, utilice el calendario gregoriano**

***********************************/

más

{

a = piso(y / 100.0);

b = 2 - a + piso(a / 4.0);

díaentumecido = d); + b;

}

return(daynumb);

}/* Fin GETDAYS */

/***** ************************************************** * *

* GETDATE - Esta rutina obtiene un número de punto flotante doble *

* * que representa la fecha desde el 1 de enero de 1980 (día 1)

El número de días y devuelve el año, mes, *

* día*

* Esta rutina es lo opuesto a GETDAYS*

*** * ************************************************** ***/

getdate(numb)

doble entumecido

{

doble a,aa,b,c,d ,e,z;

fecha doble;

fecha = entumecido;

z = intg(fecha + 2444239.0); (fecha < - 145078.0) a = z;

en caso contrario

{

aa = piso((z - 1867216.25) / 36524.25);

a = z + 1 + aa - piso(aa/4.0);

}

b = a + 1524.0;

c = intg((b - 122.1) / 365.25);

d = intg(365.25 * c);

e = intg((b - d) / 30.6001); /p>

día = b - d - intg(30.6001 * e);

if (e >.13.5) mes = e - 13.0

else mes = e; - 1,0;

si (mes > 2) año = c - 4716,0

más año = c - 4715,0

si (año < 1) - año;

retorno;

}/* Fin GETDATE */

/****************** ******* ****************************************

* DÍAS DE LA SEMANA: esta rutina obtiene un número de punto flotante doble *

* que representa el número de días desde el 1 de enero de 1980 (día 1) y devuelve el día de la semana *

* donde 1 = domingo, 2 = martes, etc.

******************************************* ************/

int días laborables(entumecido)

doble entumecido

{

doble dd;

int día;

dd = entumecido

mientras (dd > 28000.0) dd = dd - 28000.0; > mientras (dd < 0) dd = dd + 28000.0;

día = dd

día = ((día + 1) % 7) + 1; p> retorno(día);

}

/*************************** *** *******************************

*FRACT - Esta rutina recibe un número de coma flotante doble *

* Y la parte decimal como doble*

* Devuelve un número de coma flotante*

*********** ****** *************************************/

doble frac(entumecido )

doble entumecido

{

int inumb;

doble fnumb; >

doble fnumb); (int inumb;

doble fnumb)

mientras (numb <-32767) entumecido += 32767

mientras (entumecido > 32767 ) entumecido -= 32767;

entumecido = entumecido;

fnumb = entumecido

return( entumecido-fnumb);

} /* Fin FRACT */

/********************************* **** ************************

*PISO - Esta rutina recibe un número de coma flotante doble *

* y devuelve el siguiente entero más pequeño*

****************************** ******** *******************/

doble piso(entumecido)

doble entumecimiento <; /p>

{

doble fract(), intg();

doble salida

salida = intg(entumecido); >

if (entumecido < 0 & & fract(entumecido), intg(entumecido), intg(entumecido), intg(entumecido), intg(entumecido), intg(entumecido), intg(entumecido), intg(entumecido) ) amp;& frac(adormecido) ! = 0) salida -= 1.0;

return(salida);

}/* final PISO */

/******* *************************

************************

*INTG - Esta rutina obtiene un número de punto flotante doble*

* Y devolver la parte entera como un número de coma flotante doble*

* Número de coma flotante*

****************** *** ***** *******************************/

doble intg(entumecido )

p>

doble entumecido

{

doble fracta();

retorno(entumecido - fracta(entumecido));

}/* Fin INTG */