Informática, perguntado por silvanadasilvas, 1 ano atrás

faca um programa que determine a data cronologicamente maior de duas datas fornecidas pelo usuário. cada data deve ser fornecida por três valores inteiros, onde o primeiro representa o dia, o segundo o mês e o terceiro o ano
resposta em c++ por favor

Soluções para a tarefa

Respondido por bokomoko
3
Eu faria assim

#include <iostream> using namespace std;   int main() {   int ano1;  int mes1;  int dia1;  int ano2;  int mes2;  int dia2;
  
    cout << "Informe o dia da primeira data: ";     cin >> dia1;        cout << "Informe o mês da primeira data: ";     cin >> mes1;        cout << "Informe o ano da primeira data: ";     cin >> ano1;            cout << "Informe o dia da segunda data: ";     cin >> dia2;        cout << "Informe o mês da segunda data: ";     cin >> mes2;        cout << "Informe o ano da segunda data: ";     cin >> ano2;        if (ano2*10000 + mes2 * 100 + dia2 > ano1*10000 + mes1* 100 + dia1) {         cout << "A segunda data é maior que a primeira" << endl;    }    else {         cout << "A primeira data é maior que a segunda" << endl;    }     }

O pulo do gato aí é a comparação 

Observe que para comparar uma data com outra devemos começar comparando com o ANO
Se o ano de uma data for maior que o ano da outra data, não importa o mês e o dia das datas
Se o ano for IGUAL aí devemos comparar o mês ...Se um Mês for maior que o outro, essa é a maior data, não importa o dia
Se o ano e o mês forem iguais, aí comparamos o dia e quem tiver o dia maior é a maior data.

Para fazer essa comparação assim, são vários if's aninhados o que complica o código. O truque então é converter a data num número que será assim
aaaammdd
Por exemplo 27 de outubro de 2017 fica
20171027
Em seguida comparamos um número com o outro simplesmente e o maior é data maior.

Como transformar 3 números diferentes num número só de 8 algarismos ? Multiplicando o ano por 10 mil o número fica
aaaa0000 ou seja, os 4 dígitos do ano seguidos por 4 zeros (10 mil tem 4 zeros)
20170000
A mesma técnica se usa para o ano, que vai ser multiplicado por 100 para dar espaço para o dia.
o mês 10 vira 1000 (10 mais dois zeros)
aí somamos aos 20170000 + 1000 fica 20171000
aí somamos o dia, 20171000 + 27 = 20171027

Pronto, fazemos isso com a outra data e teremos um número para comparar.

bokomoko: Essa técnica só funciona porque os valores de dia e de mês NAO PODEM ter mais de 2 dígitos. Dia é no máximo 31 e o mês é no máximo 12. Não existe mês 184, por exemplo.
Perguntas interessantes