Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Compilador GCC GNU/LINUX - UBUNTU 10.04
- #include "stdio.h"
- #include "ctype.h"
- #include "string.h"
- #include "stdlib.h"
- #include "math.h"
- int dia=0, mes=0, ano, diaf=0, mesf=0, anof, p=0, x=0;
- FILE *dataslidas, *saidaformatada;
- int barras_inicio(char *str1) //função para converter a data incial com barras para inteiro************************************
- {char str[10];
- int i, j, k, o;
- for(i=0; str1[i]!='/'; i++) //até a primeira barra
- str[i] = str1[i]; //str vai receber o dia
- str[i] = '\0';
- dia = atoi(str); //transforma a string para inteiro
- for(j=i+1, o=0; str1[j]!='/'; j++, o++) //até a primeira barra
- str[o] = str1[j]; //str vai receber o mes
- str[o] = '\0';
- mes = atoi(str); //transforma a string para inteiro
- for(k=j+1, o=0; str1[k]!='\0'; k++, o++) //até o final da string
- str[o] = str1[k]; //str vai receber o ano
- str[o] = '\0';
- ano = atoi(str); //transforma a string para inteiro
- }
- int barras_final(char *str1) //função para converter a data final com barras para inteiro ***************************************8
- {char str[10];
- int i, j, k, o;
- for(i=0; str1[i]!='/'; i++) //até a primeira barra
- str[i] = str1[i]; //str vai receber o dia
- str[i] = '\0';
- diaf = atoi(str); //transforma a string para inteiro
- for(j=i+1, o=0; str1[j]!='/'; j++, o++) //até a primeira barra
- str[o] = str1[j]; //str vai receber o mes
- str[o] = '\0';
- mesf = atoi(str); //transforma a string para inteiro
- for(k=j+1, o=0; str1[k]!='\0'; k++, o++)//até o final da string
- str[o] = str1[k]; //str vai receber o ano
- str[o] = '\0';
- anof = atoi(str); //transforma a string para inteiro
- }
- int func_mes(char *mes1) //*******************************************
- {int i;
- for(i=0; mes1[i]!='\0'; i++) //maiuscula recebe
- mes1[i] = tolower(mes1[i]); //minuscula
- if(!strcmp(mes1,"janeiro")) //---------------
- return 1; // |
- if(!strcmp(mes1,"fevereiro")) // |
- return 2; // Função |
- if(!strcmp(mes1,"março")) // |
- return 3; // que |
- if(!strcmp(mes1,"abril")) // |
- return 4; // retorna |
- if(!strcmp(mes1,"maio")) // |
- return 5; // o |
- if(!strcmp(mes1,"junho")) // |
- return 6; // inteiro |
- if(!strcmp(mes1,"julho")) // |
- return 7; // equivalente |
- if(!strcmp(mes1,"agosto")) // |
- return 8; // ao |
- if(!strcmp(mes1,"setembro")) // |
- return 9; // mes |
- if(!strcmp(mes1,"outubro")) // |
- return 10; // escrito |
- if(!strcmp(mes1,"novembro")) // |
- return 11; // |
- if(!strcmp(mes1,"dezembro")) // |
- return 12; //---------------
- return 0;
- }
- /*Função que recebe uma string relacionada à data inicial em extenso ( DD de Mes de AAAA ) coloca os valores de mes e ano em variáveis int e a de mes em um string para comparação na função func_mes();*/
- int extenso_inicio(char *str1)
- {int i, j, k, o;
- char str[10], mes1[15];
- for(i=0; str1[i]!=' '; i++)
- str[i] = str1[i];
- str[i] = '\0';
- dia = atoi(str);
- for(j=i+4, o=0; str1[j]!=' '; j++, o++)
- mes1[o] = str1[j];
- mes1[o] = '\0';
- for(k=j+4, o=0; str1[k]!='\0'; k++, o++)
- str[o] = str1[k];
- str[o] = '\0';
- ano = atoi(str);
- mes = func_mes(mes1);
- }
- /*Função que recebe uma string relacionada à data final em extenso ( DD de Mes de AAAA ) coloca os valores de mes e ano em variáveis int e a de mes em um string para comparação na função func_mes();*/
- int extenso_final(char *str1)
- {int i, j, k, o;
- char str[10], mes1[15];
- for(i=0; str1[i]!=' '; i++)
- str[i] = str1[i];
- str[i] = '\0';
- diaf = atoi(str);
- for(j=i+4, o=0; str1[j]!=' '; j++, o++)
- mes1[o] = str1[j];
- mes1[o] = '\0';
- for(k=j+4, o=0; str1[k]!='\0'; k++, o++)
- str[o] = str1[k];
- str[o] = '\0';
- anof = atoi(str);
- mesf = func_mes(mes1);
- }
- /*Função que le a data inicial inserida pelo usuário*/
- int ins_inicio(){
- int i, j, s;
- char c=' ', str1[100];
- puts("Escreva a data inicial(dd/mm/aaaa ou dia de mes de ano):");
- for(i=0; c!='\n'; i++){
- scanf("%c", &c);
- str1[i] = c;
- if((str1[i] == ' ' && str1[i-1] == ' ')||str1[0] == ' ')
- i = i - 1;
- }
- str1[i-1] = '\0';
- if(str1[1]=='/'||str1[2]=='/'||str1[3]=='/'){
- for(j=0; j<i; j++) {
- if(str1[j] == ' ') {
- for(s=j; s<i; s++)
- str1[s] = str1[s+1];
- }
- }
- barras_inicio(str1);
- }
- else
- extenso_inicio(str1);
- if(ano < 100 && ano <= 50)
- ano = ano + 2000;
- if(ano < 100 && ano > 50)
- ano = ano + 1900;
- c = ' ';
- }
- /*Função que le a string de primeira data do arquivo*/
- int inicio_arq() {
- int i, j, s;
- char c=' ', str1[100];
- for(i=0; c!='\n'; i++){
- if(fscanf(dataslidas, "%c", &c)==1)
- str1[i] = c;
- else
- exit(0);
- if((str1[i] == ' ' && str1[i-1] == ' ')||str1[0] == ' ')
- i = i - 1;
- }
- str1[i-1] = '\0';
- if(str1[1]=='/'||str1[2]=='/'||str1[3]=='/'){
- for(j=0; j<i; j++) {
- if(str1[j] == ' ') {
- for(s=j; s<i; s++)
- str1[s] = str1[s+1];
- }
- }
- barras_inicio(str1);
- }
- else
- extenso_inicio(str1);
- if(ano < 100 && ano <= 50)
- ano = ano + 2000;
- if(ano < 100 && ano > 50)
- ano = ano + 1900;
- c = ' ';
- }
- /*Função que le a data final inserida pelo usuário*/
- int ins_final() {
- int i, j, s;
- char c=' ', str2[100];
- puts("Escreva a data final(dd/mm/aaaa ou dia de mes de ano):");
- for(i=0; c!='\n'; i++) {
- scanf("%c", &c);
- str2[i] = c;
- if((str2[i] == ' ' && str2[i-1] == ' ')||str2[0] == ' ')
- i = i - 1;
- }
- str2[i-1] = '\0';
- if(str2[1]=='/'||str2[2]=='/'||str2[3]=='/'){
- for(j=0; j<i; j++) {
- if(str2[j] == ' '){
- for(s=j; s<i; s++)
- str2[s] = str2[s+1];
- }
- }
- barras_final(str2);
- }
- else
- extenso_final(str2);
- if(anof < 100 && anof <= 50)
- anof = anof + 2000;
- if(anof < 100 && anof > 50)
- anof = anof + 1900;
- c = ' ';
- }
- /*Função que le a string de segunda data do arquivo*/
- int final_arq(){
- int i, j, s;
- char c=' ', str2[100];
- for(i=0; c!='\n'; i++){
- if(fscanf(dataslidas, "%c", &c)==1)
- str2[i] = c;
- else
- exit(0);
- if((str2[i] == ' ' && str2[i-1] == ' ')||str2[0] == ' ')
- i = i - 1;
- }
- str2[i-1] = '\0';
- if(str2[1]=='/'||str2[2]=='/'||str2[3]=='/'){
- for(j=0; j<i; j++){
- if(str2[j] == ' '){
- for(s=j; s<i; s++)
- str2[s] = str2[s+1];
- }
- }
- barras_final(str2);
- }
- else
- extenso_final(str2);
- if(anof < 100 && anof <= 50)
- anof = anof + 2000;
- if(anof < 100 && anof > 50)
- anof = anof + 1900;
- c = ' ';
- }
- /*Função que determina se as datas analisadas pelo programa (depois de inserido pelo usuário ou pelo arquivo) existem e define qual data é posterior, de modo que, o programa consiga calcular datas de tras para frente e mostre quantos dias existem entre as datas*/
- int dataval(){
- int k=1, d, m, a;
- if((mes==1&&dia<32)||(mes==2&&dia<30)||(mes>2&&mes%2==1&&mes<8&&dia<32)||(mes>3&&mes%2==0&&mes<8&&dia<31)||(mes>7&&m<13&&m%2==0&&dia<32)||(mes>7&&m<13&&m%2==1&&dia<31)){
- if((dia==29&&mes==2)&&(ano%4!=0||((ano%100==0)&&(ano%400!=0)))||(diaf==29&&mesf==2)&&(anof%4!=0||((anof%100==0)&&(anof%400!=0))))
- printf("\nA data inserida é inválida.\n");
- else{
- if((ano>anof)||(ano==anof && mes>mesf)||(ano==anof && mes==mesf && dia>diaf)){
- d = dia; m = mes; a = ano;
- dia = diaf; mes = mesf; ano = anof;
- diaf = d; mesf = m; anof = a;
- } //---------------
- if(((ano%4==0&&((ano%100!=0)||(ano%400==0)))&&(dia==29&&mes==2))&&((anof%4==0&&((anof%100!=0)||(anof%400==0)))&&(diaf==29&&mesf==2))) {
- k = 0;
- dia--; x=1;
- diaf--; p=1;
- }
- else{
- if((ano%4==0&&((ano%100!=0)||(ano%400==0)))&&(dia==29&&mes==2)){
- k = 0;
- dia--; x=1;
- }
- else{
- if((anof%4==0&&((anof%100!=0)||(anof%400==0)))&&(diaf==29&&mesf==2)){
- k = 0;
- diaf--; p=1;
- }
- else
- k = 0;
- }
- }
- }
- }
- else
- printf("\nA data inserida é inválida.\n");
- return k;
- }
- /*Função recursiva que recebe os valores inteiros de dia, mes e ano, inicial e final, e recursivamente, vai contando os dias*/
- int func(int d, int m, int a, int df, int mf, int af, int n){
- if(d == df && m == mf && a == af)
- return n-1;
- if((m>0&&m<8&&m%2==1&&d==31)||(m>0&&m<8&&m%2==0&&d==30)||(m>7&&m<12&&m%2==0&&d==31)||(m>7&&m<12&&m%2==1&&d==30)||(m==2&&a%4==0&&a%400==0&&a%100!=0&&d==29)||(m==2&&a%4!=0&&d==28))
- func(1, m+1, a, df, mf, af, n+1);
- else{
- if(m == 12 && d == 31)
- func(1, 1, a+1, df, mf, af, n+1);
- else
- func(d+1, m, a, df, mf, af, n+1);
- }
- }
- /*Função que acrescenta os dias dos anos bissextos*/
- int ano_bissexto (int dias) {
- int i;
- for (i=ano; i<=anof; i++)
- if ((i%4==0)&&(i%100!=0)&&(i%400==0))
- if((ano==anof&&mes<=2&&mesf>2)||(ano<anof&&mes<=2)||(i!=ano&&i!=anof)||(i==anof&&mesf>2)||(i=anof&&p))
- dias++;
- return dias;
- }
- /*Função chamada diretamente pela main, que o usuário entra com a opção de seu interesse caso insira a opção 1, o usuario devera inserir as datas necessarias, caso insira a opção 2 o usuário irá receber as datas qe estão presentes no arquivo bancoDadosDatas.txt*/
- void menu () {
- int i, dias, k=1, z=1, x=1;
- char str[10], res;
- saidaformatada = fopen("formatadas.txt", "a");
- puts("-----------------------\n|(1) - Data do teclado|\n|(2) - Data do arquivo|\n-----------------------");
- scanf("%c%*c", &res);
- switch (res){
- case 1: {
- while(k)
- { ins_inicio();
- ins_final();
- k = dataval();
- }
- dias = func(dia, mes, ano, diaf, mesf, anof, 0);
- fprintf(saidaformatada, "Data Inicial: %d/%d/%d Data Final: %d/%d/%d => Total de Dias Decorridos: %d dias\n", dia, mes, ano, diaf, mesf, anof, dias);
- printf("\n%d dia(s)\n\n", dias);
- break;
- }
- case 2: {
- dataslidas = fopen("bancoDadosDatas.txt", "r");
- if(dataslidas == NULL)
- { puts("Não existe esse arquivo.");
- dataslidas = fopen("bancoDadosDatas.txt", "w");
- exit(0);
- }
- while(!feof(dataslidas))
- { inicio_arq();
- final_arq();
- x = dataval();
- if(!x)
- { dias = func(dia, mes, ano, diaf, mesf, anof, 0)+1;
- dias = ano_bissexto(dias);
- printf("\n%d/%d/%d - %d/%d/%d = %d dia(s)\n\n", dia, mes, ano, diaf, mesf, anof, dias);
- fprintf(saidaformatada, "Data Inicial: %d/%d/%d Data Final: %d/%d/%d => Total de Dias Decorridos: %d dias\n", dia, mes, ano, diaf, mesf, anof, dias);
- }
- else
- puts("Data do arquivo está incorreta");
- }
- fclose(dataslidas);
- break;
- }
- fclose(saidaformatada);
- }
- }
- main(){
- menu ();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement