Ir ao conteúdo
  • Cadastre-se
Visitante

Calcular data de vencimento c++

Recommended Posts

Visitante

Alguém poderia me ajudar??

 

Sou estudando de Eng. da computação, e a professora passou uma atividade em c++ para. comparar uma data de validade de uma carteira de habilitaçao, e dizer se ela ja esta vencida ou não, e eu não sei como fazer comparação de datas, alguém pode me ajudar???

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Sonoctez cara você algum conhecimento com essa linguagem? se sim, dependendo do seu conhecimento e de forma simplificada, basta criar variaveis para armazenar a data de criação da carteira (dia, mês, ano) e algumas outras para armazenar a data de quando ira vencer (tambem ano, mês, dia), nisso você pode criar uma condição em um IF para comparar essas datas depois imprimir a mensagem na tela. É algo relativamente fácil de se fazer até o ponto que eu entendi.

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <stdio.h>
#include <time.h>

int main(){
    char dateStr [9]; //vetor de char para guardar a data do sistema
    int dia1, mes1, ano1; //variaveis para guardar a data de vencimento
    int dia2, mes2, ano2; //variaveis para guardar a data do sistema
    int op = 1; //só coloquei aqui para fazer um loop
    _strdate(dateStr); //pega a data atual do sistema e guarda em um vetor de char
    dia2 = (dateStr[3]-48)*10 + (dateStr[4]-48); //retira do vetor de char a parte dia
    mes2 = (dateStr[0]-48)*10 + (dateStr[1]-48); //retira do vetor de char a parte mes
    ano2 = (dateStr[6]-48)*10 + (dateStr[7]-48); //retira do vetor de char a parte ano
    while(op == 1){ //só ta aqui para poder fazer varios testes
        printf("Insira a data de vencimento no formato dd/mm/aa: "); //daqui pra frente é logica, pode fazer do jeito que quiser
        scanf("%d/%d/%d", &dia1, &mes1, &ano1);
        printf( "Data atual: %.2d/%.2d/%.2d\n", dia2, mes2, ano2);
        if(ano1<ano2)
            printf("Carta vencida!\n");
        else if(ano1==ano2 && mes1<mes2)
            printf("Carta vencida!\n");
        else if(ano1==ano2 && mes1==mes2 && dia1<dia2)
            printf("Carta vencida!\n");
        else
            printf("Carta em dia!\n");
        printf("Digite 1 para nova consulta ou 0 para finalizar: ");
        scanf("%d", &op);
    }
    return 0;
}

Por favor, use esse código só para tentar entender, não copie pois assim você não vai aprender.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  •    0
    Visitante

    @MassakiMsk Minha unica duvida, você poderia me explicar essas 3 linhas? não entendi muito bem a logica. 

    eu sei que dateStr é o nome da variável que coloquei pra armazenar a data, porém não entendi os números dentro dos [], o -48, a multiplicação por 10 e a soma.

     

    dia2 = (dateStr[3]-48)*10 + (dateStr[4]-48);

    mes2 = (dateStr[0]-48)*10 + (dateStr[1]-48);

    ano2 = (dateStr[6]-48)*10 + (dateStr[7]-48);

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @Sonoctez O vetor que ele criou para armazenar as informações é de char mas quando você vai realizar a comparação esse "calculo" é feito em int, então você tem de converter de char->int por isso o -48.

    Para entender melhor temos de olhar uma tabela ASCII asciifull.gif
    Por exemplo, o caractere 7 em char é na verdade o número 55 em decimal, se você subtrair -48 dará o 7 em int que precisa para realizar a comparação.

    A multiplicação por 10 é porque o número naquela posição do vetor representa o decimal. dateStr[0] , dateStr[3] e dateStr[6] são os multiplos de 10. Por exemplo se for o dia 20 armazenado, a posição dateStr[3] terá apenas o número 2, multiplicando por 10 fica o dia correto.

    Espero que não tenha ficado muito confuso.

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário

    Criar uma conta

    Crie uma nova conta em nossa comunidade. É fácil!

    Crie uma nova conta

    Entrar

    Já tem uma conta? Faça o login.

    Entrar agora





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×