Ir ao conteúdo
  • Cadastre-se

Calendario em C


Posts recomendados

galera fiz uma parte do programa, ele verifica se o ano é bissexto, se é antes da implementacao do calendario gregoria, etc... mas a duvida é a seuginte, como vou fazer pro programa despachar os 365 dias dentro dos 12 meses? sacaram?? vou colocar o programa a baixo ai vocês dao uma olhada, se tiverem uma ideia, ajuda ai....

arquivo de funcoes:


#include <stdio.h>

//recebe o ano digitado pelo usuario
int pergunta()
{
         int ano;
        
         printf("Calendario de qual ano você deseja consultar: ");
         scanf("%d",&ano);
         fflush(stdin);
        
         return(ano);
}
    
//Calendario dos anos posteriores a 1582
int posterior()
{
    //funcoes
          printf("tesntando a funcao somente");    
}

//Calendario do ano 1582
int particular()
{
    //funcoes
         printf("testando a funcao somente\n");
}

//Calendario dos anos inferiores a 1582
int inferior()
{
    //funcoes
         printf("testando a funcao somente\n");    
}

//verifica se o ano é gregoriano
int teste()
{
int ano;
          
ano=pergunta();
          
if(ano>1582)
{
  printf("%d ano maior que 1582\n",ano);
  posterior();
  return(ano);
}
else
{
  if(ano==1582)
  {
   printf("1582 e um ano particular\n");
   particular();
  }
   else if(ano<1582)
   {
    printf("%d ano menor que 1582\n",ano);
    inferior();
    return(ano);  
   }
}
}

//verifica se o ano é bissexto
int bissexto()
{
    int ano;
    int resto;
    
    ano=teste();
    
    resto=ano%4;
    
    if(resto==0)
    {
                printf("ano e bissexto\n");
                return(1);
    }

    if(resto!=0)
    {
                printf("ano normal\n");
                return(0);
    }
}


//da o numero de dias de um ano
int dias()
{
    int dias;
    int bi;
    
    bi=bissexto();
    
    if(bi==1)
    {
                   dias=365+bi;
    }
    
    else if(bi==0)
    {
                        dias=365;
    }

printf("o ano tem %d dias",dias);
return(dias);
}

arquivo principal:


#include "cal.h"

int main()
{

dias();

getchar();
}

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

A questão do bissexto é simples, basta ver se o número do ano é divisível por 4, se for então é bissexto.

Eu tenho uma rotina em clipper que implementa um calendário permanente, se for ajudar eu posto ela. O problema (para quem só usa C) é que o clipper já tem funções prontas tipo a dow() que retorna o dia da semana para uma determinada data. Aliás, o fato de ele usar data como um tipo de campo já é show...

Link para o comentário
Compartilhar em outros sites

Cara, to no 1 semestre de eng da computacao, isso é um trabalho que o professor mandou fazer, acho que ele fumou uma maconha antes... A questao é a seguinte, eu tenho que usar somente C no programa... A verificacao do ano bissexto eu aj fiz, mas o meu problema é implementar os dias(365 normal 366bissexto) nos 12 meses, não estou conseguindo pensar nessa distribuicao, levando em conta que nem td mes comeca numa segunda feira...

valeu...abraços...

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Uma pequena ajuda...

1) Ano bissexto são (todos os divisíveis por 4 que não sejam divisíveis por 100) ou todos os divisíveis por 400;

2) Para saber quantos dias passaram de 1º de janeiro de algum ano a 1º de janeiro de outro ano faça: dias = 365 * (anoA - anoB) + (número de anos bissextos entre os dois).

3) Para saber em que dia da semana caiu 1º de janeiro divida quantos dias passaram a partir de uma data base, divida por 7, o resto corresponde ao dia da semana;

4) O switch do C é uma mão na roda na hora de dizer quantos dias passaram desde o início do ano até dia 1º de algum mes:


int dias = 0;
switch(mes)
{
case 12:
dias += 31;
case 11:
dias += 30;
case 10:
dias += 31;
//...
case 2:
dias += 28 + bissexto;
}

5) A inversa da de cima pode ser feita com if-else;

obs: Eu sei que não postei muito código, mas estou sem tempo e a lição de casa é sua, não minha ;)

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

A regra para ano bissexto é: Se for divisível por 4, mas não for divisível por 100 ou se for divisível por 400, exemplos:

1896 - bissexto, é divisível por 4;

1900 - Não é bissexto, é divisível por 4, mas tambem é divisível por 100;

