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.

Dependencies:   mbed

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)