Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

fo_11

Incrementar um dia a uma data

Mensagens Recomendadas

fo_11

Alguem pode indicar um programa em c que o utilizador insere uma data e é imprimido no ecra a data do dia a seguir?

Ando às voltas neste programa e simplesmente não consigo chegar a um produto final  :(

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baderous

Pedes o dia, mês e ano e depois incrementas cada uma dessas variáveis e mostras o resultado.

Não é preciso incrementar o ano nem o mês, a menos que se esteja no caso de transição de meses/anos.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
fo_11

Pois essa parte já percebi. O meu problema é mesmo as condiçoes...

Ano bissexto ou nao, dias do mes tem 31 ou 30 ou 29 ou 28 dias... Inicia me relativamente à pouco tento na linguagem c por isso não é muito simples para mim ter de trabalhar com tantas condiçoes.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
fo_11

Aqui está o meu programa.

Existe alguma maneira menos confusa pra esta função?

Obs:Não diferencia anos comuns de bissextos sugestoes?

#include<stdio.h>


int main()
{
    int dia,mes,ano;
    do{
     do{
      printf("Inserir data (dia:mes:ano):\n");
      scanf("%d:%d:%d",&dia,&mes,&ano);     
      if((mes==2&&dia>28)||(dia>30&&mes<8&&mes%2==0)||(dia>30&&mes>=8&&mes%2!=0)||(dia>31&&mes<8&&mes%2!=0));
       printf("\n!!!ERROR!!!\n");
     }while((mes==2&&dia>28)||(dia>30&&mes<8&&mes%2==0)||(dia>30&&mes>=8&&mes%2!=0)||(dia>31&&mes<8&&mes%2!=0));
     
     if(mes==2 && dia==28)
      printf("\n01:%02d:%d\n",mes+1,ano);
     else if(dia==30&&mes<8&&mes%2==0)
       printf("\n01:%02d:%d\n",mes+1,ano);
     else if(dia==30&&mes>=8&&mes%2!=0)
       printf("\n01:%02d:%d\n",mes+1,ano);
     else if(dia==31&&mes==12)
       printf("\n01:01:%d\n",ano+1);
     else if(dia==31&&mes<8&&mes%2!=0)
      printf("\n01:%02d:%d\n",mes+1,ano);
     else
       printf("\n%02d:%02d:%d\n",dia+1,mes,ano);
    }while(dia!=0&&mes!=0&&ano!=0);//Para sairmos do programa precisamos de colocar (0:0:0)
    
    
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Se já trabalhas com funções faz o seguinte:

→ Cria uma função que recebe o ano como parametro e verifica se é bissexto.

→ Essa função deve retornar 1 se for bissexto e zero se não for.

Se trabalhas com arrays também podes criar um array que contêm os dias que certo mês contêm em que a posição 0 do array corresponde a janeiro e assim por aí em diante.

Quando a pessoa introduz um mês, imaginemos N. Vais à posição N - 1 e verificas quantos dias tem. Aqui deves fazer uma verificação para ver se é igual a fevereiro, se for tiras proveito da função que verifica se é bissexto e atribuis a fevereiro 28 ou 29 (conforme o retorno da função).

Quanto ao dia, voltas a tirar proveito do array para veres se o dia é menor, maior, igual ao nº de dias do array já inicializado. Aqui, fazes verificações para ver se tens de mudar de ano, mês, etc.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.