![](/media/cache/profiles/Pass2.jpg.50x50_q85.jpg)
KL25Z program that calculates the difference in days, hours, minutes, between two dates. Needs a terminal on the PC side to communicate with the program. Terminal must have local echo on. Terminal Data input needs some improvement.
Diff: main.cpp
- Revision:
- 2:1d24f233ac26
- Parent:
- 1:0756a87e335f
- Child:
- 3:add864dd8eab
--- a/main.cpp Wed May 13 12:44:02 2015 +0000 +++ b/main.cpp Wed May 13 14:17:28 2015 +0000 @@ -5,6 +5,7 @@ #include <stdio.h> + int bissexto(int ano); int dias_do_mes(int ano,int mes); int dias_do_ano(int ano); @@ -15,144 +16,161 @@ int dias_desde_principio_ano(int ano,int mes,int dia); long int dif_data(int ano1,int mes1,int dia1,int ano2,int mes2,int dia2); + + int main(void) + { int limite_ano_min=0,limite_ano_max=2100;//Valores limite para o ano// int ano_dt1,ano_dt2,mes_dt1,mes_dt2,dia_dt1,dia_dt2; long int score_dt1,score_dt2; //Variaveis que avaliam a data mais alta// int hora_dt1,hora_dt2,horas,min_dt1,min_dt2,tmins1,tmins2,minutos,tmp_ano,tmp_mes,tmp_dia,tmp_hora,tmp_min; - - printf("%c[2J",27); //clrscr(); - - printf(" ----------------------------------------------------\r\n"); - printf("| Programa que calcula a diferenca entre duas datas. |\r\n"); - printf("| |\r\n"); - printf("| LESEM ENAUTICA 2015 Luis Sousa aluno 11001 |\r\n"); - printf(" ----------------------------------------------------\r\n\n"); - - printf("\n\nIntroducao da Data 1\r\n"); - do { - printf("\nIntroduza o ano da Data 1: (%d-%d): ",limite_ano_min,limite_ano_max); - scanf("%d",&ano_dt1); - if (!((ano_dt1>=limite_ano_min)&&(ano_dt1<=limite_ano_max))) - printf("\r\nO ano tem de estar compreendido entre %d e %d ",limite_ano_min,limite_ano_max); - } while(!((ano_dt1>=limite_ano_min)&&(ano_dt1<=limite_ano_max))); - - do { - printf("\r\nIntroduza o mes da Data 1: (%d-%d): ",1,12); - scanf("%d",&mes_dt1); - if (!((mes_dt1>=1)&&(mes_dt1<=12))) - printf("\r\nO mes tem de estar compreendido entre %d e %d \n",1,12); - - } while(!((mes_dt1>=1)&&(mes_dt1<=12))); - - do { - printf("\r\nIntroduza o dia da Data 1: (%d-%d): ",1,dias_do_mes(ano_dt1,mes_dt1)); - scanf("%d",&dia_dt1); - if (!((dia_dt1>=1) && (dia_dt1 <= dias_do_mes(ano_dt1,mes_dt1)))) - printf("\r\nO dia tem de estar compreendido entre %d e %d \n",1,dias_do_mes(ano_dt1,mes_dt1)); - } while(!((dia_dt1>=1) && (dia_dt1 <= dias_do_mes(ano_dt1,mes_dt1)))); - - do { - printf("\r\nIntroduza a hora da Data 1: (%d-%d): ",0,23); - scanf("%d",&hora_dt1); - if (!((hora_dt1>=0) && (hora_dt1 <= 23))) - printf("\r\nA hora tem de estar compreendida entre %d e %d \n",0,23); - } while(!((hora_dt1>=0) && (hora_dt1 <= 23))); - - do { - printf("\r\nIntroduza os minutos da Data 1: (%d-%d): ",0,59); - scanf("%d",&min_dt1); - if (!((min_dt1>=0) && (min_dt1 <= 59))) - printf("\r\nOs minutos devem estar compreendidos entre %d e %d \n",0,59); - } while(!((min_dt1>=0) && (min_dt1 <= 59))); - - - printf("\r\n\nIntroducao da Data 2"); - do { - printf("\r\nIntroduza o ano da Data 2: (%d-%d): ",limite_ano_min,limite_ano_max); - scanf("%d",&ano_dt2); - if (!((ano_dt2>=limite_ano_min)&&(ano_dt2<=limite_ano_max))) - printf("\r\nO ano tem de estar compreendido entre %d e %d ",limite_ano_min,limite_ano_max); - - } while(!((ano_dt2>=limite_ano_min)&&(ano_dt2<=limite_ano_max))); - - do { - printf("\r\nIntroduza o mes da Data 2: (%d-%d): ",1,12); - scanf("%d",&mes_dt2); - if (!((mes_dt2>=1)&&(mes_dt2<=12))) - printf("\r\nO mes tem de estar compreendido entre %d e %d \n",1,12); - } while(!((mes_dt2>=1)&&(mes_dt2<=12))); + char opcao='N'; + int continuar=1; do { - printf("\r\nIntroduza o dia da Data 2: (%d-%d): ",1,dias_do_mes(ano_dt2,mes_dt2)); - scanf("%d",&dia_dt2); - if (!((dia_dt2>=1) && (dia_dt2 <= dias_do_mes(ano_dt2,mes_dt2)))) - printf("\r\nO dia tem de estar compreendido entre %d e %d \n",1,dias_do_mes(ano_dt2,mes_dt2)); - } while(!((dia_dt2>=1) && (dia_dt2 <= dias_do_mes(ano_dt2,mes_dt2)))); + printf("%c[2J",27); //clrscr(); - do { - printf("\r\nIntroduza a hora da Data 2: (%d-%d): ",0,23); - scanf("%d",&hora_dt2); - if (!((hora_dt2>=0) && (hora_dt2 <= 23))) - printf("\r\nA hora tem de estar compreendida entre %d e %d \n",0,23); - } while(!((hora_dt2>=0) && (hora_dt2 <= 23))); + printf(" ----------------------------------------------------\r\n"); + printf("| Programa que calcula a diferenca entre duas datas. |\r\n"); + printf("| |\r\n"); + printf("| LESEM ENAUTICA 2015 Luis Sousa aluno 11001 |\r\n"); + printf(" ----------------------------------------------------\r\n\n"); - do { - printf("\r\nIntroduza os minutos da Data 1: (%d-%d): ",0,59); - scanf("%d",&min_dt2); - if (!((min_dt2>=0) && (min_dt2 <= 59))) - printf("\r\nOs minutos devem estar compreendidos entre %d e %d \n",0,59); - } while(!((min_dt2>=0) && (min_dt2 <= 59))); + printf("\n\nIntroducao da Data 1\r\n"); + do { + printf("\r\nIntroduza o ano da Data 1: (%d-%d): ",limite_ano_min,limite_ano_max); + scanf("%d",&ano_dt1); + if (!((ano_dt1>=limite_ano_min)&&(ano_dt1<=limite_ano_max))) + printf("\r\nO ano tem de estar compreendido entre %d e %d ",limite_ano_min,limite_ano_max); + } while(!((ano_dt1>=limite_ano_min)&&(ano_dt1<=limite_ano_max))); - score_dt1 = dif_data(limite_ano_min,1,1,ano_dt1,mes_dt1,dia_dt1); - score_dt2 = dif_data(limite_ano_min,1,1,ano_dt2,mes_dt2,dia_dt2); - - tmins1= hora_dt1*60+min_dt1; //reduz primeira hora a minutos - tmins2= hora_dt2*60+min_dt2; //reduz segunda hora a minutos + do { + printf("\r\nIntroduza o mes da Data 1: (%d-%d): ",1,12); + scanf("%d",&mes_dt1); + if (!((mes_dt1>=1)&&(mes_dt1<=12))) + printf("\r\nO mes tem de estar compreendido entre %d e %d ",1,12); - if ((score_dt1>score_dt2)||((score_dt1 == score_dt2)&&(tmins1>tmins2))) - /* - Se a primeira data for maior que a segunda - troca as datas de forma a ficar data2>data1 - */ - { - tmp_ano=ano_dt1; - tmp_mes=mes_dt1; - tmp_dia=dia_dt1; - tmp_hora=hora_dt1; - tmp_min=min_dt1; + } while(!((mes_dt1>=1)&&(mes_dt1<=12))); - ano_dt1=ano_dt2; - mes_dt1=mes_dt2; - dia_dt1=dia_dt2; - hora_dt1=hora_dt2; - min_dt1=min_dt2; + do { + printf("\r\nIntroduza o dia da Data 1: (%d-%d): ",1,dias_do_mes(ano_dt1,mes_dt1)); + scanf("%d",&dia_dt1); + if (!((dia_dt1>=1) && (dia_dt1 <= dias_do_mes(ano_dt1,mes_dt1)))) + printf("\r\nO dia tem de estar compreendido entre %d e %d ",1,dias_do_mes(ano_dt1,mes_dt1)); + } while(!((dia_dt1>=1) && (dia_dt1 <= dias_do_mes(ano_dt1,mes_dt1)))); - ano_dt2=tmp_ano; - mes_dt2=tmp_mes; - dia_dt2=tmp_dia; - hora_dt2=tmp_hora; - min_dt2=tmp_min; - - tmins1= hora_dt1*60+min_dt1; //Depois da troca recalcula - tmins2= hora_dt2*60+min_dt2; //tmins1 e tmins2 - } + do { + printf("\r\nIntroduza a hora da Data 1: (%d-%d): ",0,23); + scanf("%d",&hora_dt1); + if (!((hora_dt1>=0) && (hora_dt1 <= 23))) + printf("\r\nA hora tem de estar compreendida entre %d e %d ",0,23); + } while(!((hora_dt1>=0) && (hora_dt1 <= 23))); - printf("\r\n\nData 1: %d-%d-%d %d horas e %d minutos",dia_dt1,mes_dt1,ano_dt1,hora_dt1,min_dt1); - printf("\r\nData 2: %d-%d-%d %d horas e %d minutos",dia_dt2,mes_dt2,ano_dt2,hora_dt2,min_dt2); - - if (tmins2>=tmins1) { //Se tmins2>tmins1 contabiliza dias completos mais algumas horas - horas=(tmins2-tmins1)/60; //diferenca em horas - minutos=(tmins2-tmins1)%60; //diferenca em minutos - printf("\r\n\nA diferenca entre estas duas datas e de %ld dias, %d horas e %d minutos. ",dif_data(ano_dt1,mes_dt1,dia_dt1,ano_dt2,mes_dt2,dia_dt2),horas,minutos); - } else { //Se tmins1>tmins2 retiramos um dia e fazemos a conta ah diferenca de horas - horas=(24*60-tmins1+tmins2)/60; //diferenca em horas - minutos=(24*60-tmins1+tmins2)%60; //diferenca em minutos - printf("\r\n\nA diferenca entre estas duas datas e de %ld dias. %d horas e %d minutos. ",dif_data(ano_dt1,mes_dt1,dia_dt1,ano_dt2,mes_dt2,dia_dt2)-1,horas,minutos); - } + do { + printf("\r\nIntroduza os minutos da Data 1: (%d-%d): ",0,59); + scanf("%d",&min_dt1); + if (!((min_dt1>=0) && (min_dt1 <= 59))) + printf("\r\nOs minutos devem estar compreendidos entre %d e %d ",0,59); + } while(!((min_dt1>=0) && (min_dt1 <= 59))); + printf("\r\n\nIntroducao da Data 2"); + do { + printf("\r\nIntroduza o ano da Data 2: (%d-%d): ",limite_ano_min,limite_ano_max); + scanf("%d",&ano_dt2); + if (!((ano_dt2>=limite_ano_min)&&(ano_dt2<=limite_ano_max))) + printf("\r\nO ano tem de estar compreendido entre %d e %d ",limite_ano_min,limite_ano_max); + + } while(!((ano_dt2>=limite_ano_min)&&(ano_dt2<=limite_ano_max))); + + do { + printf("\r\nIntroduza o mes da Data 2: (%d-%d): ",1,12); + scanf("%d",&mes_dt2); + if (!((mes_dt2>=1)&&(mes_dt2<=12))) + printf("\r\nO mes tem de estar compreendido entre %d e %d ",1,12); + } while(!((mes_dt2>=1)&&(mes_dt2<=12))); + + do { + printf("\r\nIntroduza o dia da Data 2: (%d-%d): ",1,dias_do_mes(ano_dt2,mes_dt2)); + scanf("%d",&dia_dt2); + if (!((dia_dt2>=1) && (dia_dt2 <= dias_do_mes(ano_dt2,mes_dt2)))) + printf("\r\nO dia tem de estar compreendido entre %d e %d ",1,dias_do_mes(ano_dt2,mes_dt2)); + } while(!((dia_dt2>=1) && (dia_dt2 <= dias_do_mes(ano_dt2,mes_dt2)))); + + do { + printf("\r\nIntroduza a hora da Data 2: (%d-%d): ",0,23); + scanf("%d",&hora_dt2); + if (!((hora_dt2>=0) && (hora_dt2 <= 23))) + printf("\r\nA hora tem de estar compreendida entre %d e %d ",0,23); + } while(!((hora_dt2>=0) && (hora_dt2 <= 23))); + + do { + printf("\r\nIntroduza os minutos da Data 1: (%d-%d): ",0,59); + scanf("%d",&min_dt2); + if (!((min_dt2>=0) && (min_dt2 <= 59))) + printf("\r\nOs minutos devem estar compreendidos entre %d e %d ",0,59); + } while(!((min_dt2>=0) && (min_dt2 <= 59))); + + score_dt1 = dif_data(limite_ano_min,1,1,ano_dt1,mes_dt1,dia_dt1); + score_dt2 = dif_data(limite_ano_min,1,1,ano_dt2,mes_dt2,dia_dt2); + + tmins1= hora_dt1*60+min_dt1; //reduz primeira hora a minutos + tmins2= hora_dt2*60+min_dt2; //reduz segunda hora a minutos + + if ((score_dt1>score_dt2)||((score_dt1 == score_dt2)&&(tmins1>tmins2))) + /* + Se a primeira data for maior que a segunda + troca as datas de forma a ficar data2>data1 + */ + { + tmp_ano=ano_dt1; + tmp_mes=mes_dt1; + tmp_dia=dia_dt1; + tmp_hora=hora_dt1; + tmp_min=min_dt1; + + ano_dt1=ano_dt2; + mes_dt1=mes_dt2; + dia_dt1=dia_dt2; + hora_dt1=hora_dt2; + min_dt1=min_dt2; + + ano_dt2=tmp_ano; + mes_dt2=tmp_mes; + dia_dt2=tmp_dia; + hora_dt2=tmp_hora; + min_dt2=tmp_min; + + tmins1= hora_dt1*60+min_dt1; //Depois da troca recalcula + tmins2= hora_dt2*60+min_dt2; //tmins1 e tmins2 + } + + printf("\r\n\nData 1: %d-%d-%d %d horas e %d minutos",dia_dt1,mes_dt1,ano_dt1,hora_dt1,min_dt1); + printf("\r\nData 2: %d-%d-%d %d horas e %d minutos",dia_dt2,mes_dt2,ano_dt2,hora_dt2,min_dt2); + + if (tmins2>=tmins1) { //Se tmins2>tmins1 contabiliza dias completos mais algumas horas + horas=(tmins2-tmins1)/60; //diferenca em horas + minutos=(tmins2-tmins1)%60; //diferenca em minutos + printf("\r\n\nA diferenca entre estas duas datas e de %ld dias, %d horas e %d minutos. ",dif_data(ano_dt1,mes_dt1,dia_dt1,ano_dt2,mes_dt2,dia_dt2),horas,minutos); + } else { //Se tmins1>tmins2 retiramos um dia e fazemos a conta ah diferenca de horas + horas=(24*60-tmins1+tmins2)/60; //diferenca em horas + minutos=(24*60-tmins1+tmins2)%60; //diferenca em minutos + printf("\r\n\nA diferenca entre estas duas datas e de %ld dias, %d horas e %d minutos. ",dif_data(ano_dt1,mes_dt1,dia_dt1,ano_dt2,mes_dt2,dia_dt2)-1,horas,minutos); + } + + printf("\r\n\nNovo Calculo de datas? (S/N) "); +// opcao=getc(); + scanf(" %c", &opcao); +// opcao = getchar(); */ + if((opcao =='S')||(opcao =='s')) continuar=1; + else { + continuar=0; +// clrscr(); + printf("\r\nCalculos terminados! \r\n\n"); + } + + } while (continuar); } int bissexto(int ano)