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
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.
#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