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:
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);
 }