2000 - É bissexto, apesar de ser divisível por 100 é divisivel por 400.

Link para o comentário
Compartilhar em outros sites

Eduardos cara desisto veio... não consigo fazer essa funcao... td hora acho um furo... teria como você colocar essa funcao q calculla quantos anos bissestos há entre duas datas?olhei o seu codigo acima, mas não consgui interpreta-lo direito... talvez seja o stress que este programa esta me causando... grrrrrrrrrr

Link para o comentário
Compartilhar em outros sites

ai galera já to perto do fim do programa... falta penas mostras os dias na tela... Se os calculo estiverem certos,mas quase certeza q estão.... vou por o programa ai, to tentando mostras os dia através de matriz, se vocês tiverem alguma ideia pra me ajudar fala.. valeu



#include <stdio.h>
#include <math.h>

//ano definido com padrão para os calculos deste programa
int padrão=2005; //1/1/2005 ---> sábado

//verifica se o ano é bissexto
int verificaBisexto(int ano)
{
    return (fmod(ano,4) == 0) & (fmod(ano,100) != 0) | (fmod(ano,400) == 0);
}

//da a quantidade de bissexto entre o ano digitado e o ano de 2005
int quant_bissexto(int ano)
{
    int quant_bissexto=0;
    
    if(ano==padrão)
    {
                  quant_bissexto=0;
                  return(quant_bissexto);
    }
    
    if(ano>padrão)
    {            
                  for(int i=padrão;i<=ano;i++)
                  {
                          quant_bissexto=quant_bissexto+verificaBisexto(i);
                  }
                  return(quant_bissexto);
    }
    
    if(ano<padrão)
    {
                  for(int i=ano;i<=padrão;i++)
                  {
                          quant_bissexto=quant_bissexto+verificaBisexto(i);
                  }
                  return(quant_bissexto);
    }
}

//fornece a diferenca de anos entre o ano digitado e o ano de 2005
int diferenca_de_anos(int ano)
{
    int diferenca;
    
    diferenca=ano-padrão;
    
    if(diferenca==0)
    {
                   diferenca=7;
                   return(diferenca);
    }
    
    if(diferenca<0)
    {
                   diferenca=-diferenca;                  
    }              
    
    return(diferenca);
}

//indica qual dia da semana cai 1/1/ano digitado
int dia_da_semana(int ano)
{
    int dia;
    
    if(ano>padrão)
    {
                  if(verificaBisexto(ano)==0)
                  {
                                             dia=365*(ano-padrão)+quant_bissexto(ano);
                                             dia=dia%7;
                                             return(dia);
                  }
                  if(verificaBisexto(ano)==1)
                  {
                                             dia=365*(ano-padrão)+quant_bissexto(ano)-1;
                                             dia=dia%7;
                                             return(dia);
                  }
    }
    
    if(ano<padrão)
    {
                  if(verificaBisexto(ano)==0)
                  {
                                             dia=365*(padrão-ano)+quant_bissexto(ano);
                                             dia=dia%7;
                                             dia=7-dia;
                                             return(dia);
                  }
                  if(verificaBisexto(ano)==1)
                  {
                                             dia=365*(padrão-ano)+quant_bissexto(ano);
                                             dia=dia%7;
                                            
                                             switch(dia)
                                             {
                                                         case 6:
                                                              dia=1;
                                                              return(dia);
                                                              break;
                                                         case 5:
                                                              dia=2;
                                                              return(dia);
                                                              break;
                                                         case 4:
                                                              dia=3;
                                                              return(dia);
                                                              break;
                                                         case 3:
                                                              dia=4;
                                                              return(dia);
                                                              break;
                                                         case 2:
                                                              dia=5;
                                                              return(dia);
                                                              break;
                                                         case 1:
                                                              dia=6;
                                                              return(dia);
                                                              break;
                                                         case 0:
                                                              dia=0;
                                                              return(dia);
                                                              break;
                                             }
                  }

    }
}                          

