Ir ao conteúdo
  • Cadastre-se

Michaeldgs

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

0
  1. Olá, estou com um problema na hora de concluir o meu programa, ele deverá calcular a diferença entre datas, mostrando o resultado em total de dias, meses e anos. O programa leva em consideração os anos bissextos, a quantidade de dias de cada mês. Foi dado como dicas: 1- retornar uma função que retorne a quantidade de dias do ano, identificando se é bissexto ou não. 2- montar uma função que calcule a quantidade de dias corridos do inicio do ano até as datas informadas. Meu problema é que na hora de somar os valores não correspondem ao que deveriam corresponder, por exemplo, 13/09/1993 e 20/05/2015, a diferença é de 7 dias, 8 meses e 21 anos, 14/10/2013 e 20/05/2015 a diferença é de 6 dias, 7 meses e 1 ano, porém o que a princípio está certo é parte dos dias e dos anos, porém os meses nunca dão exatos, ou dão negativos. Sendo if (dias>31){dias=0;meses++}; if (meses>13){meses=0;anos++;} segue o programa: #include <stdio.h> #include <stdlib.h> int reload,d1,d2,m1,m2,a1,a2,x1,x2,b1,b2,d28,d29,d30,d31,af,mf,df,total; char quit; int di1,di2,mi1,mi2; ///////////////////////////////////////////////////////////////////////////////////////////////// int main () { for (reload=0;;reload++) { printf ("TODOS OS DIREITOS RESERVADOS A MICHAEL DOUGLAS GOULART SILVA\n\n"); printf ("\tEste programa ira' calcular a diferenca entre duas datas,\nsendo elas validas apenas apos a invencao do calendario em 24/02/1582\n\n"); printf ("Insira a data no formato DD/MM/AAAA, sendo desde o ano 1582 ate' o ano 3000\n\n"); ano1: printf ("Ano Inicial:\t"); scanf ("%d",&a1); if ((a1<1582)||(a1>3000)) goto ano1; x1=a1/4; if (a1==(x1*4)) { printf ("\tAno bissexto\n"); b1=1; } mes1: printf ("Mes Inicial:\t"); scanf ("%d",&m1); if ((m1<1)||(m1>12)) goto mes1; switch (m1) { case 1: dia1131: printf ("Dia Inicial:\t"); scanf ("%d",&d1); if ((d1<1)||(d1>31)) goto dia1131; break; case 3: dia1331: printf ("Dia Inicial:\t"); scanf ("%d",&d1); if ((d1<1)||(d1>31)) goto dia1331; break; case 5: dia1531: printf ("Dia Inicial:\t"); scanf ("%d",&d1); if ((d1<1)||(d1>31)) goto dia1531; break; case 7: dia1731: printf ("Dia Inicial:\t"); scanf ("%d",&d1); if ((d1<1)||(d1>31)) goto dia1731; break; case 8: dia1831: printf ("Dia Inicial:\t"); scanf ("%d",&d1); if ((d1<1)||(d1>31)) goto dia1831; break; case 10: dia11031: printf ("Dia Inicial:\t"); scanf ("%d",&d1); if ((d1<1)||(d1>31)) goto dia11031; break; case 12: dia11231: printf ("Dia Inicial:\t"); scanf ("%d",&d1); if ((d1<1)||(d1>31)) goto dia11231; break; case 4: dia1430: printf ("Dia Inicial:\t"); scanf ("%d",&d1); if ((d1<1)||(d1>30)) goto dia1430; break; case 6: dia1630: printf ("Dia Inicial:\t"); scanf ("%d",&d1); if ((d1<1)||(d1>30)) goto dia1630; break; case 9: dia1930: printf ("Dia Inicial:\t"); scanf ("%d",&d1); if ((d1<1)||(d1>30)) goto dia1930; break; case 11: dia11130: printf ("Dia Inicial:\t"); scanf ("%d",&d1); if ((d1<1)||(d1>30)) goto dia11130; break; case 2: if (b1==1) { dia129: printf ("Dia Inicial:\t"); scanf ("%d",&d1); if ((d1<1)||(d1>29)) goto dia129; break; } dia128: printf ("Dia Inicial:\t"); scanf ("%d",&d1); if ((d1<1)||(d1>28)) goto dia128; break; } printf ("---------------------------------------------------------------------\n"); printf ("Data Inicial:\t%d/%d/%d\n",d1,m1,a1); printf ("=====================================================================\n"); ano2: printf ("Ano Final:\t"); scanf ("%d",&a2); if ((a2<1582)||(a2>3000)) goto ano2; x2=a2/4; if (a2==(x2*4)) { printf ("\tAno bissexto\n"); b2=1; } mes2: printf ("Mes Final:\t"); scanf ("%d",&m2); if ((m2<1)||(m2>12)) goto mes2; switch (m2) { case 1: dia2131: printf ("Dia Final:\t"); scanf ("%d",&d2); if ((d2<1)||(d2>31)) goto dia2131; break; case 3: dia2331: printf ("Dia Final:\t"); scanf ("%d",&d2); if ((d2<1)||(d2>31)) goto dia2331; break; case 5: dia2531: printf ("Dia Final:\t"); scanf ("%d",&d2); if ((d2<1)||(d2>31)) goto dia2531; break; case 7: dia2731: printf ("Dia Final:\t"); scanf ("%d",&d2); if ((d2<1)||(d2>31)) goto dia2731; break; case 8: dia2831: printf ("Dia Final:\t"); scanf ("%d",&d2); if ((d2<1)||(d2>31)) goto dia2831; break; case 10: dia21031: printf ("Dia Final:\t"); scanf ("%d",&d2); if ((d2<1)||(d2>31)) goto dia21031; break; case 12: dia21231: printf ("Dia Final:\t"); scanf ("%d",&d2); if ((d2<1)||(d2>31)) goto dia21231; break; case 4: dia2430: printf ("Dia Final:\t"); scanf ("%d",&d2); if ((d2<1)||(d2>30)) goto dia2430; break; case 6: dia2630: printf ("Dia Final:\t"); scanf ("%d",&d2); if ((d2<1)||(d2>30)) goto dia2630; break; case 9: dia2930: printf ("Dia Final:\t"); scanf ("%d",&d2); if ((d2<1)||(d2>30)) goto dia2930; break; case 11: dia21130: printf ("Dia Final:\t"); scanf ("%d",&d2); if ((d2<1)||(d2>30)) goto dia21130; break; case 2: if (b2==1) { dia229: printf ("Dia Final:\t"); scanf ("%d",&d2); if ((d2<1)||(d2>29)) goto dia229; break; } dia228: printf ("Dia Final:\t"); scanf ("%d",&d1); if ((d1<1)||(d1>28)) goto dia228; break; } printf ("--------------------------------------------------------------------\n"); printf ("Data Final:\t%d/%d/%d\n\n",d2,m2,a2); if (a2==a1) af=a2-a1; else af= (a2-a1)-1; if ((m2==m1)&&(d2==d1)) af++; // 7 dias 8 meses e 21 anos 1993-2015 if (m2>=m1) mf=m2-m1; else mf= (m1-m2); // Minha duvida aparece aqui 0009-0005 if (d2>=d1) df=d2-d1; else df= mf+(d2-d1); // inicial-final 0013-0020 printf ("=====================================================================\n"); printf ("A diferenca entre as datas e' de %d dias, %d meses e %d anos\n",df,mf,af); printf ("=====================================================================\n\n"); printf ("\t\t \"x\" para sair\n"); scanf ("%s",&quit); if ((quit=='x')||(quit=='X')) break; system ("cls"); } } a princípio acho que consegui corrigir modificando algumas das linhas finais if (m2>=m1) mf=m2-m1; else mf= 12-(m1-m2); if (d2>=d1) df=d2-d1; else df= 30-(d2-d1); será que alguém tem como dar uma verificada com outras datas?

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!