Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- int bisiesto(int);
- int cuantos_bisiestos(int);
- int numero_dias(int,int,int);
- int menu(void);
- void dia_semana_fecha(void);
- void mostrar_mes(void);
- void mostrar_anyo(void);
- int imprimir_mes(int,int,int);
- int dias_mes[]={31,28,31,30,31,30,31,31,30,31,30,31}; //Dias que tiene cada mes del año.
- char dia_semana[7][10]={"Lunes","Martes","Miercoles","Jueves","Viernes","Sabado","Domingo"};
- char meses_anyo[][12]={"Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto",
- "Septiembre","Octubre","Noviembre","Diciembre"};
- main()
- {
- int mes_usuario,anyo_usuario,c,numero,d_semana,bis;
- putchar('\n');
- do
- {
- fflush(stdin);
- printf("¿Mes(1..12)?");
- c=scanf("%d",&mes_usuario);
- if(mes_usuario<1 || mes_usuario>12 || c!=1)
- printf("\nERROR. DATO NO VALIDO\n");
- }while(mes_usuario<1 || mes_usuario>12 || c!=1);
- do
- {
- fflush(stdin);
- printf("¿Año(1601..3000)?");
- c=scanf("%d",&anyo_usuario);
- if(anyo_usuario<1900 || c!=1)
- printf("\nERROR. DATO NO VALIDO\n");
- }while(anyo_usuario<1900 || c!=1);
- bis=bisiesto(anyo_usuario);
- if(bis==1)
- dias_mes[1]=29;
- numero=numero_dias(1,mes_usuario,anyo_usuario);
- d_semana=numero%7;
- //Ahora se en que dia empieza el mes_usuario (0=Lunes, 1=Martes, ... , 6=Domingo).
- printf("\n%s %d ",meses_anyo[mes_usuario-1],anyo_usuario);
- imprimir_mes(d_semana,mes_usuario,anyo_usuario);
- }
- void mostrar_anyo(void)
- {
- int anyo_usuario,c,numero,d_semana,i,d,bis;
- do
- {
- fflush(stdin);
- printf("Introduce anyo (>1900): ");
- c=scanf("%d",&anyo_usuario);
- if(anyo_usuario<1900 || c!=1)
- printf("\nERROR. DATO NO VALIDO\n");
- }while(anyo_usuario<1900 || c!=1);
- bis=bisiesto(anyo_usuario);
- if(bis==1)
- dias_mes[1]=29;
- numero=numero_dias(1,1,anyo_usuario);
- d_semana=numero%7;
- //Ahora se en que dia empieza el anyo_usuario (0=Lunes, 1=Martes, ... , 6=Domingo).
- for(i=0;i<12;i++) //Imprimo los 12 meses del año.
- {
- printf("\n\n\n ***** %s *****\n",meses_anyo[i]);
- d=imprimir_mes(d_semana,i+1,anyo_usuario); //d es la posicion de escritura en el calendario.
- d_semana=d; //Para saber donde empiezo a escribir el siguiente mes.
- }
- }
- int bisiesto(int anyo)
- {
- if((anyo%4==0 && anyo%100!=0) || anyo%400==0 )
- return 1;
- return 0;
- }
- int cuantos_bisiestos(int anyo)
- {
- int i,n=0;
- for(i=1900;i<anyo;i++) //Si el anyo introducido es bisiesto no se tiene en cuenta.
- {
- if(bisiesto(i)==1)
- n++;
- }
- return n;
- }
- int numero_dias(int dia, int mes, int anyo)
- {
- int numero=0,i;
- numero=365*(anyo-1900);
- for(i=0;i<(mes-1);i++)
- numero+=dias_mes[i];
- numero+=dia-1; //dia-1 porque empezamos a contar desde el dia 1 y no desde el dia 0.
- numero+=cuantos_bisiestos(anyo); //Sumo el dia extra de los años que tienen 366 dias.
- return numero;
- }
- int imprimir_mes(int d_semana,int mes, int anyo)
- {
- int j,d=1;
- printf("\n==========================");
- printf("\nLU MA MI JU VI | SA DO\n===========================\n");
- int columna=0;
- while(columna<d_semana){
- if(columna!=4) printf(" . ");
- else printf(" . |")
- ;columna++;
- } //Imprimo espacios hasta llegar el dia de la semana donde empieza el mes.
- for(j=0;j<dias_mes[mes-1];j++) //Imprimo tantos numeros como tenga dicho mes.
- {
- if(d<10) //Para justificar a la derecha los numeros de una cifra.
- putchar(' ');
- if (columna%7 == 4)
- printf("%d |",d);
- else
- printf("%d ",d);
- d++;
- columna++;
- if(columna%7==0) //Si hemos escrito el domingo, imprimo salto de linea para imprimir debajo de Lu.
- putchar('\n');
- }
- if(columna%7 != 0)
- {
- while(columna%7!=0) {
- if(columna%7!=4)
- printf(" . ");
- else
- printf(" . |");
- columna++;
- }
- }
- return (columna%7); //Devuelvo la posicion de escritura del calendario.
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement