Ir para conteúdo
Fórum Script Brasil
  • 0

Calendario em c


Elton Carlos

Pergunta

Olá pessoal estou com dificuldades no meu código de como gerar duas ou mais matrizes na mesma linha, é um calendario e deve sair o formato como um calendario.

Por favor me ajudem

abaixo mando o código que está gerando o calendario de forma linear com algins erros.

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#include<dos.h>

#include<math.h>

#define M_LINHA 6

#define M_COLUNA 7

typedef int vetor[42];

typedef char v_sem[6][8];

typedef int v_mes[M_LINHA][M_COLUNA];

int le_ano()

{

int ano;

printf("INFORME UM ANO \t");

scanf("%d", &ano);

return(ano);

}

int le_mes()

{

int mes;

printf("DIGITE UM MES QUALQUER\t\n\n");

scanf("%d", &mes);

return (mes);

}

int calcula_dia(int ano, int mes) //esta funçao calcula o dia que começa a semana

{

int a,y,m,

dia=1,d;

a = (14-mes)/12;

y = ano - a;

m = mes + 12*a - 2;

int kl = (1 + y + y/4 - (y/100) + (y/400) + ((31 * m)/12));

d = kl % 7;

return(d);

}

//carrega o vetor para cabeçalho dos dias da semana.

void semana(v_sem semana_1)

{

strcpy(semana_1[0],"DOM");

strcpy(semana_1[1],"SEG");

strcpy(semana_1[2],"TER");

strcpy(semana_1[3],"QUA");

strcpy(semana_1[4],"QUI");

strcpy(semana_1[5],"SEX");

strcpy(semana_1[6],"SAB");

}

//mostra a o cabeçalho dos dias semana

void mostra_semana(v_sem semana_1)

{

int i;

for(i=0;i<7;i++)

{

printf("%0.5s ", semana_1);

}

printf("\n");

}

//mostra o mes de 31 dias preenchendo a matriz com apenas 31 numeros

void mes_completo_31(v_mes mes_1)

{

int count,count_2,count_3,k; //count - contador para linha, count_2 - contador para coluna, count_3 - contador para preencher a matriz

k=1; // K recebera quant_dia para preencher a matriz.

for(count=0;count<M_LINHA;count++)

{

for(count_2=0;count_2<M_COLUNA;count_2++)

{

mes_1[count][count_2]=k;

k++;

if (k==32) return;

}

}

}

void completo(v_mes mes_1, int ano, int mes)

{

int count,count_2,count_3,k=1,

inicio=calcula_dia(ano,mes),

COLUNA,

valor_coluna=-1,

valor_linha=0;

//laço que imprime espaços em branco na tela conforme o valor calculado da função calcula_dia

while (inicio!=0){

inicio--;

printf(" ");

}

//for que controla as linhas da matriz do calendario

for(count=0;count<M_LINHA;count++)

{

// verifica se é a primeira semana do calendario, se count é igual a zero então é a primeira semana

if (count == 0)

COLUNA = M_COLUNA - calcula_dia(ano,mes);

else

COLUNA = M_COLUNA;

for(count_2=0; count_2< COLUNA; count_2++)

{ valor_coluna++;

printf("%2d ", mes_1[valor_linha][valor_coluna]);

k++;

if (6==valor_coluna){

valor_coluna=0;

valor_linha++;

}

if (k==30) return;

}

printf("\n\n");

}

}

//Esta função imprimi em arquivo .txt

void imprimi_txt(v_mes mes_1, int ano, int mes,FILE *fp)

{

int count,count_2,count_3,k=1,

inicio=calcula_dia(ano,mes),

COLUNA,

valor_coluna=-1,

valor_linha=0;

fp = fopen("calendario.txt","w");

// Verificando se houve erros na associação com o arquivo.

if (fp==NULL) {

// Interrompe programa.

puts("não foi possivel abrir o arquivo solicitado.\n");

exit(EXIT_FAILURE);

}

//laço que imprime espaços em branco na tela conforme o valor calculado da função calcula_dia

while (inicio!=0){

inicio--;

printf(" ");

}

//for que controla as linhas da matriz do calendario

for(count=0;count<M_LINHA;count++)

{

// verifica se é a primeira semana do calendario, se count é igual a zero então é a primeira semana

if (count == 0)

COLUNA = M_COLUNA - calcula_dia(ano,mes);

else

COLUNA = M_COLUNA;

for(count_2=0; count_2< COLUNA; count_2++)

{ valor_coluna++;

//fseek (fp,0,SEEK_END);

fprintf(fp,"%d",&mes_1[valor_coluna][valor_linha]);

k++;

if (6==valor_coluna){

valor_coluna=0;

valor_linha++;

}

if (k==30) return;

}

printf("\n\n");

}

fclose(fp);

}

// Esta função imprimi o calendario interio.

void imprime_ano(int ano, v_sem semana_1, FILE *fp){

v_mes mes_1;

char nome_meses [12][12] ={"JANEIRO", "FEVEREIRO" ,"MARCO" ,"ABRIL", "MAIO" ,"JUNHO", "JULHO", "AGOSTO" ,"SETEMBRO" ,"OUTUBRO", "NOVEMBRO", "DEZEMBRO"};

int mes;

for(mes=-1; mes<11; ++mes)

{ printf("\n\n\t%s\n\n", &nome_meses[mes][12]);

mostra_semana(semana_1);

mes_completo_31(mes_1);

completo(mes_1, ano, mes+2);

imprimi_txt( mes_1,ano,mes+2,fp);

printf("\n\n\n\n");

}

}

void mes(vetor vet)

{

int count, count_2,k;

printf("\n");

for(count=0;count<43;count++)

{

vet[count]=k;

k++;

}

printf("\n");

}

void mostra_mes(vetor vet)

{

int count, count_2;

for(count=0;count<M_LINHA;count++)

printf("%d", vet[count]);

}

main()

{

v_sem semana_1;

v_mes mes_1; //declaração de vetor

vetor vet;

int ano_1,mes;

FILE *fp;

//CHAMADA DE FUNÇÕES.

ano_1 = le_ano();

mes = le_mes();

calcula_dia(ano_1,mes);

printf("%d \n\n",calcula_dia(ano_1,mes));

semana(semana_1);

mostra_semana(semana_1);

mes_completo_31(mes_1);

completo(mes_1,ano_1,mes);

printf("\n\n");

//mes(vet);

//mostra_mes(vet);

int ano45;

printf("digite um ano");

scanf("%d", &ano45);

imprime_ano(ano45,semana_1,fp);

imprimi_txt( mes_1,ano_1,mes,fp);

system("pause");

}

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Olá Elton Carlos,

Bom, pelo que eu entendi, você deseja criar um calendário de um determinado ano completo em um arquivo de texto, e está encontrando dificuldades na formatação do mesmo.

Se for isso, lhe informo que todos os caracteres de formatação que você usa no printf serve também para o fprintf, (\n, \t, %2d, ...)

Rodei o seu código, (após adicionar a biblioteca String.h), percebi que o principal problema é que você imprime todos os números sem espaçamento algum no arquivo, além do que, você está imprimindo apenas os endereços de memória do seu array no arquivo,

troque

fprintf(fp,"%d",&mes_1[valor_coluna][valor_linha]);
por
fprintf(fp,"%d ",mes_1[valor_coluna][valor_linha]); //sem &

ah, e evite postar o código todo, principalmente sem endentação/formatação, pois dificulta e muito a leitura e interpretação

Se não for o caso, volte a postar explicando mais detalhadamente a lógica de seu algoritmo bem como sua dificuldade

Abraço,

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...