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.
main.cpp@4:b0884b059d7e, 2015-05-22 (annotated)
- Committer:
- lmsousa
- Date:
- Fri May 22 09:24:10 2015 +0000
- Revision:
- 4:b0884b059d7e
- Parent:
- 3:add864dd8eab
Some BugFixes
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lmsousa | 0:dce171f603a8 | 1 | /* |
lmsousa | 0:dce171f603a8 | 2 | Programa que calcula a diferença entre duas datas. |
lmsousa | 0:dce171f603a8 | 3 | LESEM ENAUTICA 2014 Luis Sousa aluno 11001 |
lmsousa | 0:dce171f603a8 | 4 | */ |
lmsousa | 0:dce171f603a8 | 5 | |
lmsousa | 4:b0884b059d7e | 6 | #include <stdio.h> |
lmsousa | 0:dce171f603a8 | 7 | |
lmsousa | 4:b0884b059d7e | 8 | //#include "mbed.h" |
lmsousa | 4:b0884b059d7e | 9 | //Serial pc(USBTX, USBRX); |
lmsousa | 2:1d24f233ac26 | 10 | |
lmsousa | 3:add864dd8eab | 11 | int readkbd(void); |
lmsousa | 0:dce171f603a8 | 12 | int bissexto(int ano); |
lmsousa | 0:dce171f603a8 | 13 | int dias_do_mes(int ano,int mes); |
lmsousa | 0:dce171f603a8 | 14 | int dias_do_ano(int ano); |
lmsousa | 0:dce171f603a8 | 15 | int dias_ate_fim_mes(int ano,int mes,int dia); |
lmsousa | 0:dce171f603a8 | 16 | int dias_dos_meses_intermedios(int ano,int mes1,int mes2); |
lmsousa | 0:dce171f603a8 | 17 | int dias_dos_anos_intermedios(int ano1, int ano2); |
lmsousa | 0:dce171f603a8 | 18 | int dias_ate_fim_ano(int ano,int mes,int dia); |
lmsousa | 0:dce171f603a8 | 19 | int dias_desde_principio_ano(int ano,int mes,int dia); |
lmsousa | 0:dce171f603a8 | 20 | long int dif_data(int ano1,int mes1,int dia1,int ano2,int mes2,int dia2); |
lmsousa | 0:dce171f603a8 | 21 | |
lmsousa | 2:1d24f233ac26 | 22 | |
lmsousa | 2:1d24f233ac26 | 23 | |
lmsousa | 0:dce171f603a8 | 24 | int main(void) |
lmsousa | 2:1d24f233ac26 | 25 | |
lmsousa | 0:dce171f603a8 | 26 | { |
lmsousa | 1:0756a87e335f | 27 | int limite_ano_min=0,limite_ano_max=2100;//Valores limite para o ano// |
lmsousa | 1:0756a87e335f | 28 | int ano_dt1,ano_dt2,mes_dt1,mes_dt2,dia_dt1,dia_dt2; |
lmsousa | 1:0756a87e335f | 29 | long int score_dt1,score_dt2; //Variaveis que avaliam a data mais alta// |
lmsousa | 1:0756a87e335f | 30 | int hora_dt1,hora_dt2,horas,min_dt1,min_dt2,tmins1,tmins2,minutos,tmp_ano,tmp_mes,tmp_dia,tmp_hora,tmp_min; |
lmsousa | 2:1d24f233ac26 | 31 | char opcao='N'; |
lmsousa | 2:1d24f233ac26 | 32 | int continuar=1; |
lmsousa | 0:dce171f603a8 | 33 | |
lmsousa | 1:0756a87e335f | 34 | do { |
lmsousa | 3:add864dd8eab | 35 | printf("\r\n"); |
lmsousa | 2:1d24f233ac26 | 36 | printf("%c[2J",27); //clrscr(); |
lmsousa | 0:dce171f603a8 | 37 | |
lmsousa | 2:1d24f233ac26 | 38 | printf(" ----------------------------------------------------\r\n"); |
lmsousa | 2:1d24f233ac26 | 39 | printf("| Programa que calcula a diferenca entre duas datas. |\r\n"); |
lmsousa | 2:1d24f233ac26 | 40 | printf("| |\r\n"); |
lmsousa | 2:1d24f233ac26 | 41 | printf("| LESEM ENAUTICA 2015 Luis Sousa aluno 11001 |\r\n"); |
lmsousa | 2:1d24f233ac26 | 42 | printf(" ----------------------------------------------------\r\n\n"); |
lmsousa | 0:dce171f603a8 | 43 | |
lmsousa | 2:1d24f233ac26 | 44 | printf("\n\nIntroducao da Data 1\r\n"); |
lmsousa | 2:1d24f233ac26 | 45 | do { |
lmsousa | 2:1d24f233ac26 | 46 | printf("\r\nIntroduza o ano da Data 1: (%d-%d): ",limite_ano_min,limite_ano_max); |
lmsousa | 3:add864dd8eab | 47 | //scanf("%d",&ano_dt1); |
lmsousa | 3:add864dd8eab | 48 | ano_dt1=readkbd(); |
lmsousa | 2:1d24f233ac26 | 49 | if (!((ano_dt1>=limite_ano_min)&&(ano_dt1<=limite_ano_max))) |
lmsousa | 2:1d24f233ac26 | 50 | printf("\r\nO ano tem de estar compreendido entre %d e %d ",limite_ano_min,limite_ano_max); |
lmsousa | 2:1d24f233ac26 | 51 | } while(!((ano_dt1>=limite_ano_min)&&(ano_dt1<=limite_ano_max))); |
lmsousa | 1:0756a87e335f | 52 | |
lmsousa | 2:1d24f233ac26 | 53 | do { |
lmsousa | 2:1d24f233ac26 | 54 | printf("\r\nIntroduza o mes da Data 1: (%d-%d): ",1,12); |
lmsousa | 3:add864dd8eab | 55 | //scanf("%d",&mes_dt1); |
lmsousa | 3:add864dd8eab | 56 | mes_dt1=readkbd(); |
lmsousa | 2:1d24f233ac26 | 57 | if (!((mes_dt1>=1)&&(mes_dt1<=12))) |
lmsousa | 2:1d24f233ac26 | 58 | printf("\r\nO mes tem de estar compreendido entre %d e %d ",1,12); |
lmsousa | 2:1d24f233ac26 | 59 | } while(!((mes_dt1>=1)&&(mes_dt1<=12))); |
lmsousa | 0:dce171f603a8 | 60 | |
lmsousa | 2:1d24f233ac26 | 61 | do { |
lmsousa | 2:1d24f233ac26 | 62 | printf("\r\nIntroduza o dia da Data 1: (%d-%d): ",1,dias_do_mes(ano_dt1,mes_dt1)); |
lmsousa | 3:add864dd8eab | 63 | //scanf("%d",&dia_dt1); |
lmsousa | 3:add864dd8eab | 64 | dia_dt1=readkbd(); |
lmsousa | 2:1d24f233ac26 | 65 | if (!((dia_dt1>=1) && (dia_dt1 <= dias_do_mes(ano_dt1,mes_dt1)))) |
lmsousa | 2:1d24f233ac26 | 66 | printf("\r\nO dia tem de estar compreendido entre %d e %d ",1,dias_do_mes(ano_dt1,mes_dt1)); |
lmsousa | 2:1d24f233ac26 | 67 | } while(!((dia_dt1>=1) && (dia_dt1 <= dias_do_mes(ano_dt1,mes_dt1)))); |
lmsousa | 0:dce171f603a8 | 68 | |
lmsousa | 2:1d24f233ac26 | 69 | do { |
lmsousa | 2:1d24f233ac26 | 70 | printf("\r\nIntroduza a hora da Data 1: (%d-%d): ",0,23); |
lmsousa | 3:add864dd8eab | 71 | //scanf("%d",&hora_dt1); |
lmsousa | 3:add864dd8eab | 72 | hora_dt1=readkbd(); |
lmsousa | 2:1d24f233ac26 | 73 | if (!((hora_dt1>=0) && (hora_dt1 <= 23))) |
lmsousa | 2:1d24f233ac26 | 74 | printf("\r\nA hora tem de estar compreendida entre %d e %d ",0,23); |
lmsousa | 2:1d24f233ac26 | 75 | } while(!((hora_dt1>=0) && (hora_dt1 <= 23))); |
lmsousa | 0:dce171f603a8 | 76 | |
lmsousa | 2:1d24f233ac26 | 77 | do { |
lmsousa | 2:1d24f233ac26 | 78 | printf("\r\nIntroduza os minutos da Data 1: (%d-%d): ",0,59); |
lmsousa | 3:add864dd8eab | 79 | //scanf("%d",&min_dt1); |
lmsousa | 3:add864dd8eab | 80 | min_dt1=readkbd(); |
lmsousa | 2:1d24f233ac26 | 81 | if (!((min_dt1>=0) && (min_dt1 <= 59))) |
lmsousa | 2:1d24f233ac26 | 82 | printf("\r\nOs minutos devem estar compreendidos entre %d e %d ",0,59); |
lmsousa | 2:1d24f233ac26 | 83 | } while(!((min_dt1>=0) && (min_dt1 <= 59))); |
lmsousa | 0:dce171f603a8 | 84 | |
lmsousa | 0:dce171f603a8 | 85 | |
lmsousa | 2:1d24f233ac26 | 86 | printf("\r\n\nIntroducao da Data 2"); |
lmsousa | 2:1d24f233ac26 | 87 | do { |
lmsousa | 2:1d24f233ac26 | 88 | printf("\r\nIntroduza o ano da Data 2: (%d-%d): ",limite_ano_min,limite_ano_max); |
lmsousa | 3:add864dd8eab | 89 | //scanf("%d",&ano_dt2); |
lmsousa | 3:add864dd8eab | 90 | ano_dt2=readkbd(); |
lmsousa | 2:1d24f233ac26 | 91 | if (!((ano_dt2>=limite_ano_min)&&(ano_dt2<=limite_ano_max))) |
lmsousa | 2:1d24f233ac26 | 92 | printf("\r\nO ano tem de estar compreendido entre %d e %d ",limite_ano_min,limite_ano_max); |
lmsousa | 2:1d24f233ac26 | 93 | } while(!((ano_dt2>=limite_ano_min)&&(ano_dt2<=limite_ano_max))); |
lmsousa | 2:1d24f233ac26 | 94 | |
lmsousa | 2:1d24f233ac26 | 95 | do { |
lmsousa | 2:1d24f233ac26 | 96 | printf("\r\nIntroduza o mes da Data 2: (%d-%d): ",1,12); |
lmsousa | 3:add864dd8eab | 97 | //scanf("%d",&mes_dt2); |
lmsousa | 3:add864dd8eab | 98 | mes_dt2=readkbd(); |
lmsousa | 2:1d24f233ac26 | 99 | if (!((mes_dt2>=1)&&(mes_dt2<=12))) |
lmsousa | 2:1d24f233ac26 | 100 | printf("\r\nO mes tem de estar compreendido entre %d e %d ",1,12); |
lmsousa | 2:1d24f233ac26 | 101 | } while(!((mes_dt2>=1)&&(mes_dt2<=12))); |
lmsousa | 2:1d24f233ac26 | 102 | |
lmsousa | 2:1d24f233ac26 | 103 | do { |
lmsousa | 2:1d24f233ac26 | 104 | printf("\r\nIntroduza o dia da Data 2: (%d-%d): ",1,dias_do_mes(ano_dt2,mes_dt2)); |
lmsousa | 3:add864dd8eab | 105 | //scanf("%d",&dia_dt2); |
lmsousa | 3:add864dd8eab | 106 | dia_dt2=readkbd(); |
lmsousa | 2:1d24f233ac26 | 107 | if (!((dia_dt2>=1) && (dia_dt2 <= dias_do_mes(ano_dt2,mes_dt2)))) |
lmsousa | 2:1d24f233ac26 | 108 | printf("\r\nO dia tem de estar compreendido entre %d e %d ",1,dias_do_mes(ano_dt2,mes_dt2)); |
lmsousa | 2:1d24f233ac26 | 109 | } while(!((dia_dt2>=1) && (dia_dt2 <= dias_do_mes(ano_dt2,mes_dt2)))); |
lmsousa | 2:1d24f233ac26 | 110 | |
lmsousa | 2:1d24f233ac26 | 111 | do { |
lmsousa | 2:1d24f233ac26 | 112 | printf("\r\nIntroduza a hora da Data 2: (%d-%d): ",0,23); |
lmsousa | 3:add864dd8eab | 113 | //scanf("%d",&hora_dt2); |
lmsousa | 3:add864dd8eab | 114 | hora_dt2=readkbd(); |
lmsousa | 2:1d24f233ac26 | 115 | if (!((hora_dt2>=0) && (hora_dt2 <= 23))) |
lmsousa | 2:1d24f233ac26 | 116 | printf("\r\nA hora tem de estar compreendida entre %d e %d ",0,23); |
lmsousa | 2:1d24f233ac26 | 117 | } while(!((hora_dt2>=0) && (hora_dt2 <= 23))); |
lmsousa | 2:1d24f233ac26 | 118 | |
lmsousa | 2:1d24f233ac26 | 119 | do { |
lmsousa | 2:1d24f233ac26 | 120 | printf("\r\nIntroduza os minutos da Data 1: (%d-%d): ",0,59); |
lmsousa | 3:add864dd8eab | 121 | //scanf("%d",&min_dt2); |
lmsousa | 3:add864dd8eab | 122 | min_dt2=readkbd(); |
lmsousa | 2:1d24f233ac26 | 123 | if (!((min_dt2>=0) && (min_dt2 <= 59))) |
lmsousa | 2:1d24f233ac26 | 124 | printf("\r\nOs minutos devem estar compreendidos entre %d e %d ",0,59); |
lmsousa | 2:1d24f233ac26 | 125 | } while(!((min_dt2>=0) && (min_dt2 <= 59))); |
lmsousa | 2:1d24f233ac26 | 126 | |
lmsousa | 2:1d24f233ac26 | 127 | score_dt1 = dif_data(limite_ano_min,1,1,ano_dt1,mes_dt1,dia_dt1); |
lmsousa | 2:1d24f233ac26 | 128 | score_dt2 = dif_data(limite_ano_min,1,1,ano_dt2,mes_dt2,dia_dt2); |
lmsousa | 2:1d24f233ac26 | 129 | |
lmsousa | 2:1d24f233ac26 | 130 | tmins1= hora_dt1*60+min_dt1; //reduz primeira hora a minutos |
lmsousa | 2:1d24f233ac26 | 131 | tmins2= hora_dt2*60+min_dt2; //reduz segunda hora a minutos |
lmsousa | 2:1d24f233ac26 | 132 | |
lmsousa | 2:1d24f233ac26 | 133 | if ((score_dt1>score_dt2)||((score_dt1 == score_dt2)&&(tmins1>tmins2))) |
lmsousa | 2:1d24f233ac26 | 134 | /* |
lmsousa | 2:1d24f233ac26 | 135 | Se a primeira data for maior que a segunda |
lmsousa | 2:1d24f233ac26 | 136 | troca as datas de forma a ficar data2>data1 |
lmsousa | 2:1d24f233ac26 | 137 | */ |
lmsousa | 2:1d24f233ac26 | 138 | { |
lmsousa | 2:1d24f233ac26 | 139 | tmp_ano=ano_dt1; |
lmsousa | 2:1d24f233ac26 | 140 | tmp_mes=mes_dt1; |
lmsousa | 2:1d24f233ac26 | 141 | tmp_dia=dia_dt1; |
lmsousa | 2:1d24f233ac26 | 142 | tmp_hora=hora_dt1; |
lmsousa | 2:1d24f233ac26 | 143 | tmp_min=min_dt1; |
lmsousa | 2:1d24f233ac26 | 144 | |
lmsousa | 2:1d24f233ac26 | 145 | ano_dt1=ano_dt2; |
lmsousa | 2:1d24f233ac26 | 146 | mes_dt1=mes_dt2; |
lmsousa | 2:1d24f233ac26 | 147 | dia_dt1=dia_dt2; |
lmsousa | 2:1d24f233ac26 | 148 | hora_dt1=hora_dt2; |
lmsousa | 2:1d24f233ac26 | 149 | min_dt1=min_dt2; |
lmsousa | 2:1d24f233ac26 | 150 | |
lmsousa | 2:1d24f233ac26 | 151 | ano_dt2=tmp_ano; |
lmsousa | 2:1d24f233ac26 | 152 | mes_dt2=tmp_mes; |
lmsousa | 2:1d24f233ac26 | 153 | dia_dt2=tmp_dia; |
lmsousa | 2:1d24f233ac26 | 154 | hora_dt2=tmp_hora; |
lmsousa | 2:1d24f233ac26 | 155 | min_dt2=tmp_min; |
lmsousa | 2:1d24f233ac26 | 156 | |
lmsousa | 2:1d24f233ac26 | 157 | tmins1= hora_dt1*60+min_dt1; //Depois da troca recalcula |
lmsousa | 2:1d24f233ac26 | 158 | tmins2= hora_dt2*60+min_dt2; //tmins1 e tmins2 |
lmsousa | 2:1d24f233ac26 | 159 | } |
lmsousa | 2:1d24f233ac26 | 160 | |
lmsousa | 2:1d24f233ac26 | 161 | printf("\r\n\nData 1: %d-%d-%d %d horas e %d minutos",dia_dt1,mes_dt1,ano_dt1,hora_dt1,min_dt1); |
lmsousa | 2:1d24f233ac26 | 162 | printf("\r\nData 2: %d-%d-%d %d horas e %d minutos",dia_dt2,mes_dt2,ano_dt2,hora_dt2,min_dt2); |
lmsousa | 2:1d24f233ac26 | 163 | |
lmsousa | 2:1d24f233ac26 | 164 | if (tmins2>=tmins1) { //Se tmins2>tmins1 contabiliza dias completos mais algumas horas |
lmsousa | 2:1d24f233ac26 | 165 | horas=(tmins2-tmins1)/60; //diferenca em horas |
lmsousa | 2:1d24f233ac26 | 166 | minutos=(tmins2-tmins1)%60; //diferenca em minutos |
lmsousa | 2:1d24f233ac26 | 167 | 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); |
lmsousa | 2:1d24f233ac26 | 168 | } else { //Se tmins1>tmins2 retiramos um dia e fazemos a conta ah diferenca de horas |
lmsousa | 2:1d24f233ac26 | 169 | horas=(24*60-tmins1+tmins2)/60; //diferenca em horas |
lmsousa | 2:1d24f233ac26 | 170 | minutos=(24*60-tmins1+tmins2)%60; //diferenca em minutos |
lmsousa | 2:1d24f233ac26 | 171 | 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); |
lmsousa | 2:1d24f233ac26 | 172 | } |
lmsousa | 2:1d24f233ac26 | 173 | |
lmsousa | 2:1d24f233ac26 | 174 | printf("\r\n\nNovo Calculo de datas? (S/N) "); |
lmsousa | 2:1d24f233ac26 | 175 | // opcao=getc(); |
lmsousa | 4:b0884b059d7e | 176 | // scanf(" %c", &opcao); |
lmsousa | 4:b0884b059d7e | 177 | opcao = getchar(); |
lmsousa | 2:1d24f233ac26 | 178 | if((opcao =='S')||(opcao =='s')) continuar=1; |
lmsousa | 2:1d24f233ac26 | 179 | else { |
lmsousa | 2:1d24f233ac26 | 180 | continuar=0; |
lmsousa | 2:1d24f233ac26 | 181 | // clrscr(); |
lmsousa | 2:1d24f233ac26 | 182 | printf("\r\nCalculos terminados! \r\n\n"); |
lmsousa | 2:1d24f233ac26 | 183 | } |
lmsousa | 2:1d24f233ac26 | 184 | |
lmsousa | 2:1d24f233ac26 | 185 | } while (continuar); |
lmsousa | 0:dce171f603a8 | 186 | } |
lmsousa | 0:dce171f603a8 | 187 | |
lmsousa | 0:dce171f603a8 | 188 | int bissexto(int ano) |
lmsousa | 0:dce171f603a8 | 189 | { |
lmsousa | 1:0756a87e335f | 190 | if((ano%400==0)||((ano%4==0)&&(ano%100!=0))) |
lmsousa | 1:0756a87e335f | 191 | return 1; |
lmsousa | 1:0756a87e335f | 192 | else |
lmsousa | 1:0756a87e335f | 193 | return 0; |
lmsousa | 0:dce171f603a8 | 194 | } |
lmsousa | 0:dce171f603a8 | 195 | |
lmsousa | 0:dce171f603a8 | 196 | int dias_do_ano(int ano) |
lmsousa | 0:dce171f603a8 | 197 | { |
lmsousa | 1:0756a87e335f | 198 | if (bissexto(ano))return 366; |
lmsousa | 1:0756a87e335f | 199 | else return 365; |
lmsousa | 0:dce171f603a8 | 200 | } |
lmsousa | 0:dce171f603a8 | 201 | |
lmsousa | 0:dce171f603a8 | 202 | int dias_do_mes(int ano,int mes) |
lmsousa | 0:dce171f603a8 | 203 | { |
lmsousa | 1:0756a87e335f | 204 | if (mes == 1||mes == 3||mes == 5||mes == 7||mes == 8||mes == 10||mes == 12) |
lmsousa | 1:0756a87e335f | 205 | return 31; |
lmsousa | 1:0756a87e335f | 206 | else if(mes == 4||mes == 6||mes == 9||mes == 11) |
lmsousa | 1:0756a87e335f | 207 | return 30; |
lmsousa | 1:0756a87e335f | 208 | else if (mes == 2) |
lmsousa | 0:dce171f603a8 | 209 | if (bissexto (ano)) |
lmsousa | 1:0756a87e335f | 210 | return 29; |
lmsousa | 0:dce171f603a8 | 211 | else |
lmsousa | 1:0756a87e335f | 212 | return 28; |
lmsousa | 1:0756a87e335f | 213 | else return 255; //erro!!! mes invalido// |
lmsousa | 0:dce171f603a8 | 214 | } |
lmsousa | 0:dce171f603a8 | 215 | |
lmsousa | 0:dce171f603a8 | 216 | int dias_ate_fim_mes(int ano,int mes,int dia) |
lmsousa | 0:dce171f603a8 | 217 | { |
lmsousa | 1:0756a87e335f | 218 | return (dias_do_mes(ano,mes)-dia); |
lmsousa | 0:dce171f603a8 | 219 | } |
lmsousa | 0:dce171f603a8 | 220 | |
lmsousa | 0:dce171f603a8 | 221 | int dias_dos_meses_intermedios(int ano,int mes1,int mes2) |
lmsousa | 0:dce171f603a8 | 222 | { |
lmsousa | 1:0756a87e335f | 223 | int i,dias=0; |
lmsousa | 1:0756a87e335f | 224 | i=mes1; |
lmsousa | 1:0756a87e335f | 225 | i++; /*O primeiro e o ultimo mes nao sao contabilizados. So os intermedios*/ |
lmsousa | 1:0756a87e335f | 226 | while (i<mes2) { |
lmsousa | 1:0756a87e335f | 227 | dias = dias + dias_do_mes(ano,i); |
lmsousa | 1:0756a87e335f | 228 | i++; |
lmsousa | 1:0756a87e335f | 229 | } |
lmsousa | 1:0756a87e335f | 230 | return dias; |
lmsousa | 0:dce171f603a8 | 231 | } |
lmsousa | 0:dce171f603a8 | 232 | |
lmsousa | 0:dce171f603a8 | 233 | int dias_dos_anos_intermedios(int ano1,int ano2) |
lmsousa | 0:dce171f603a8 | 234 | { |
lmsousa | 1:0756a87e335f | 235 | int i,dias = 0; |
lmsousa | 1:0756a87e335f | 236 | i=ano1; |
lmsousa | 1:0756a87e335f | 237 | i++; /*O primeiro e o ultimo ano nao sao contabilizados. So os intermedios*/ |
lmsousa | 1:0756a87e335f | 238 | while (i<ano2) { |
lmsousa | 1:0756a87e335f | 239 | dias = dias + dias_do_ano(i); |
lmsousa | 1:0756a87e335f | 240 | i++; |
lmsousa | 1:0756a87e335f | 241 | } |
lmsousa | 1:0756a87e335f | 242 | return dias; |
lmsousa | 0:dce171f603a8 | 243 | } |
lmsousa | 0:dce171f603a8 | 244 | |
lmsousa | 1:0756a87e335f | 245 | int dias_ate_fim_ano(int ano,int mes,int dia) |
lmsousa | 0:dce171f603a8 | 246 | { |
lmsousa | 1:0756a87e335f | 247 | return dias_ate_fim_mes(ano,mes,dia)+ dias_dos_meses_intermedios(ano,mes,13); |
lmsousa | 1:0756a87e335f | 248 | /* Calcula dias ate fim do ano. Como os extremos nao sao contabilizados |
lmsousa | 1:0756a87e335f | 249 | envia-se 13 para contabilizar Mes de Dezembro */ |
lmsousa | 0:dce171f603a8 | 250 | } |
lmsousa | 0:dce171f603a8 | 251 | |
lmsousa | 0:dce171f603a8 | 252 | int dias_desde_principio_ano(int ano,int mes,int dia) |
lmsousa | 0:dce171f603a8 | 253 | { |
lmsousa | 1:0756a87e335f | 254 | return dias_dos_meses_intermedios(ano,0,mes)+ dia; |
lmsousa | 1:0756a87e335f | 255 | /*Calcula dias desde principio do ano. |
lmsousa | 1:0756a87e335f | 256 | Como os extremos nao sao contabilizados |
lmsousa | 1:0756a87e335f | 257 | envia-se 0 para contabilizar Janeiro */ |
lmsousa | 0:dce171f603a8 | 258 | } |
lmsousa | 0:dce171f603a8 | 259 | |
lmsousa | 0:dce171f603a8 | 260 | long int dif_data(int ano1,int mes1,int dia1,int ano2,int mes2,int dia2) |
lmsousa | 0:dce171f603a8 | 261 | { |
lmsousa | 1:0756a87e335f | 262 | if (ano1 == ano2 && mes1 == mes2) |
lmsousa | 1:0756a87e335f | 263 | return dia2-dia1; |
lmsousa | 1:0756a87e335f | 264 | else if(ano1 == ano2 && mes1 != mes2) |
lmsousa | 1:0756a87e335f | 265 | return dias_ate_fim_mes(ano1,mes1,dia1) //Dias ate ao fim do 1o mes// |
lmsousa | 1:0756a87e335f | 266 | + dias_dos_meses_intermedios(ano1,mes1,mes2) //Dias dos meses intermedios// |
lmsousa | 1:0756a87e335f | 267 | + dia2; // Dias do ultimo mes // |
lmsousa | 0:dce171f603a8 | 268 | else |
lmsousa | 1:0756a87e335f | 269 | return dias_ate_fim_ano(ano1,mes1,dia1) |
lmsousa | 1:0756a87e335f | 270 | + dias_dos_anos_intermedios(ano1,ano2) //Calcula dias dos anos intermedios// |
lmsousa | 1:0756a87e335f | 271 | + dias_desde_principio_ano(ano2,mes2,dia2); |
lmsousa | 0:dce171f603a8 | 272 | } |
lmsousa | 0:dce171f603a8 | 273 | |
lmsousa | 3:add864dd8eab | 274 | int readkbd(void) |
lmsousa | 3:add864dd8eab | 275 | { |
lmsousa | 3:add864dd8eab | 276 | int value=0; |
lmsousa | 3:add864dd8eab | 277 | int ch=0; |
lmsousa | 3:add864dd8eab | 278 | int sair=0; |
lmsousa | 0:dce171f603a8 | 279 | |
lmsousa | 3:add864dd8eab | 280 | while (!sair) { //enquanto nao for enter, le |
lmsousa | 4:b0884b059d7e | 281 | char ch = getchar(); |
lmsousa | 3:add864dd8eab | 282 | if(ch >= '0' && ch <= '9') { // 0 .. 9? |
lmsousa | 3:add864dd8eab | 283 | value = (value * 10) + (ch - '0'); // sim, acumula |
lmsousa | 4:b0884b059d7e | 284 | putchar(ch); |
lmsousa | 3:add864dd8eab | 285 | } else { |
lmsousa | 3:add864dd8eab | 286 | if (ch==13) sair=1; |
lmsousa | 3:add864dd8eab | 287 | //else if (ch==8) printf("\b"); |
lmsousa | 4:b0884b059d7e | 288 | //else printf(">C%i<",ch); |
lmsousa | 3:add864dd8eab | 289 | } |
lmsousa | 3:add864dd8eab | 290 | } |
lmsousa | 3:add864dd8eab | 291 | printf("\r\nValor introduzido: %i",value); |
lmsousa | 3:add864dd8eab | 292 | return value; |
lmsousa | 3:add864dd8eab | 293 | } |