pessoal, sou universitário, e esse trabalho é para ajudar na avaliação final, eu fiz ele, só que não esta dando certo:
1- quando mostra os meses na tela, janeiro sempre pula um dia
2- contador de ano bissexto não consegui arrumar
alguem pode me ajudar a arrumar o código?
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define LINHAS 5
#define COLUNAS 7
void imprimir_dia_semana(int dia){
switch(dia){
case 1:
printf("Dom");
break;
case 2:
printf("Seg");
break;
case 3:
printf("Ter");
break;
case 4:
printf("Qua");
break;
case 5:
printf("Qui");
break;
case 6:
printf("Sex");
break;
case 7:
printf("Sab");
break;
default:
printf("Impossivel imprimir.\n");
}
}
void imprimir_mes(int mes){
switch(mes){
case 1:
printf("\tJaneiro\n\n");
break;
case 2:
printf("\tFevereiro\n\n");
break;
case 3:
printf("\tMarco\n\n");
break;
case 4:
printf("\tAbril\n\n");
break;
case 5:
printf("\tMaio\n\n");
break;
case 6:
printf("\tJunho\n\n");
break;
case 7:
printf("\tJulho\n\n");
break;
case 8:
printf("\tAgosto\n\n");
break;
case 9:
printf("\tSetembro\n\n");
break;
case 10:
printf("\tOutubro\n\n");
break;
case 11:
printf("\tNovembro\n\n");
break;
case 12:
printf("\tDezembro\n\n");
break;
default:
printf("Numero invalido!\n");
}
}
void calcular_dia_semana(int* dia_semana,int ano,int* bisexto){
int mes_atual,ano_atual,dia,flag = 0;
(*dia_semana) = 1;
*bisexto = 0;
for(ano_atual = 1; ano_atual < ano;ano_atual ++){
*bisexto = *bisexto + 1;
for(mes_atual = 1;mes_atual <= 12;mes_atual++){
for(dia = 1;dia <32;dia++){
if(mes_atual < 8 && mes_atual % 2 != 0 || mes_atual >= 8 && mes_atual % 2 == 0){
if(dia == 32){
break;
}
}
else{
if(mes_atual == 2){
if( *bisexto == 4 ){
if(dia > 29){
*bisexto = 0;
break;
}
}
else{
if(dia > 28){
break;
}
}
}
if(dia == 31){
break;
}
}
flag++;
if( (*dia_semana) < 7 ){
(*dia_semana) = (*dia_semana) + 1;
}
else{
(*dia_semana) = 1;
}
}
}
}
*bisexto = *bisexto + 1;
printf("Rodei %d vezes\n",flag);
imprimir_dia_semana(*dia_semana);
printf("\n");
}
void exibir_calendario(int dia_semana,int ano,int bisexto){
int i,j,mes,dia = 1,flag = 1,dia_semana_atual = dia_semana;
for(mes = 1;mes <= 12;mes ++ ){
imprimir_mes(mes);
for(i = 1;i <= COLUNAS;i ++){
imprimir_dia_semana(i);
}
printf("\n");
for(i = 0;i < LINHAS;i ++){
for(j = 0;j < COLUNAS;j ++){
//se é a primeira linha e o flag é menor que o dia da semana
if(i == 0 && flag < dia_semana ){
printf(" |");
flag++;
j = -1;
continue;
}
if( j == (7 - dia_semana) ){
printf("\n");
}
if( dia < 9)
printf("%d ",dia);
else
printf("%d ",dia);
dia++;
if(mes < 8 && mes % 2 != 0 || mes >= 8 && mes %2 == 0){
if(dia == 32){
break;
}
}
else{
if(mes == 2){
if(bisexto){
if(dia > 29){
flag = 0;
dia_semana = dia_semana_atual;
bisexto = 0;
break;
}
}else{
if(dia > 29){
flag = 0;
dia = 1;
dia_semana = dia_semana_atual;
break;
}
}
}
if(dia == 31){
break;
}
}
//incrementando dia da semana
if( (dia_semana_atual) < 7 ){
dia_semana_atual++;
}
else{
(dia_semana_atual) = 1;
}
}
}
printf("\n\n");
flag = 0;
dia = 1;
dia_semana = dia_semana_atual;
}
}
main(){
int dia_semana,ano,bisexto;//1 = domingo 2 = segunda ...
printf("Ano: ");
scanf("%d",&ano);
calcular_dia_semana(&dia_semana,ano,&bisexto);
if(bisexto == 4)
bisexto = 1;
else
bisexto = 0;
exibir_calendario(dia_semana,ano,bisexto);
return 0;
}
pedidos urgentes e sinceros de um acadêmico que não quer rodar mais uma vez nessa cadeira, valeu!