#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
char *meses[] = {"Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"};
int agnoBisiesto(int agno)
{
return !(agno%4) && (agno%100 || !(agno%400));
}
int diaFecha(int dia, int mes, int agno)
{ //Algoritmo de Doomsday
int modA[2][12]= {{0,3,3,6,1,4,6,2,5,0,3,5},{0,3,4,0,2,5,0,3,6,1,4,6}};
agno--;
return ( (agno%7) + ((agno/4)-(3*(agno/100+1))/4) + modA[agnoBisiesto(agno+1)][mes-1] + dia%7 )%7;
}
int diaFinal(int mes, int agno)
{
int dias[] = {31,28 + agnoBisiesto(agno),31,30,31,30,31,31,30,31,30,31};
return dias[mes-1];
}
void mostrarMes(int mes, int agno)
{
clrscr();
int diaSem = diaFecha(1,mes, agno);
int ultimoDia = diaFinal(mes, agno);
int x;
printf("%s de %d\n",meses
[mes
-1],agno
); printf("Dom\tLun\tMar\tMie\tJue\tVie\tSab\n"); for(x = 0; x < diaSem; x++) //Imprime la tabulacion de los dias vacios inciales del Mes
for(x = 1; x <= ultimoDia; x++)
{
if( !( ++diaSem % 7 ) )//si el modulo de diaSem despues de incrementar es 0 inicia en una nuea linea
}
//Por si te gusta reducir el codido :D
//for(x = 0; x < diaSem; printf("\t"), x++);
//for(x = 1; x <= ultimoDia; printf("%d%s",x++, (++diaSem % 7 ) ? "\t":"\n" ) );
}
/*
Funcion para evitar errores al ingresar un valor que no se un numero
Se lee primero como cadena y despues se convierte a numero entero -> atoi
si es numero es valido se convertira correctamente sino sera un cero
*/
int leerNum()
{
char valorTexto[4];
}
int mesValido(int mes)
{
int valido = !(mes < 1 || mes > 12);
if (!valido)
printf("El %d no es un mes valido (1-12)\n",mes
); return valido;
}
int agnoValido(int agno)
{
int valido = !(agno < 1900);
if (!valido)
printf("El %d no es un agno valido (>=1900)\n",agno
); return valido;
}
void leerMesAgno(int *mes, int *agno)
{
printf("Ingrese el mes y agno para visualizarlo\n"); do{
*mes = leerNum();
if (mesValido(*mes))
break;
}while(1);
printf("Mes Seleccionado: %s(%d)\n",meses
[*mes
-1],*mes
); do{
*agno = leerNum();
if (agnoValido(*agno))
break;
}while(1);
}
int continuar()
{
printf("\nDesea ver otro mes (s/n): "); }
int main(int argc, char *arg[])
{
int mes, agno, resp=1;
if(argc==3)
{
clrscr();
printf("Mes: %d[%s] Agno: %d[%s]\n", mes
,arg
[1],agno
,arg
[2]); if( (mesValido(mes) && agnoValido(agno)) )
mostrarMes(mes, agno);
else
printf("Se esperaban 2 parametros: Mes(1-12) y Agno(>=1900)\nEn el Formato(mm yyyy)"); resp = continuar();
}
while(resp)
{
clrscr();
leerMesAgno(&mes, &agno);
mostrarMes(mes, agno);
resp = continuar();
}
}