ghetsys
-
Posts
4 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por ghetsys
-
-
Já tenho boa parte do código pronto, funcional entre 2 anos diferentes, o problema é que, quando os anos são iguais ocorre erros.
De 01/01/2001 a 02/01/2001 por exemplo, seria 0 dias, mas resulta em 365.
Eu fiz uma limitação para ser o ano for igual, mas acaba nessa soma de 365, então pensei em tirar 365 se o ano for igual, e novamente resulta em 365. Alguém consegue me ajudar em identificar o que fiz de errado?
Spoiler#include <stdlib.h> #include <stdio.h> int DiaN; int MesN; int AnoN; int DiaA; int MesA; int AnoA; int TotalDiasA; int TotalDiasN; int TotalDias; int cta; int diasMes[12]; main(){ // atribuir dias aos meses diasMes[0] = 31; diasMes[1] = 28; diasMes[2] = 31; diasMes[3] = 30; diasMes[4] = 31; diasMes[5] = 30; diasMes[6] = 31; diasMes[7] = 31; diasMes[8] = 30; diasMes[9] = 31; diasMes[10] = 30; diasMes[11] = 31; printf("\n Digite o ano de aniversario: "); scanf("%d", &AnoN); //se for bissexto fev tem 29 if(AnoN % 4 == 0){ diasMes[1] = 29; } while(MesN < 1 || MesN > 12){ printf("\n Digite o mes de aniversario: "); scanf("%d", &MesN); } while(DiaN < 1 || DiaN > diasMes[MesN - 1]){ printf("\n Digite o dia de aniversario: "); scanf("%d", &DiaN); } TotalDias = diasMes[MesN-1] - DiaN; //Conta os dias para o mês acabar; for(cta = MesN+1; cta <= 12 ; cta++){ //Conta os meses para o ano acabar; TotalDias += diasMes[cta-1]; } //voltar fevereiro pra 28 pra validar diasMes[1] = 28; while(AnoA < AnoN || (AnoA - AnoN) >= 150){ printf("\n Digite o ano atual: "); scanf("%d", &AnoA); } //ver se tb é bissexto if(AnoA % 4 == 0){ diasMes[1] = 29; } while(MesA < 1 || MesA > 12){ printf("\n Digite o mes atual: "); scanf("%d", &MesA); } while(DiaA < 1 || DiaA > diasMes[MesA - 1]){ printf("\n Digite o dia atual: "); scanf("%d", &DiaA); } for(cta = 1; cta < MesA ; cta++){ // Conta os meses que tem no ano atual TotalDias += diasMes[cta-1]; } TotalDias += DiaA; //Contas os dias no último mes do ano atual if(AnoN != AnoA){ for (cta = AnoN+1; cta < AnoA; cta++){ if (cta % 4 == 0){ TotalDias += 366; else TotalDias += 365;} } } if(AnoN == AnoA){ TotalDias = TotalDias - 365 } printf("\nVocê viveu : "); printf("%d", TotalDias); printf(" dias."); }
-
31 minutos atrás, Flávio Pedroza disse:
#include <stdlib.h> #include <stdio.h> int DiaN; int MesN; int AnoN; int DiaA; int MesA; int AnoA; int TotalDiasA; int TotalDiasN; int TotalDias; int cta; int diasMes[12]; main(){ // atribuir dias aos meses diasMes[0] = 31; diasMes[1] = 28; diasMes[2] = 31; diasMes[3] = 30; diasMes[4] = 31; diasMes[5] = 30; diasMes[6] = 31; diasMes[7] = 31; diasMes[8] = 30; diasMes[9] = 31; diasMes[10] = 30; diasMes[11] = 31; printf("\n Digite o ano de aniversario: "); scanf("%d", &AnoN); //se for bissexto fev tem 29 if(AnoN % 4 == 0){ diasMes[1] = 29; } while(MesN < 1 || MesN > 12){ printf("\n Digite o mes de aniversario: "); scanf("%d", &MesN); } while(DiaN < 1 || DiaN > diasMes[MesN - 1]){ printf("\n Digite o dia de aniversario: "); scanf("%d", &DiaN); } TotalDias = diasMes[MesN-1] - DiaN; //Conta os dias para o mês acabar; for(cta = MesN+1; cta <= 12 ; cta++){ //Conta os meses para o ano acabar; TotalDias += diasMes[cta-1]; } //voltar fevereiro pra 28 pra validar diasMes[1] = 28; while(AnoA < AnoN || (AnoA - AnoN) >= 150){ printf("\n Digite o ano atual: "); scanf("%d", &AnoA); } //ver se tb é bissexto if(AnoA % 4 == 0){ diasMes[1] = 29; } while(MesA < 1 || MesA > 12){ printf("\n Digite o mes atual: "); scanf("%d", &MesA); } while(DiaA < 1 || DiaA > diasMes[MesA - 1]){ printf("\n Digite o dia atual: "); scanf("%d", &DiaA); } for(cta = 1; cta < MesA ; cta++){ // Conta os meses que tem no ano atual TotalDias += diasMes[cta-1]; } TotalDias += DiaA; //Contas os dias no último mes do ano atual //voltar fev pra 28 //diasMes[1] = 28; for (cta = AnoN+1; cta < AnoA; cta++) if (cta % 4 == 0) TotalDias += 366; else TotalDias += 365; //TotalDias = TotalDias * 365; /*for(cta = AnoN + 1; cta < AnoA; cta++){ if(cta % 4 == 0){ TotalDias = (TotalDias + 1); } }*/ printf("\nVocê viveu : "); printf("%d", TotalDias); printf(" dias."); }
Obrigado, o erro então estava na contagem dos dias totais no ano de inicio e no ano final?
-
Olá a todos, estou precisando de ajuda para finalizar um programa.
Eu recebo o dia, mês e ano de nascimento de alguém e o atual, e então vejo a diferença de dias entre as duas datas.
O problema é que, a data chega perto, mas das diversas tentativas que fiz, nunca chega na data exata, e em alguns casos, até passa da data certa.
Meus testes por enquanto:
7/7/2001 a 14/5/2019 : 6847 dias (o resultado teria que ser 6520)
1/1/2001 a 14/5/2019 : 7028 dias (o resultado teria que ser 6707)
O problema que surge (que facilitaria muito) é que eu não posso usar comandos que façam a diferença entre duas datas ou algo do tipo.
Caso consigam me ajudar, muito obrigado.
#include <stdlib.h> #include <stdio.h> int DiaN; int MesN; int AnoN; int DiaA; int MesA; int AnoA; int TotalDiasA; int TotalDiasN; int TotalDias; int cta; int diasMes[12]; main(){ // atribuir dias aos meses diasMes[0] = 31; diasMes[1] = 28; diasMes[2] = 31; diasMes[3] = 30; diasMes[4] = 31; diasMes[5] = 30; diasMes[6] = 31; diasMes[7] = 31; diasMes[8] = 30; diasMes[9] = 31; diasMes[10] = 30; diasMes[11] = 31; printf("\n Digite o ano de aniversario: "); scanf("%d", &AnoN); //se for bissexto fev tem 29 if(AnoN % 4 == 0){ diasMes[1] = 29; } while(MesN < 1 || MesN > 12){ printf("\n Digite o mes de aniversario: "); scanf("%d", &MesN); } while(DiaN < 1 || DiaN > diasMes[MesN - 1]){ printf("\n Digite o dia de aniversario: "); scanf("%d", &DiaN); } for(cta = MesN; cta < 12 ; cta++){ if(MesN == 12){ TotalDiasN = TotalDiasN + (diasMes[11] - DiaN); break; }else{ TotalDiasN = (TotalDiasN + diasMes[cta]); } } //voltar fevereiro pra 28 pra validar diasMes[1] = 28; while(AnoA < AnoN || (AnoA - AnoN) >= 150){ printf("\n Digite o ano atual: "); scanf("%d", &AnoA); } //ver se tb é bissexto if(AnoA % 4 == 0){ diasMes[1] = 29; } while(MesA < 1 || MesA > 12){ printf("\n Digite o mes atual: "); scanf("%d", &MesA); } while(DiaA < 1 || DiaA > diasMes[MesA - 1]){ printf("\n Digite o dia atual: "); scanf("%d", &DiaA); } for(cta = MesA - 2; cta >= 0 ; cta--){ if(MesA == 1){ TotalDiasA = TotalDiasA + (diasMes[0] - DiaA); }else{ TotalDiasA = (TotalDiasA + diasMes[cta]); } } //voltar fev pra 28 diasMes[1] = 28; TotalDias = (AnoA - AnoN); TotalDias = TotalDias * 365; TotalDias = (TotalDias + TotalDiasA + TotalDiasN); for(cta = AnoN + 1; cta < AnoA; cta++){ if(cta % 4 == 0){ TotalDias = (TotalDias + 1); } } printf("\nVocê viveu : "); printf("%d", TotalDias); printf(" dias."); }
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
Calcular quantidade de dias entre duas datas, mas também considerar anos iguais
em C/C#/C++
Postado
Funcionou, obrigado.