Calendario

Noelia_pucela
13 de Enero del 2005
Estoy haciendo el siguiente ejercicio:
Crear un programa en C que nos muestre el calendario anual,
para un año introducido por teclado, mayor que el año 1900.
Teniendo en cuenta que el 1 de Enero de 1900 fue Lunes.
El calendario se tiene que mostrar con el siguiente formato:
**********ENERO****************
L M Mx J V S D
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Se supone q los dias de la semana y los numeros tienen que estar tabulados
El programa nos tiene que dar la posibilidad de mostrar solamente un mes
de un año determinado.
Este es el codigo que yo tngo exo cuando le compilo no me imprime por pantalla todos los dias del mes me gustaria saber que tngo que cambiar en la funcion void escribir_mes para que me lo imprima correctamente. X favor lo necesito antes del martes dia 7 de diciembre de 2004. Este es mi codigo.
#include <stdio.h>
#include <conio.h>
int dias_mes(int,int,int);
int dia_semana(int,int,int);
int dia_anno(int,int,int,int);
void escribir_mes(int,int,int,int,int);
main()
{
int mes,anno,dias,cont,diase;
int opcion;
printf("Dime el anno que quieres introducir:");
scanf("%d",&anno);
printf("Dime el mes que quieres introducir:");
scanf("%d",&mes);
//dias_mes(mes,anno,dias);
//dia_semana(cont,diase,anno);
//dia_anno(cont,mes,diase,anno);
escribir_mes(mes,anno,cont,diase,dias);
getch();
}
int dias_mes(int mes,int anno,int dias)//Esta función sirve para calcular los dias que tiene un mes
{
switch(mes)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
dias=31;
break;
case 4:
case 6:
case 9:
case 11:
dias=30;
break;
case 2:
if((anno%4==0)&&(anno%100!=0)||(anno%400==0))
{
dias=29;
}
else
{
dias=28;
}
break;
default:printf("nMes erroneo");
}
}
int dia_semana(int cont,int diase,int anno)//Esta función sirve para saber en que dia cae el primer dia del mes
{
cont=1900;//Contador de años
diase=0;//Cuenta los dias de la semana
while(cont<anno)
{
if((anno%4==0)&&(anno%100!=0)||(anno%400==0))
{
diase=diase+2;
}
else
{
diase=diase+1;
}
cont=cont+1;
}
}
int dia_anno(int cont,int mes,int diase,int anno)//Esta funcion sirve para escribir los dias del mes
{
for(cont=1;cont<=mes-1;cont++)
{
switch(mes)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
diase=diase+31;
break;
case 4:
case 6:
case 9:
case 11:
diase=diase+30;
break;
case 2:
if((anno%4==0)&&(anno%100!=0)||(anno%400==0))
{
diase=diase+29;
}
else
{
diase=diase+28;
}
break;
}
}
}
void escribir_mes(int mes,int anno,int cont,int diase,int dias)
{
int dsem,diasmes,i;
switch(mes)
{
case 1:printf("ttEnero");break;
case 2:printf("nttFebrero");break;
case 3:printf("nttMarzo");break;
case 4:printf("nttAbril");break;
case 5:printf("nttMayo");break;
case 6:printf("nttJunio");break;
case 7:printf("nttJulio");break;
case 8:printf("nttAgosto");break;
case 9:printf("nttSeptiembre");break;
case 10:printf("nttOctubre");break;
case 11:printf("nttNoviembre");break;
case 12:printf("nttDiciembre");break;
}
printf("t%d",anno);
printf("nLt");
printf("Mt");
printf("Mt");
printf("Jt");
printf("Vt");
printf("St");
printf("Dt");
dsem=dia_semana(cont,0,anno);
if(dsem==0)
{
dsem=7;
}
diasmes=dias_mes(mes,anno,dias);
diasmes+=dia_anno(cont,mes,diase,anno);
for(i=0;i<dsem-1;i++)
{
printf(" ");
//printf("t");
}
for(i=0;i<=diasmes;i++)
{
printf("%dt",i+1);
if(++dsem==6)
{
printf("n");
dsem=0;
}
}
printf("n");
}

Le tngo que hacer de esa manera, osea cm e puesto en el codigo.

Aritz Lopez
13 de Enero del 2005
No se si esto te va a servir ya (puesto que lo pedías para el 7 de diciembre) pero bueno. Veo que falla que no se ponen los dias debajo de los numeros, yo lo hice así:
/*Poner los dias de la semana*/
printf("nLtMtMXtJtVtStDn");
for(cont=1;cont<r;cont++)
printf("t");
/*Poner los numeros pertenecientes a los dias*/
for(dias_mes=1;dias_mes<=maxdias;dias_mes++)
{
printf("%dt",dias_mes);
if(cont==7)
{
printf("n");
cont=0;
}
cont++;
}
return 0;

No se si te servirá de mucho, si no lo entiendes me mandas un e-mail, ok?
adios