Ir ao conteúdo

Posts recomendados

Postado

Esse seria meu raciocínio ::

 

 

#include <iostream>

#include <stdbool.h>

 

using namespace std;

 

struct Data {

 

int dia;

 

int mes;

 

int ano;

 

};

 

bool valida(struct Data data) {

 

/* retorna true se data válida ou false se inválida */

 

if (data.mes < 1 || data.mes > 12)

 

return false;

 

else {

 

if (data.mes == 2) {

 

if ((data.ano % 4 == 0) && (data.ano % 100 != 0) || (data.ano % 400 == 0)) {

 

if (data.dia < 1 || data.dia > 29)

 

return false;

 

}

 

else

 

if (data.dia < 1 || data.dia > 28)

 

return false;

 

}

 

else {

 

if (data.mes == 4 || data.mes == 6 || data.mes == 9 || data.mes == 11) {

 

if (data.dia < 1 || data.dia > 30)

 

return false;

 

}

 

else

 

if (data.dia < 1 || data.dia > 31)

 

return false;

 

}

 

}

 

return true;

 

}

 

int dias_decorridos(struct Data data_ini, struct Data data_fim) {

 

int dias_no_mes[13]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, tot_dias_ini, tot_dias_fim, i;

 

tot_dias_ini = data_ini.ano * 365.2425;

 

for (i=1; i<data_ini.mes; i++)

 

tot_dias_ini += dias_no_mes;

 

if (((data_ini.ano % 4 == 0) && (data_ini.ano % 100 != 0) || (data_ini.ano % 400 == 0)) && data_ini.mes > 2)

 

tot_dias_ini++;

 

tot_dias_ini += data_ini.dia;

 

tot_dias_fim = data_fim.ano * 365.2425;

 

for (i=1; i<data_fim.mes; i++)

 

tot_dias_fim += dias_no_mes;

 

if (((data_fim.ano % 4 == 0) && (data_fim.ano % 100 != 0) || (data_fim.ano % 400 == 0)) && data_fim.mes > 2)

 

tot_dias_fim++;

 

tot_dias_fim += data_fim.dia;

 

return (tot_dias_fim - tot_dias_ini);

 

}

 

int main() {

 

struct Data data1, data2;

 

cout<<"Informe a primeira data :"<<endl;

 

cin>> data1.dia,data1.mes,data1.ano;

 

while (!valida(data1)) {

 

cout<<"Data inválida. Reinforme a primeira data: ";

 

cin>>data1.dia,data1.mes,data1.ano;

 

}

 

cout<<"Informe a segunda data: "<<endl;

 

cin>>data2.dia, data2.mes,data2.ano;

 

while (!valida(data2)) {

 

cout<<"Data inválida. Reinforme a segunda data: "<<endl;

 

cin>>data2.dia,data2.mes,data2.ano;

 

}

 

cout<<"Dias decorridos: "<<dias_decorridos(data1, data2);

 

return 0;

 

}

  • Curtir 1
Postado

@William Cruuz     seu código está bom , funciona bem , só dois erros  nessa função :

}
int dias_decorridos(struct Data data_ini, struct Data data_fim){
    int dias_no_mes[13]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, tot_dias_ini, tot_dias_fim, i;
    tot_dias_ini = data_ini.ano * 365.2425;
    for (i=1; i<data_ini.mes; i++)
        tot_dias_ini += dias_no_mes[i];  /* esses caracteres aqui */
    if(((data_ini.ano % 4 == 0) && (data_ini.ano % 100 != 0) || (data_ini.ano % 400 == 0)) && data_ini.mes > 2)
        tot_dias_ini++;
    tot_dias_ini += data_ini.dia;
    tot_dias_fim = data_fim.ano * 365.2425;
    for (i=1; i<data_fim.mes; i++)
    tot_dias_fim += dias_no_mes[i];/* esses caracteres aqui */
    if(((data_fim.ano % 4 == 0) && (data_fim.ano % 100 != 0) || (data_fim.ano % 400 == 0)) && data_fim.mes > 2)
        tot_dias_fim++;
    tot_dias_fim += data_fim.dia;
    return (tot_dias_fim - tot_dias_ini);
}

por que você não usou o botão   <>   que está desenhado lá na barra de ferramentas da janela de postar ,

827990331_barradeferramentas.jpg.4b59939436b285e99e87923c4d37e1b8.jpg

e assim seu código ficou faltando alguns caracteres como os  [ i ]  , que sumiram do seu código .

  • Obrigado 1
Postado

Minha solução seria algo desse tipo:

    int correção[12]={0, 1, -1, 0, 0, 1, 1, 2, 3, 3, 4, 4};
    long total_dias_ini, total_dias_fim, diferenca;
    struct Data data_ini = {.dia=1, .mes=1, .ano=1}, data_fim =  {.dia=29, .mes=2, .ano=2020};
    total_dias_ini = data_ini.dia + (data_ini.mes-1)*30 + correção[data_ini.mes-1] + ( data_ini.mes > 2 && ( !(data_ini.ano % 400) || (data_ini.ano % 100) && !(data_ini.ano % 4) ) ? 1 : 0 ) + (data_ini.ano-1)*365 + (data_ini.ano-1) / 4 - (data_ini.ano-1) / 100 + (data_ini.ano-1) / 400;
    total_dias_fim = data_fim.dia + (data_fim.mes-1)*30 + correção[data_fim.mes-1] + ( data_fim.mes > 2 && ( !(data_fim.ano % 400) || (data_fim.ano % 100) && !(data_fim.ano % 4) ) ? 1 : 0 ) + (data_fim.ano-1)*365 + (data_fim.ano-1) / 4 - (data_fim.ano-1) / 100 + (data_fim.ano-1) / 400;
    diferenca = total_dias_fim - total_dias_ini;

 

  • Curtir 1

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!