//Fornece a quantidade de dias de cada mes fazendo o teste em fevereiro
int func_mes(int mes)
{
    int jan,fev,mar,abr,mai,jun,jul,ago,set,out,nov,dez,fevbi;
        
            switch(mes)
            {
                       case 1:
                            jan=31;
                            return(jan);
                            break;
                      
                       case 2://termina condicao do bissexto aqui, uma duvida apenas...
                            fev=28;
                            return(fev);
                            break;
                            
                       case 4:
                            mar=30;
                            return(mar);
                            break;
                            
                       case 5:
                            mai=31;
                            return(mai);
                            break;
                            
                       case 6:
                            jun=30;
                            return(jun);
                            break;    
                            
                       case 7:
                            jul=31;
                            return(jul);
                            break;
                            
                       case 8:
                            ago=31;
                            return(ago);
                            break;
                            
                       case 9:
                            set=30;
                            return(set);
                            break;
                            
                       case 10:
                            out=31;
                            return(out);
                            break;
                            
                       case 11:
                            nov=30;
                            return(nov);
                            break;
                            
                       case 12:
                            dez=31;
                            return(dez);
                            break;
                      
                       case 13:
                            fevbi=29;
                            return(fevbi);
                            break;
            }//fecha switch
}//fecha funcao


int tabela(int ano)
{
    char tabela[8][8];
    int quant_dias;
    int mes;
    
    tabela[0][0]='D';
    tabela[0][1]='S';
    tabela[0][2]='T';
    tabela[0][3]='Q';
    tabela[0][4]='Q';
    tabela[0][5]='S';
    tabela[0][6]='S';
    
/*vai atribuindo valor de 1 a 12 a funcao mes
e retornando a quantidade de dias de cada mes*/
    for(int mes=1;mes<=12;mes++)      
    {
     quant_dias=func_mes(mes);
[color=#3366FF]               switch(dia_da_semana(ano))
                {
                                          case 0://consertar... mt cansado...
                                               for (int i=1;i<=quant_dias;i++)
                                               {
                                                   tabela[1][i]=i;
                                                   tabela[1][6]=i;
                                                   tabela[1][7]='\n';
                                                   printf("%d",tabela[][]);
                                                   break;
                                               }
                                          case 1:
                                               tabela[2][0]=1;
                                               printf("%c",tabela[2][0]);
                                               break;
                                          case 2:
                                               tabela[2][1]=1;
                                               printf("%c",tabela[2][1]);
                                               break;
                                          case 3:
                                               tabela[2][2]=1;
                                               printf("%c",tabela[2][2]);
                                               break;
                                          case 4:
                                               tabela[2][3]=1;
                                               printf("%c",tabela[2][3]);
                                               break;
                                          case 5:
                                               tabela[2][4]=1;
                                               printf("%c",tabela[2][4]);
                                               break;
                                          case 6:
                                               tabela[2][5]=1;
                                               printf("%d",tabela[2][5]);
                                               break;
                }
                                              
                
                for(int j=0;j<=6;j++)
                {
                        printf(" %c ",tabela[0][j]);
                }
                for(int i=0;i<=7;i++)
                {
                        tabela[i][7]='\0';
                        tabela[i][8]='\n';
                        
                        printf("%c",tabela[i][7]);
                        printf("%c",tabela[i][8]);
                }
    }
    fflush(stdin);
}   [/color]                              
//funcao principal
int main()
{
    int ano;
    int diferenca;
    char escolha;
    char sair;
    
    while(escolha!='s' && escolha!='S')//enquanto 's' ou 'S' for digitado o escopo do while continura em execucao
    {
    printf("\t\t°°°°°°°°°°°°°°°°°°\n");
    printf("\t\t°escolha 1 opcao °\n");
    printf("\t\t°°°°°°°°°°°°°°°°°°\n");
    printf("\t\t°(1) calendario  °\n");
    printf("\t\t°°°°°°°°°°°°°°°°°°\n");
    printf("\t\t°(S/s) para sair °\n");
    printf("\t\t°°°°°°°°°°°°°°°°°°\n");

    printf("\t\tSua escolha e: ");
    scanf("%c",&escolha);
    printf("\n\n");
    fflush(stdin);
                  
                    switch(escolha)
                    {
                    case '1':
                         printf("\t\tEscolha um ano : ");
                         scanf("%d",&ano);
                         fflush(stdin);
                         tabela(ano);
                         getchar();
                         break;
                  
                    default:
                         printf("\t\tNao existe essa opcao\n");
                    }

    }                
}
        

a parte de vermelho é a funcao q irao imprimir os dados...a parte de azul é onde fica exatamente o codigo de implementacao dos dias na tela, mas deve ta errado, se alguem tiver uma ideia ai de como fazer aparecer os dias na tela fala(mas usando esse programa)...

mt grato...

Link para o comentário
Compartilhar em outros sites

  • 13 anos depois...

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!