Ola pessoal, eu tenho um programa em C feito que imprime o calendario do ano de 1900 em diante, porém este programa imprime o calendário de um dado ano, com os meses um em baixo do outro e eu preciso que o mesmo seja feito com os meses tres a tres um ao lado do outro, exemplo:
é impresso:
janeiro [caso 1]
fevereiro
março
abril
maio
junho
[...]
e deve ser impresso:
janeiro fevereiro março [caso 2]
abril maio junho
[...]
coloquei apenas o titulo dos meses, mas deve ser impresso em baixo d cada titulo o respectivo calendario. o programa que faz o mencionado no caso 1 é o seguinte [ele só é grande, mas não tem nada complexo, rapidinho vocês leêm e entendem]:
#include <stdio.h>
#include <stdlib.h>
/*
* Constantes:
* Os dias da semana são representados pelos inteiros de 0 a 6.
* Os meses do ano são representados pelos inteiros de 1 a 12.
*/
#define domingo 0
#define segunda 1
#define terca 2
#define quarta 3
#define quinta 4
#define sexta 5
#define sabado 6
#define NMAX 100
#define VERDADEIRO 1
#define FALSO 0
/* Prototipos de funcoes */
void forneca_instrucoes(void);
int obtenha_ano(void);
void imprima_calendario(int ano);
void imprima_calendario_do_mes(int mes, int ano);
void indente_primeira_linha(int dia_da_semana);
int numero_de_dias_do_mes(int mes, int ano);
int primeiro_dia_do_mes(int mes, int ano);
int eh_bissexto(int ano);
void imprima_cabecalho(int mes, int ano);
/* Programa principal */
int main()
{
int ano;
forneca_instrucoes();
ano = obtenha_ano();
imprima_calendario(ano);
system("pause");
return 0;
}
/* Esta função imprime uma mensagem com instruções para o usuário */
void forneca_instrucoes(void)
{
printf("Este programa imprime o calendario para um dado ano.\n");
printf("O ano não pode ser anterior a 1900.\n");
}
/*
* Esta funcao le um ano digitado pelo usuario. Se o usuario fornece
* um ano anterior a 1900, a funcao avisa que o ano deve ser pelo menos 1900.
* Quando um tal valor e' fornecido, a funcao devolve esse valor.
*/
int obtenha_ano(void)
{
int ano;
while (VERDADEIRO) {
printf("Calendario de que ano? ");
scanf("%d", &ano);
if (ano >= 1900){
printf("Calendario de %d\n\n", ano);
return ano;
}
printf("O ano precisa ser pelo menos 1900.\n");
}
}
/* Esta funcao imprime o calendario do ano dado. */
void imprima_calendario(int ano)
{
int mes;
for (mes = 1; mes <= 12; mes++) {
imprima_calendario_do_mes(mes, ano);
printf("\n");
}
}
/* Esta funcao imprime o calendario de um dado mes e ano. */
void imprima_calendario_do_mes(int mes, int ano)
{
int dia_da_semana, n_dias, dia, v[NMAX], A[NMAX][NMAX], B[NMAX][NMAX], C[NMAX][NMAX];
imprima_cabecalho(mes, ano);
printf(" Do Se Te Qu Qu Se Sa\n");
n_dias = numero_de_dias_do_mes(mes, ano);
dia_da_semana = primeiro_dia_do_mes(mes, ano);
indente_primeira_linha(dia_da_semana);
for (dia = 1; dia <= n_dias; dia++) {
printf(" %2d", dia);
if (dia_da_semana == sabado){
printf("\n");
}
dia_da_semana = (dia_da_semana + 1) % 7;
}
if (dia_da_semana != domingo) printf("\n");
}
/* Esta funcao imprime um cabecalho para o calendario do mes do ano dado.*/
void imprima_cabecalho(int mes, int ano)
{
switch(mes) {
case 1: printf(" Janeiro"); break;
case 2: printf(" Fevereiro"); break;
case 3: printf(" Marco"); break;
case 4: printf(" Abril"); break;
case 5: printf(" Maio"); break;
case 6: printf(" Junho"); break;
case 7: printf(" Julho"); break;
case 8: printf(" Agosto"); break;
case 9: printf(" Setembro"); break;
case 10: printf(" Outubro"); break;
case 11: printf(" Novembro"); break;
case 12: printf(" Dezembro"); break;
default: printf("não pode acontecer!\n"); exit(0);
}
printf(" %d\n", ano);
}
/*
* Esta funcao indenta a primeira linha de um calendario
* de um mes, imprimindo o numero suficiente de brancos
* para colocar o cursor na posicao correta para a impressao
* do primeiro dia daquele mes, que cai no dia da semana
* dado como parametro (dia_da_semana).
*/
void indente_primeira_linha(int dia_da_semana)
{
int i;
for (i = 0; i < dia_da_semana; i++) {
printf(" ");
}
}
/* Esta funcao devolve o numero de dias do dado mes do dado ano. */
int numero_de_dias_do_mes(int mes, int ano)
{
switch (mes) {
case 2:
if (eh_bissexto(ano)) return 29;
return 28;
case 4: case 6: case 9: case 11:
return 30;
default:
return 31;
}
}
/*
* Esta funcao devolve o dia da semana em que cai o dia
* primeiro do mes dado do ano dado.
*
* O metodo usado para determinar este dia da semana
* é simples: usamos o fato que 1/1/1900 foi uma
* segunda-feira e contamos o numero de dias decorridos
* desde então ate a data em questao.
*/
int primeiro_dia_do_mes(mes, ano)
{
int dia_da_semana, i;
dia_da_semana = segunda;
for (i = 1900; i < ano; i++) {
dia_da_semana = (dia_da_semana + 365) % 7;
if (eh_bissexto(i)) dia_da_semana = (dia_da_semana + 1) % 7;
}
for (i = 1; i < mes; i++) {
dia_da_semana = (dia_da_semana + numero_de_dias_do_mes(i, ano)) % 7;
}
return dia_da_semana;
}
/* Esta funcao devolve VERDADEIRO se o dado ano é bissexto. */
int eh_bissexto(int ano)
{
return ((ano % 4 == 0) && (ano % 100 != 0))
|| (ano % 400 == 0);
}
caso não tenha ficado claro o modo como está sendo impresso, podem colocar pra compilar esse código que está rodando direitinho. Só preciso de ajuda para a nova formataçao estipulada para impressao, sei que eu precisarei usar matrizes, mas não vi como usa-las aí, agradeço quem puder ajudar.
Pergunta
ovatsug
Ola pessoal, eu tenho um programa em C feito que imprime o calendario do ano de 1900 em diante, porém este programa imprime o calendário de um dado ano, com os meses um em baixo do outro e eu preciso que o mesmo seja feito com os meses tres a tres um ao lado do outro, exemplo:
é impresso:
janeiro [caso 1]
fevereiro
março
abril
maio
junho
[...]
e deve ser impresso:
janeiro fevereiro março [caso 2]
abril maio junho
[...]
coloquei apenas o titulo dos meses, mas deve ser impresso em baixo d cada titulo o respectivo calendario. o programa que faz o mencionado no caso 1 é o seguinte [ele só é grande, mas não tem nada complexo, rapidinho vocês leêm e entendem]:
caso não tenha ficado claro o modo como está sendo impresso, podem colocar pra compilar esse código que está rodando direitinho. Só preciso de ajuda para a nova formataçao estipulada para impressao, sei que eu precisarei usar matrizes, mas não vi como usa-las aí, agradeço quem puder ajudar.
obrigado
Editado por ovatsugLink para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.