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
Pergunta
Elton Carlos
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
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.