Help in C Algorithm activity

1

Does anyone know what I'm doing wrong in my code?

  

1) Make a program that determines the chronologically greater date between two dates provided by the user. Each date must be composed of three integer values, where the first represents the day, the second, the month and the third, the year.

Here's what I've tried:

#include <stdio.h>
#include <locale.h> //Biblioteca locale é uitlizada para definar o idioma do programa.

int main()
{
    setlocale(LC_ALL,"portuguese"); //Comando utilizado para caracteres especiais aparecerem.
    int dia,mes,ano;
    int dia2,mes2,ano2;

    printf("Comparador de datas \n\n");

    printf("Primeira data \n");
    printf("    Digite o dia (1 a 31): ");
    scanf("%d",&dia);
    printf("    Digite o mês (1 a 12): ");
    scanf("%d",&mes);
    printf("    Digite o ano: ");
    scanf("%d",&ano);

    printf("\n");

    printf("Segunda data \n");
    printf("    Digite o dia (1 a 31): ");
    scanf("%d",&dia2);
    printf("    Digite o mês (1 a 12): ");
    scanf("%d",&mes2);
    printf("    Digite o ano: ");
    scanf("%d",&ano2);

//Inicio compartivo de anos
    if (ano > ano2){
        printf("\n\n");
        printf("A maior data é %d/%d/%d \n",dia,mes,ano);
    }
    else if (ano2 > ano) {
        printf("\n\n");
        printf("A maior data é %d/%d/%d \n",dia2,mes2,ano2);
        printf("\n\n");
    }
//

//Inicio compartivo dos meses
    if (mes > mes2) {
        if (ano > ano2) {
            printf("\n\n");
            printf("A maior data é %d/%d/%d",dia,mes,ano);
            printf("\n\n");
        }
        else if( ano2 > ano); {
            printf("\n\n");
            printf("A maior data é %d/%d/%d",dia2,mes,ano2);
            printf("\n\n");
        }
    }

    else if (mes2 > mes) {
        if (ano > ano2) {
            printf("\n\n");
            printf("A maior data é %d/%d/%d",dia,mes,ano);
            printf("\n\n");

        }
        else if (ano2 > ano); {
            printf("\n\n");
            printf("A maior data é %d/%d/%d",dia2,mes2,ano2);
            printf("\n\n");

        }
    }
 //
 //Inicio compartivo dos dias
    if (dia > dia2) {
        if (ano > ano2) {
            printf("\n\n");
            printf("A maior data é %d/%d/%d",dia,mes,ano);
            printf("\n\n");
        }
        else if( ano2 > ano); {
            printf("\n\n");
            printf("A maior data é %d/%d/%d",dia,mes,ano2);
            printf("\n\n");
        }
    }

    else if (dia2 > dia) {
        if (ano > ano2) {
            printf("\n\n");
            printf("A maior data é %d/%d/%d",dia2,mes,ano);
            printf("\n\n");

        }
        else if (ano2 > ano); {
            printf("\n\n");
            printf("A maior data é %d/%d/%d",dia2,mes2,ano2);
            printf("\n\n");

        }
    }
}

    
asked by anonymous 31.03.2018 / 20:16

1 answer

1

Let's see, under what conditions is the first date greater?

  

If the year of the first date is greater than the year of the second. Or, if the years are equal, if the month of the first date is greater than that of the second. Or, if the years and months of the two dates are equal, but the first day is greater.

that is:

  

ano1 > ano2 || (ano1 == ano2 && mes1 > mes2) || (ano1 == ano2 && mes1 == mes2 && dia1 > dia2) .

This can still be simplified a bit:

  

ano1 > ano2 || ano1 == ano2 && (mes1 > mes2 || (mes1 == mes2 && dia1 > dia2)) .

And to check if the second date is greater than the first date instead of the other, simply reverse the > to < .

Another thing is that you have several if s like this:

if (condicao) {
    comando1();
    comando2a();
    comando3();
} else {
    comando1();
    comando2b();
    comando3();
}

The comando1() and comando3() are executed regardless of the path taken in if . That means they can be moved out of it:

comando1();
if (condicao) {
    comando2a();
} else {
    comando2b();
}
comando3();

With this, your code can be greatly simplified:

#include <stdio.h>
#include <locale.h> //Biblioteca locale é uitlizada para definar o idioma do programa.

int main() {
    setlocale(LC_ALL, "portuguese"); //Comando utilizado para caracteres especiais aparecerem.
    int dia1, mes1, ano1;
    int dia2, mes2, ano2;

    printf("Comparador de datas \n\n");

    printf("Primeira data \n");
    printf("    Digite o dia (1 a 31): ");
    scanf("%d", &dia1);
    printf("    Digite o mês (1 a 12): ");
    scanf("%d", &mes1);
    printf("    Digite o ano: ");
    scanf("%d", &ano1);

    printf("\n");

    printf("Segunda data \n");
    printf("    Digite o dia (1 a 31): ");
    scanf("%d", &dia2);
    printf("    Digite o mês (1 a 12): ");
    scanf("%d", &mes2);
    printf("    Digite o ano: ");
    scanf("%d", &ano2);

    // Compartivo
    printf("\n\n");
    if (ano1 > ano2 || ano1 == ano2 && (mes1 > mes2 || (mes1 == mes2 && dia1 > dia2))) {
        printf("A maior data é %d/%d/%d \n", dia1, mes1, ano1);
    } else if (ano1 < ano2 || ano1 == ano2 && (mes1 < mes2 || (mes1 == mes2 && dia1 < dia2))) {
        printf("A maior data é %d/%d/%d \n", dia2, mes2, ano2);
    } else {
        printf("As datas são iguais: %d/%d/%d \n", dia1, mes1, ano1);
    }
    printf("\n\n");

    return 0;
}

See here working on ideone.

    
01.04.2018 / 00:24