jsfrocha 0 Denunciar post Postado Fevereiro 18, 2011 Boas, Estou com uma dificuldade a nível aqui de um código que preciso de fazer para universidade, e cheguei a um ponto onde tenho um brain-freeze :angry: #include <stdio.h> int main(){ int ano, dia1, mes1, dia2, mes2, calc1, bissexto; unsigned int difmes; bissexto == 0 printf("Escreva o ano: "); scanf("%d", &ano); if (ano%4==0 && (ano%100!=0 || ano%400==0)){ /* Verificação Bissexto */ printf("O ano introduzido e bissexto.\n"); bissexto=1; } printf("Escreva a primeira data: "); scanf("%d %d", &dia1, &mes1); printf("Escreva a segunda data: "); scanf("%d %d", &dia2, &mes2); if (mes1%2 == 0 && mes1 != 1 && mes1 != 2) /* Meses Pares Excepto Fev */ calc1 = 31 - dia1; else if (mes1%2 != 0) /* Meses Impares */ calc1 = 30 - dia1; else if (mes1 == 2 && bissexto == 1) calc1 = 29 - dia1; else if (mes1 == 2 && bissexto == 0) calc1 = 28 - dia1; difmes=mes1-mes2; system("PAUSE"); } Eu preciso de calcular a diferença (em dias) entre duas datas, e além disso, verificar se o ano é bissexto para saber quantos dias tem Fevereiro, o que já fiz. Tem de ser mantido simples, sem usar a biblioteca "time", portanto o que eu pensei foi calcular a diferença entre o 1º dia e o fim desse mes, e depois com "difmes" calcular quantos meses são até chegar ao ultimo. O que eu não estou a conseguir chegar é como faço para somar os dias dos meses que conta difmes por exemplo 31+28+31+30 etc, não estou a chegar lá como faço isso em código. A minha ideia seria somar esses e depois adicionar o dia2, o que fazia a soma de dias total. Se alguem me puder ajudar, agradeço =) Compartilhar este post Link para o post Compartilhar em outros sites
Lugaid 0 Denunciar post Postado Fevereiro 19, 2011 Já penso em fazer um for com uma variavel recebendo o primeiro mês e o for continua ate o mes1<=mes2, dentro desse for faz um if pra ver se o mês tem 30 ou 31 dias, vai somando em uma variavel. Não sei se consegui explicar direito, mas seria mais ou menos isso: aux = mes1 for(;aux <= mes2; aux++) { //if para verificar se mes tem 30 ou 31 dias. //variavel que vai acumulando os dias acrescentada de 30 ou 31 dias. } Deu pra sacar? Compartilhar este post Link para o post Compartilhar em outros sites
jsfrocha 0 Denunciar post Postado Fevereiro 20, 2011 Já penso em fazer um for com uma variavel recebendo o primeiro mês e o for continua ate o mes1<=mes2, dentro desse for faz um if pra ver se o mês tem 30 ou 31 dias, vai somando em uma variavel. Não sei se consegui explicar direito, mas seria mais ou menos isso: aux = mes1 for(;aux <= mes2; aux++) { //if para verificar se mes tem 30 ou 31 dias. //variavel que vai acumulando os dias acrescentada de 30 ou 31 dias. } Deu pra sacar? Já consegui ultrapassar a barreira.. até agora tenho isto: #include <stdio.h> int main(){ int ano, dia1, mes1, dia2, mes2, calc1, bissexto, i, totaldias, totalmes; int verifdia1, verifdia2, verifmes1, verifmes2; unsigned int difmes; int meses[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; bissexto = 0; do { ano = 1583; printf("Escreva o ano: "); scanf("%d", &ano); if (ano%4==0 && (ano%100!=0 || ano%400==0)){ /* Verificação Bissexto */ printf("O ano introduzido e bissexto.\n"); bissexto=1; } if (ano<1582) { printf("Introduza um ano maior que 1582\n"); } } while (ano<1582); do { verifdia1 = 0; verifmes1 = 0; verifdia2 = 0; verifmes2 = 0; printf("Escreva a primeira data: "); scanf("%d %d", &dia1, &mes1); printf("Escreva a segunda data: "); scanf("%d %d", &dia2, &mes2); if (mes1 > 12) verifmes1 = 1; if (mes2 > 12) verifmes2 = 1; if (dia1 > 31) verifdia1 = 1; if (dia2 > 31) verifdia2 = 1; if (mes1 == 1 || mes1 == 3 || mes1 == 5 || mes1 == 7 || mes1 == 8 || mes1 == 10 || mes1 == 12){ calc1 = 31 - dia1; if (dia1>31) verifdia1=1; if (dia2>31) verifdia2=1; if (dia1<=31) verifdia1=0; if (dia2<=31) verifdia2=0; } else if (mes1 == 4 || mes1 == 6 || mes1 == 9 || mes1 == 11){ calc1 = 30 - dia1; if (dia1>30) verifdia1=1; if (dia2>30) verifdia2=1; if (dia1<=30) verifdia1=0; if (dia2<=30) verifdia2=0; } else if (mes1 == 2 && bissexto == 1){ calc1 = 29 - dia1; if (dia1>29) verifdia1=1; if (dia2>29) verifdia2=1; if (dia1<=29) verifdia1=0; if (dia2<=29) verifdia2=0; } else if (mes1 == 2 && bissexto == 0){ calc1 = 28 - dia1; if (dia1>28) verifdia1=1; if (dia2>28) verifdia2=1; if (dia1<=28) verifdia1=0; if (dia2<=28) verifdia2=0; } printf("Calc1: %d\n", calc1); if (verifdia1 == 1) printf("Dia 1 Invalido\n"); if (verifdia2 == 1) printf("Dia 2 Invalido\n"); if (verifmes1 == 1) printf("Mes 1 Invalido\n"); if (verifmes2 == 1) printf("Mes 2 Invalido\n"); } while (verifdia1 == 1 || verifmes1 == 1 || verifmes2 == 1 || verifdia2 == 1); i = 0; totalmes = 0; if (mes1<mes2){ printf("Mes 1 < Mes2\n"); do{ totalmes = meses[mes1+i] + totalmes; i=i+1; printf("Totalmes: %d\n", totalmes); } while (i<mes1-1); } else { printf("Mes1 > Mes2\n"); do{ totalmes = meses[mes2-i] + totalmes; i=i+1; printf("I = %d\n", i); printf("Totalmes: %d\n", totalmes); } while (i<mes2-1); } totaldias = calc1+totalmes+dia2; printf("O total de dias e: %d\n", totaldias); system("PAUSE"); } Mas mesmo assim, ainda não está batendo certo.. Alguém com paciencia para rever o código, por favor me ajude, porque eu já revi várias vezes e nada.. EDIT: Os if's de verificação são necessarios para evitar datas inválidas, tanto ano, como dia ou mes. Compartilhar este post Link para o post Compartilhar em outros sites
Lugaid 0 Denunciar post Postado Fevereiro 20, 2011 Opa, foi mal, falei errado no outro post, estava considerando apenas as somas dos meses, pode acontecer de não ser o mês inteiro... Temos que levar em conta também os dias... Uma dúvida, a data um tem que ser maior que a data dois, certo? Compartilhar este post Link para o post Compartilhar em outros sites