![](/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:
- 1:0756a87e335f
- Parent:
- 0:dce171f603a8
- Child:
- 2:1d24f233ac26
--- a/main.cpp Wed May 13 12:01:41 2015 +0000 +++ b/main.cpp Wed May 13 12:44:02 2015 +0000 @@ -4,7 +4,6 @@ */ #include <stdio.h> -//#include <conio.h> int bissexto(int ano); int dias_do_mes(int ano,int mes); @@ -18,251 +17,228 @@ 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; + 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(); - //clrscr(); - printf("Programa que calcula a diferenca entre duas datas. "); - printf("\nLESEM ENAUTICA 2014 Luis Sousa aluno 11001"); - printf("\n\nIntroducao da Data 1"); - 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("O 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))); + 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("Introduza o mes da Data 1: (%d-%d): ",1,12); - scanf("%d",&mes_dt1); - if (!((mes_dt1>=1)&&(mes_dt1<=12))) - printf("O mes tem de estar compreendido entre %d e %d \n",1,12); + 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))); - } - while(!((mes_dt1>=1)&&(mes_dt1<=12))); + 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); - do - { - printf("Introduza 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("O 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)))); + } while(!((mes_dt1>=1)&&(mes_dt1<=12))); - do - { - printf("Introduza a hora da Data 1: (%d-%d): ",0,23); - scanf("%d",&hora_dt1); - if (!((hora_dt1>=0) && (hora_dt1 <= 23))) - printf("A hora tem de estar compreendida entre %d e %d \n",0,23); - } - while(!((hora_dt1>=0) && (hora_dt1 <= 23))); + 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("Introduza os minutos da Data 1: (%d-%d): ",0,59); - scanf("%d",&min_dt1); - if (!((min_dt1>=0) && (min_dt1 <= 59))) - printf("Os minutos devem estar compreendidos entre %d e %d \n",0,59); - } - while(!((min_dt1>=0) && (min_dt1 <= 59))); + 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("\n\nIntroducao da Data 2"); - do - { - printf("\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("O ano tem de estar compreendido entre %d e %d ",limite_ano_min,limite_ano_max); + 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))); + } while(!((ano_dt2>=limite_ano_min)&&(ano_dt2<=limite_ano_max))); - do - { - printf("Introduza o mes da Data 2: (%d-%d): ",1,12); - scanf("%d",&mes_dt2); - if (!((mes_dt2>=1)&&(mes_dt2<=12))) - printf("O mes tem de estar compreendido entre %d e %d \n",1,12); - } - while(!((mes_dt2>=1)&&(mes_dt2<=12))); + 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))); - do - { - printf("Introduza 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("O 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)))); + 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)))); - do - { - printf("Introduza a hora da Data 2: (%d-%d): ",0,23); - scanf("%d",&hora_dt2); - if (!((hora_dt2>=0) && (hora_dt2 <= 23))) - printf("A hora tem de estar compreendida entre %d e %d \n",0,23); - } - while(!((hora_dt2>=0) && (hora_dt2 <= 23))); + 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))); - do - { - printf("Introduza os minutos da Data 1: (%d-%d): ",0,59); - scanf("%d",&min_dt2); - if (!((min_dt2>=0) && (min_dt2 <= 59))) - printf("Os minutos devem estar compreendidos entre %d e %d \n",0,59); - } - while(!((min_dt2>=0) && (min_dt2 <= 59))); + 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))); + + 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); - 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 + 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; + 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_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; + 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("\nData 1: %d-%d-%d %d horas e %d minutos",dia_dt1,mes_dt1,ano_dt1,hora_dt1,min_dt1); - printf("\nData 2: %d-%d-%d %d horas e %d minutos",dia_dt2,mes_dt2,ano_dt2,hora_dt2,min_dt2); + tmins1= hora_dt1*60+min_dt1; //Depois da troca recalcula + tmins2= hora_dt2*60+min_dt2; //tmins1 e tmins2 + } - 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("\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("\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\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); + } } int bissexto(int ano) { - if((ano%400==0)||((ano%4==0)&&(ano%100!=0))) - return 1; - else - return 0; + if((ano%400==0)||((ano%4==0)&&(ano%100!=0))) + return 1; + else + return 0; } int dias_do_ano(int ano) { - if (bissexto(ano))return 366; - else return 365; + if (bissexto(ano))return 366; + else return 365; } int dias_do_mes(int ano,int mes) { - if (mes == 1||mes == 3||mes == 5||mes == 7||mes == 8||mes == 10||mes == 12) - return 31; - else - if(mes == 4||mes == 6||mes == 9||mes == 11) - return 30; - else - if (mes == 2) + if (mes == 1||mes == 3||mes == 5||mes == 7||mes == 8||mes == 10||mes == 12) + return 31; + else if(mes == 4||mes == 6||mes == 9||mes == 11) + return 30; + else if (mes == 2) if (bissexto (ano)) - return 29; + return 29; else - return 28; - else return 255; //erro!!! mes invalido// + return 28; + else return 255; //erro!!! mes invalido// } int dias_ate_fim_mes(int ano,int mes,int dia) { - return (dias_do_mes(ano,mes)-dia); + return (dias_do_mes(ano,mes)-dia); } int dias_dos_meses_intermedios(int ano,int mes1,int mes2) { - int i,dias=0; - i=mes1; - i++; /*O primeiro e o ultimo mes nao sao contabilizados. So os intermedios*/ - while (i<mes2) - { - dias = dias + dias_do_mes(ano,i); - i++; - } - return dias; + int i,dias=0; + i=mes1; + i++; /*O primeiro e o ultimo mes nao sao contabilizados. So os intermedios*/ + while (i<mes2) { + dias = dias + dias_do_mes(ano,i); + i++; + } + return dias; } int dias_dos_anos_intermedios(int ano1,int ano2) { - int i,dias = 0; - i=ano1; - i++; /*O primeiro e o ultimo ano nao sao contabilizados. So os intermedios*/ - while (i<ano2) - { - dias = dias + dias_do_ano(i); - i++; - } - return dias; + int i,dias = 0; + i=ano1; + i++; /*O primeiro e o ultimo ano nao sao contabilizados. So os intermedios*/ + while (i<ano2) { + dias = dias + dias_do_ano(i); + i++; + } + return dias; } -int dias_ate_fim_ano(int ano,int mes,int dia) +int dias_ate_fim_ano(int ano,int mes,int dia) { - return dias_ate_fim_mes(ano,mes,dia)+ dias_dos_meses_intermedios(ano,mes,13); - /* Calcula dias ate fim do ano. Como os extremos nao sao contabilizados - envia-se 13 para contabilizar Mes de Dezembro */ + return dias_ate_fim_mes(ano,mes,dia)+ dias_dos_meses_intermedios(ano,mes,13); + /* Calcula dias ate fim do ano. Como os extremos nao sao contabilizados + envia-se 13 para contabilizar Mes de Dezembro */ } int dias_desde_principio_ano(int ano,int mes,int dia) { - return dias_dos_meses_intermedios(ano,0,mes)+ dia; - /*Calcula dias desde principio do ano. - Como os extremos nao sao contabilizados - envia-se 0 para contabilizar Janeiro */ + return dias_dos_meses_intermedios(ano,0,mes)+ dia; + /*Calcula dias desde principio do ano. + Como os extremos nao sao contabilizados + envia-se 0 para contabilizar Janeiro */ } long int dif_data(int ano1,int mes1,int dia1,int ano2,int mes2,int dia2) { - if (ano1 == ano2 && mes1 == mes2) - return dia2-dia1; - else - if(ano1 == ano2 && mes1 != mes2) - return dias_ate_fim_mes(ano1,mes1,dia1) //Dias ate ao fim do 1o mes// - + dias_dos_meses_intermedios(ano1,mes1,mes2) //Dias dos meses intermedios// - + dia2; // Dias do ultimo mes // + if (ano1 == ano2 && mes1 == mes2) + return dia2-dia1; + else if(ano1 == ano2 && mes1 != mes2) + return dias_ate_fim_mes(ano1,mes1,dia1) //Dias ate ao fim do 1o mes// + + dias_dos_meses_intermedios(ano1,mes1,mes2) //Dias dos meses intermedios// + + dia2; // Dias do ultimo mes // else - return dias_ate_fim_ano(ano1,mes1,dia1) - + dias_dos_anos_intermedios(ano1,ano2) //Calcula dias dos anos intermedios// - + dias_desde_principio_ano(ano2,mes2,dia2); + return dias_ate_fim_ano(ano1,mes1,dia1) + + dias_dos_anos_intermedios(ano1,ano2) //Calcula dias dos anos intermedios// + + dias_desde_principio_ano(ano2,mes2,dia2); }