Ir ao conteúdo
  • Cadastre-se

ghetsys

Membro Júnior
  • Posts

    4
  • Cadastrado em

  • Última visita

posts postados por ghetsys

  1. Já tenho boa parte do código pronto, funcional entre 2 anos diferentes, o problema é que, quando os anos são iguais ocorre erros.

    De 01/01/2001 a 02/01/2001 por exemplo, seria 0 dias, mas resulta em 365.

    Eu fiz uma limitação para ser o ano for igual, mas acaba nessa soma de 365, então pensei em tirar 365 se o ano for igual, e novamente resulta em 365. Alguém consegue me ajudar em identificar o que fiz de errado?

    Spoiler
    
    #include <stdlib.h>
    #include <stdio.h>
    
    int DiaN;
    int MesN;
    int AnoN;
    
    int DiaA;
    int MesA;
    int AnoA;
    
    int TotalDiasA;
    int TotalDiasN;
    
    int TotalDias;
    
    int cta;
    
    int diasMes[12];
    
    main(){
    	// atribuir dias aos meses	
    	diasMes[0] = 31;
    	diasMes[1] = 28;
    	diasMes[2] = 31;
    	diasMes[3] = 30;
    	diasMes[4] = 31;
    	diasMes[5] = 30;
    	diasMes[6] = 31;
    	diasMes[7] = 31;
    	diasMes[8] = 30;
    	diasMes[9] = 31;
    	diasMes[10] = 30;
    	diasMes[11] = 31;
    		
    	printf("\n Digite o ano de aniversario: ");
    	scanf("%d", &AnoN);
    	
    	//se for bissexto fev tem 29
    	if(AnoN % 4 == 0){
    		
    		diasMes[1] = 29;
    		
    	}
    	
    	while(MesN < 1 || MesN > 12){
    		
    		printf("\n Digite o mes de aniversario: ");
    		scanf("%d", &MesN);
    }
    	while(DiaN < 1 || DiaN > diasMes[MesN - 1]){
    		
    		printf("\n Digite o dia de aniversario: ");
    		scanf("%d", &DiaN);
    		
    }
        TotalDias = diasMes[MesN-1] - DiaN; //Conta os dias para o mês acabar;
    	for(cta = MesN+1; cta <= 12 ; cta++){ //Conta os meses para o ano acabar;
    		TotalDias +=  diasMes[cta-1];
    	}
    
    	
    	//voltar fevereiro pra 28 pra validar
    	diasMes[1] = 28;
    	
    	while(AnoA < AnoN || (AnoA - AnoN) >= 150){
    		
    	printf("\n Digite o ano atual: ");
    	scanf("%d", &AnoA);
    	
    }
    	
    	//ver se tb é bissexto
    	if(AnoA % 4 == 0){
    		
    		diasMes[1] = 29;
    		
    	}
    	
    	while(MesA < 1 || MesA > 12){
    		
    		printf("\n Digite o mes atual: ");
    		scanf("%d", &MesA);
    }
    	while(DiaA < 1 || DiaA > diasMes[MesA - 1]){
    		
    		printf("\n Digite o dia atual: ");
    		scanf("%d", &DiaA);
    		
    }
    	for(cta = 1; cta < MesA ; cta++){ // Conta os meses que tem no ano atual
    		TotalDias += diasMes[cta-1];
    	}
    	TotalDias += DiaA; //Contas os dias no último  mes do ano atual
    
    	if(AnoN != AnoA){
    	for (cta = AnoN+1; cta < AnoA; cta++){
    	if (cta % 4 == 0){
    		TotalDias += 366; else TotalDias += 365;}
    	}
    	}
    	
    	if(AnoN == AnoA){
    		TotalDias = TotalDias - 365
    	}
    	
    	printf("\nVocê viveu : ");
    	printf("%d", TotalDias);
    	printf(" dias.");
    }

     

     

  2. 31 minutos atrás, Flávio Pedroza disse:
    
    #include <stdlib.h>
    #include <stdio.h>
    
    int DiaN;
    int MesN;
    int AnoN;
    
    int DiaA;
    int MesA;
    int AnoA;
    
    int TotalDiasA;
    int TotalDiasN;
    
    int TotalDias;
    
    int cta;
    
    int diasMes[12];
    
    main(){
    	// atribuir dias aos meses	
    	diasMes[0] = 31;
    	diasMes[1] = 28;
    	diasMes[2] = 31;
    	diasMes[3] = 30;
    	diasMes[4] = 31;
    	diasMes[5] = 30;
    	diasMes[6] = 31;
    	diasMes[7] = 31;
    	diasMes[8] = 30;
    	diasMes[9] = 31;
    	diasMes[10] = 30;
    	diasMes[11] = 31;
    		
    	printf("\n Digite o ano de aniversario: ");
    	scanf("%d", &AnoN);
    	
    	//se for bissexto fev tem 29
    	if(AnoN % 4 == 0){
    		
    		diasMes[1] = 29;
    		
    	}
    	
    	while(MesN < 1 || MesN > 12){
    		
    		printf("\n Digite o mes de aniversario: ");
    		scanf("%d", &MesN);
    }
    	while(DiaN < 1 || DiaN > diasMes[MesN - 1]){
    		
    		printf("\n Digite o dia de aniversario: ");
    		scanf("%d", &DiaN);
    		
    }
        TotalDias = diasMes[MesN-1] - DiaN; //Conta os dias para o mês acabar;
    	for(cta = MesN+1; cta <= 12 ; cta++){ //Conta os meses para o ano acabar;
    		TotalDias +=  diasMes[cta-1];
    	}
    
    	
    	//voltar fevereiro pra 28 pra validar
    	diasMes[1] = 28;	
    	
    	while(AnoA < AnoN || (AnoA - AnoN) >= 150){
    		
    	printf("\n Digite o ano atual: ");
    	scanf("%d", &AnoA);
    	
    }
    	
    	//ver se tb é bissexto
    	if(AnoA % 4 == 0){
    		
    		diasMes[1] = 29;
    		
    	}
    	
    	while(MesA < 1 || MesA > 12){
    		
    		printf("\n Digite o mes atual: ");
    		scanf("%d", &MesA);
    }
    	while(DiaA < 1 || DiaA > diasMes[MesA - 1]){
    		
    		printf("\n Digite o dia atual: ");
    		scanf("%d", &DiaA);
    		
    }
    	for(cta = 1; cta < MesA ; cta++){ // Conta os meses que tem no ano atual
    		TotalDias += diasMes[cta-1];
    	}
    	TotalDias += DiaA; //Contas os dias no último  mes do ano atual
    
    	
    	//voltar fev pra 28
    	//diasMes[1] = 28;
    	
    	for (cta = AnoN+1; cta < AnoA; cta++)
    	  if (cta % 4 == 0) TotalDias += 366; else TotalDias += 365;
    	//TotalDias = TotalDias * 365;
    	
    		/*for(cta = AnoN + 1; cta < AnoA; cta++){
    		if(cta % 4 == 0){
    			TotalDias = (TotalDias + 1);
    		}
    	}*/
    	
    	printf("\nVocê viveu : ");
    	printf("%d", TotalDias);
    	printf(" dias.");
    }

     

    Obrigado, o erro então estava na contagem dos dias totais no ano de inicio e no ano final?

  3. Olá a todos, estou precisando de ajuda para finalizar um programa.

     

    Eu recebo o dia, mês e ano de nascimento de alguém e o atual, e então vejo a diferença de dias entre as duas datas.

    O problema é que, a data chega perto, mas das diversas tentativas que fiz, nunca chega na data exata, e em alguns casos, até passa da data certa.

    Meus testes por enquanto:

    7/7/2001 a 14/5/2019 : 6847 dias (o resultado teria que ser 6520)

    1/1/2001 a 14/5/2019 : 7028 dias (o resultado teria que ser 6707)

    O problema que surge (que facilitaria muito) é que eu não posso usar comandos que façam a diferença entre duas datas ou algo do tipo.

     

    Caso consigam me ajudar, muito obrigado.

     

    #include <stdlib.h>
    #include <stdio.h>
    
    int DiaN;
    int MesN;
    int AnoN;
    
    int DiaA;
    int MesA;
    int AnoA;
    
    int TotalDiasA;
    int TotalDiasN;
    
    int TotalDias;
    
    int cta;
    
    int diasMes[12];
    
    main(){
    	// atribuir dias aos meses	
    	diasMes[0] = 31;
    	diasMes[1] = 28;
    	diasMes[2] = 31;
    	diasMes[3] = 30;
    	diasMes[4] = 31;
    	diasMes[5] = 30;
    	diasMes[6] = 31;
    	diasMes[7] = 31;
    	diasMes[8] = 30;
    	diasMes[9] = 31;
    	diasMes[10] = 30;
    	diasMes[11] = 31;
    		
    	printf("\n Digite o ano de aniversario: ");
    	scanf("%d", &AnoN);
    	
    	//se for bissexto fev tem 29
    	if(AnoN % 4 == 0){
    		
    		diasMes[1] = 29;
    		
    	}
    	
    	while(MesN < 1 || MesN > 12){
    		
    		printf("\n Digite o mes de aniversario: ");
    		scanf("%d", &MesN);
    }
    	while(DiaN < 1 || DiaN > diasMes[MesN - 1]){
    		
    		printf("\n Digite o dia de aniversario: ");
    		scanf("%d", &DiaN);
    		
    }
    
    	for(cta = MesN; cta < 12 ; cta++){
    		if(MesN == 12){
    			TotalDiasN = TotalDiasN + (diasMes[11] - DiaN);
    			break;
    		}else{
    		TotalDiasN = (TotalDiasN + diasMes[cta]);
    	}
    }
    	
    	//voltar fevereiro pra 28 pra validar
    	diasMes[1] = 28;	
    	
    	while(AnoA < AnoN || (AnoA - AnoN) >= 150){
    		
    	printf("\n Digite o ano atual: ");
    	scanf("%d", &AnoA);
    	
    }
    	
    	//ver se tb é bissexto
    	if(AnoA % 4 == 0){
    		
    		diasMes[1] = 29;
    		
    	}
    	
    	while(MesA < 1 || MesA > 12){
    		
    		printf("\n Digite o mes atual: ");
    		scanf("%d", &MesA);
    }
    	while(DiaA < 1 || DiaA > diasMes[MesA - 1]){
    		
    		printf("\n Digite o dia atual: ");
    		scanf("%d", &DiaA);
    		
    }
    	for(cta = MesA - 2; cta >= 0 ; cta--){
    		if(MesA == 1){
    			TotalDiasA = TotalDiasA + (diasMes[0] - DiaA);
    		}else{
    		TotalDiasA = (TotalDiasA + diasMes[cta]);
    	}
    }
    	
    	//voltar fev pra 28
    	diasMes[1] = 28;
    	
    	TotalDias = (AnoA - AnoN);
    	TotalDias = TotalDias * 365;
    	
    	TotalDias = (TotalDias + TotalDiasA + TotalDiasN);
    	
    	for(cta = AnoN + 1; cta < AnoA; cta++){
    		if(cta % 4 == 0){
    			TotalDias = (TotalDias + 1);
    		}
    	}
    	
    	printf("\nVocê viveu : ");
    	printf("%d", TotalDias);
    	printf(" dias.");
    }

     

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!