All pastes #483657 Raw Edit

Miscellany

public c v1 · immutable
·published 2007-05-11 20:50 UTC
rendered paste body
#include<stdio.h>int tipoano = 0;		/*tipoano 0 eh ano nao biss E tipoano 1 e ano biss */int ano = 0;float resto = 0;int diasmes = 0;int mes = 0;int dia1 = 0;int dia2 = 0;int mes1 = 0;int mes2 = 0;int ano1 = 0;int ano2 = 0;int erro1 = 0;			/*erro que o dia nao pertence ao mes */int erro2 = 0;			/*erro que o dia 29 do 2 nao existe no ano dado ou que o ano e nulo */int erro3 = 0;			/*erro que o dia nao esta primeiramente entre 1 e 31 */int erro4 = 0;			/*erro que o mes nao esta primeiramente entre 1 e 12 */int primeirodiadomes2 = 1;/*ao inves de tantas variaveis erro eu posso usar break*/int checano(int ano){	resto = ano % 400;	if (resto == 0) {		tipoano = 1;	} else {		float resto2 = 0;		float resto3 = 0;		resto2 = ano % 4;		resto3 = ano % 10;		if (resto2 == 0 && resto3 != 0) {			tipoano = 1;		} else {			tipoano = 0;		}	}	return tipoano;}int tipomes(int mes, int ano){	if (mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8	    || mes == 10 || mes == 12) {		diasmes = 31;	} else if (mes == 4 || mes == 6 || mes == 9 || mes == 11) {		diasmes = 30;	} else if (mes == 2) {		checano(ano);		if (tipoano == 1) {			diasmes = 29;		} else if (tipoano == 0) {			diasmes = 28;		}	}	return diasmes;}int main(){	do {		do {			printf			    ("\nEste programa calcula quantos dias existem entre duas datas.\nDigite o dia da primeira data: ");			scanf("%d", &dia1);	/*o dia precisa ser entre 1 e 31 inicialmente */			if (dia1 > 31 || dia1 < 1) {				printf				    ("\nO dia precisa estar entre 1 e 31\n Entre novamente com os dados");				erro3 = 1;			} else {				erro3 = 0;			}		} while (erro3 == 1);		do {			do {				printf				    ("\nDigite o mes da primeira data: ");				scanf("%d", &mes1);				if (mes1 < 1 || mes1 > 12) {					printf					    ("\nO mes precisa ser entre 1 e 12\n Entre novamente com os dados");					erro4 = 1;				} else {					erro4 = 0;				}			} while (erro4 == 1);			/*primeiro checar se o mes esta entre 1 e 31 */			/*checar se nao tem um erro no dia por mes */			tipomes(mes1, ano1);			if (dia1 > diasmes) {				printf				    ("\nO dia %d digitado nao existe no mes %d\n Entre com os dados novamente",				     dia1, mes1);				erro1 = 1;			}			/*acho que isso nao precisa ja que eu checo se o dia e nulo ou nao no momento em que ele e digitado e deve estar entre 1 e 31 ou 1 e 12			   else if ( dia1==0 || mes1==0)			   {			   printf("\nNao existem meses ou dias nulos\n Entre com os dados novamente");			   erro1=1;			   }			 */			else {				erro1 = 0;			}		} while (erro1 == 1);		printf("\nDigite o ano (por extenso) da primeira data: ");		scanf("%d", &ano1);		/*checar se o dia digitado for 29/02 de um ano nao bissexto */		checano(ano1);		if (mes1 == 2 && tipoano == 0 && dia1 == 29) {			printf			    ("\nVoce escolheu o dia 29/2 de um ano nao bissexto, entre com os dados novamente");			erro2 = 1;		} else if (ano1 == 0) {			printf("\nNao existem anos nulos");			erro2 = 1;		} else {			erro2 = 0;		}	} while (erro2 == 1);	do {		printf("\nAgora digite o dia da segunda data: ");		scanf("%d", &dia2);		if (dia2 > 31 || dia2 < 1) {			printf			    ("\nO dia precisa estar entre 1 e 31\n Entre novamente com os dados");			erro3 = 1;		} else {			erro3 = 0;		}	} while (erro3 == 1);	do {		do {			printf("\nDigite o mes da segunda data: ");			scanf("%d", &mes2);			if (mes2 < 1 || mes2 > 12) {				printf				    ("\nO mes precisa ser entre 1 e 12\n Entre novamente com os dados");				erro4 = 1;			} else {				erro4 = 0;			}		} while (erro4 == 1);		/*primeiro checar se o mes esta entre 1 e 31 */		/*checar se nao tem um erro no dia por mes */		tipomes(mes2, ano2);		if (dia2 > diasmes) {			printf			    ("\nO dia %d digitado nao existe no mes %d\n Entre com os dados novamente",			     dia1, mes1);			erro1 = 1;		}		/*acho que isso nao precisa ja que eu checo se o dia e nulo ou nao no momento em que ele e digitado e deve estar entre 1 e 31 ou 1 e 12		   else if ( dia1==0 || mes1==0)		   {		   printf("\nNao existem meses ou dias nulos\n Entre com os dados novamente");		   erro1=1;		   }		 */		else {			erro1 = 0;		}	} while (erro1 == 1);	do {		printf("\nDigite o ano (por extenso) da segunda data: ");		scanf("%d", &ano2);		/*checar se o dia digitado for 29/02 de um ano nao bissexto */		checano(ano2);		if (mes2 == 2 && tipoano == 0 && dia2 == 29) {			printf			    ("\nVoce escolheu o dia 29/2 de um ano nao bissexto, entre com os dados novamente");			erro2 = 1;		} else if (ano2 == 0) {			printf("\nNao existem anos nulos");			erro2 = 1;		} else {			erro2 = 0;		}	} while (erro2 == 1);/*-----------==========__comeco do calculo de dias__=======--------------*/	if (ano2 < ano1) {	/*inversao de datas no caso do usuario digitar o ano2 menor que o ano1 */		int temp = 0;		ano1 = temp;		ano1 = ano2;		ano2 = temp;		mes1 = temp;		mes1 = mes2;		mes2 = temp;		dia1 = temp;		dia1 = dia2;		dia2 = temp;	} else if (ano1 == ano2 && mes2 > mes1) {	/*para o caso de anos iguais e meses invertidos */		int temp = 0;		mes1 = temp;		mes1 = mes2;		mes2 = temp;		dia1 = temp;		dia1 = dia2;		dia2 = temp;	} else {	}			/*o programa nao esta continuando, porque? */	int contador = 1;	/*para incluir o dia1 nas contas */	/*checar se as datas sao iguais, se forem printar 0 dias */	if (ano1 == ano2 && mes1 == mes2 && dia1 == dia2) {		printf("\nExistem 0 dias entre o dia %d e o dia %d.", dia1,		       dia2);	}	/*checar se os anos e meses sao iguais, se forem fazer do dia1 ate o dia2 */	else if (ano1 == ano2 && mes1 == mes2) {		int numerodiasAMig;	/*para numero de dias em que os anos e meses sao iguais */		numerodiasAMig = dia2 - dia1;		printf		    ("O numero de dias entre %d/%d/%d e %d/%d/%d e de %d",		     dia1, mes1, ano1, dia2, mes2, ano2, numerodiasAMig);	}/*aqui calcula-se o intevalo no caso de somente anos iguais*/	else if (ano1 == ano2 && mes1 != mes2 && dia1 != dia2) {		/*calcular o numero de dias do dia1 ate o fim do mes1 */		tipomes(mes1, ano1);		while (dia1 < diasmes);		{			contador++;			dia1++;		}		/*checar se os anos sao iguais, se forem fazer do final do mes1 ate o inicio do mes2 e do inicio do mes2 ate o dia2 */		/*nao tem-se que checar se esse ano digitado e ou nao bissexto pois o a funcao tipomes ja faz isso quando checa o mes de fevereiro que e o problema aqui */		/*variavel tipo array nescessaria para a contagem dos dias dos diferentes meses */		int tempmes = 0;	/*ou seja ele pega o mes 1 que nao precisa mais contar e vai pro mes1+1 e vai saber quantos dias esse tem */		tempmes = mes1 + 1;		/*ate aqui o contador tem o numero de dias do dia1 ate o final do mes1, agora falta saber quantos dias tem do final do mes1 ate o inicio do mes 2 */		while (tempmes < mes2) {			tipomes(tempmes, ano1);			contador = diasmes + contador;			tempmes++;		}		/*agora o contador tem do dia1 ate o inicio do mes2 */		while (primeirodiadomes2 = dia2) {	/*coloquei igual ao inves de menor pois como contou-se o primeiro dia com contador=1 conta-se o ultimo */			contador++;			primeirodiadomes2++;		}		int diasentre = 0;		diasentre = contador - 2;		printf		    ("\n Os dias entre a data %d/%d/%d e %d/%d/%d e de %d dias.",		     dia1, mes1, ano1, dia2, mes2, ano2, diasentre);	}	else {		while (ano1 != ano2 && mes1 != mes2 && dia1 != dia2) {	/*a contagem vai parar quando o dia1=dia2 mes1=mes2 ano1=ano2 */			/*zerar o contadorb */			/*calcular quantos dias tem do dia1 ate o final do mes1, se possivel usar o calculo anterior caso ano igual mes diferente */			/*calcular quantos dias tem do final do mes1 ate o fim do ano1 */			/*calcular quantos dias tem do final do ano1 ate o comeco do ano2 */			/*qtos dias tem do comeco do ano2 ate o inicio do mes2 */			/*qtos dias tem do inicio do mes2 ate o dia2 se possivel usar o calculo anterior caso ano igual mes diferente */		}	}	return 0;}