Exercício: calcular a data do dia anterior

Fala galera da programação, tudo beleza?
📅💻 Explore a manipulação de datas e descubra como calcular o dia anterior em várias linguagens de programação! Aprenda algoritmos, lógica condicional e muito mais neste desafio divertido.
Considerações
Para facilitar, considerar que os anos bissextos são aqueles divisíveis por 4.
Assim o mês 2 (fevereiro) possui 28 dias, exceto nos anos bissextos, nos quais possui 29 dias.
Abril (4), junho(6), setembro(9) e novembro(11) possuem 30 dias e os demais 31 dias.
Dica do Exercício
Subtrair 1 unidade do dia, se o resultado for menor que 1, determinar o mes anterior, seão já está tudo ok.
Quando for necessário determinar o mês anterior (subtrair 1 do mesmo, se o resultado for menor que 1, atribuir 12 para o mês e determinar o ano anterior subtraindo 1 do ano; determinar o dia considerando a quantidade de dias do mês calculado)
O que podemos aprender neste exercício?
Manipulação de datas: Aprender como manipular datas e realizar operações básicas, como adição e subtração de dias, meses e anos.
Lógica de programação: Desenvolver habilidades em lógica de programação, especialmente em termos de estruturas de controle, como condicionais (if-else) e laços (se necessário).
Uso de funções: Praticar a definição e uso de funções para organizar o código e evitar repetições.
Trabalho com múltiplas variáveis: Ganhar experiência em lidar com múltiplas variáveis e entender como elas interagem entre si em um programa.
Conceitos matemáticos: Revisar conceitos matemáticos básicos, como divisão, módulo e operações aritméticas.
Tratamento de exceções: Considerar casos especiais, como anos bissextos, e aprender como lidar com essas situações em um programa.
Exemplo em pseudocódigo
1. Ler o dia, mês e ano
2. Subtrair 1 do dia
3. Se o dia for menor que 1, então:
4. Subtrair 1 do mês
5. Se o mês for menor que 1, então:
6. Atribuir 12 ao mês
7. Subtrair 1 do ano
8. Determinar o número de dias no mês anterior:
9. Se o mês for fevereiro (2), então:
10. Se o ano for bissexto, atribuir 29 dias ao mês anterior
11. Caso contrário, atribuir 28 dias ao mês anterior
12. Se o mês for abril (4), junho (6), setembro (9) ou novembro (11), atribuir 30 dias ao mês anterior
13. Caso contrário, atribuir 31 dias ao mês anterior
14. Atribuir o número de dias ao dia
15. Escrever o dia anterior (dia, mês e ano)
Qual foi a estratégia utilizada?
- Leitura da data: O programa lê a data fornecida pelo usuário, composta por três variáveis inteiras: dia, mês e ano.
- Manipulação da data: O programa subtrai 1 do dia fornecido para obter a data correspondente ao dia anterior. Em seguida, verifica se o dia resultante é menor que 1.
- Verificação de limites: Se o dia resultante for menor que 1, o programa subtrai 1 do mês e verifica se o mês resultante é menor que 1. Se isso ocorrer, ele atribui 12 ao mês (para rolar de dezembro para janeiro) e subtrai 1 do ano.
- Determinação do número de dias no mês anterior: O programa determina o número de dias no mês anterior ao mês fornecido. Isso é feito verificando o mês anterior e considerando se é fevereiro (com a consideração de anos bissextos) ou um dos meses com 30 ou 31 dias.
- Atribuição do número de dias ao dia: O programa atribui o número de dias no mês anterior ao dia, se necessário.
- Saída: Finalmente, o programa imprime a data correspondente ao dia anterior.
Essa estratégia é eficaz para calcular a data anterior com base em uma data fornecida pelo usuário, considerando adequadamente as variações nos meses e anos.
Exemplo em Python
'''
Criado pelo Professor Giovani Da Cruz
https://giovanidacruz.com.br
'''
# Função para determinar se o ano é bissexto
def bissexto(ano):
return ano % 4 == 0 and (ano % 100 != 0 or ano % 400 == 0)
# Ler o dia, mês e ano
dia = int(input("Digite o dia: "))
mes = int(input("Digite o mês: "))
ano = int(input("Digite o ano: "))
# Subtrair 1 do dia
dia -= 1
# Verificar se o dia é menor que 1
if dia < 1:
# Subtrair 1 do mês
mes -= 1
# Verificar se o mês é menor que 1
if mes < 1:
# Atribuir 12 ao mês
mes = 12
# Subtrair 1 do ano
ano -= 1
# Determinar o número de dias no mês anterior
if mes == 2: # Fevereiro
if bissexto(ano):
dias_mes_anterior = 29
else:
dias_mes_anterior = 28
elif mes in [4, 6, 9, 11]: # Abril, Junho, Setembro, Novembro
dias_mes_anterior = 30
else:
dias_mes_anterior = 31
# Atribuir o número de dias ao dia
dia = dias_mes_anterior
# Escrever o dia anterior
print("O dia anterior é:", dia, mes, ano)
Esse código irá ler uma data e imprimir a data correspondente ao dia anterior.
Exemplo em C++
/******************************************************************************
Criado pelo Professor Giovani Da Cruz
https://giovanidacruz.com.br
*******************************************************************************/
#include <iostream>
using namespace std;
// Função para determinar se o ano é bissexto
bool bissexto(int ano) {
return ano % 4 == 0 && (ano % 100 != 0 || ano % 400 == 0);
}
int main() {
int dia, mes, ano;
// Ler o dia, mês e ano
cout << "Digite o dia: ";
cin >> dia;
cout << "Digite o mês: ";
cin >> mes;
cout << "Digite o ano: ";
cin >> ano;
// Subtrair 1 do dia
dia--;
// Verificar se o dia é menor que 1
if (dia < 1) {
// Subtrair 1 do mês
mes--;
// Verificar se o mês é menor que 1
if (mes < 1) {
// Atribuir 12 ao mês
mes = 12;
// Subtrair 1 do ano
ano--;
}
// Determinar o número de dias no mês anterior
int dias_mes_anterior;
if (mes == 2) { // Fevereiro
if (bissexto(ano)) {
dias_mes_anterior = 29;
} else {
dias_mes_anterior = 28;
}
} else if (mes == 4 || mes == 6 || mes == 9 || mes == 11) { // Abril, Junho, Setembro, Novembro
dias_mes_anterior = 30;
} else {
dias_mes_anterior = 31;
}
// Atribuir o número de dias ao dia
dia = dias_mes_anterior;
}
// Escrever o dia anterior
cout << "O dia anterior é: " << dia << " " << mes << " " << ano << endl;
return 0;
}
Este código em C++ faz exatamente o mesmo que o código Python, lê uma data e imprime a data correspondente ao dia anterior.
Exemplo em Pascal / Delphi / Lazarus
{
Criado pelo Professor Giovani Da Cruz
https://giovanidacruz.com.br
}
program DataAnterior;
// Função para determinar se o ano é bissexto
function bissexto(ano: integer): boolean;
begin
bissexto := (ano mod 4 = 0) and ((ano mod 100 <> 0) or (ano mod 400 = 0));
end;
var
dia, mes, ano, dias_mes_anterior: integer;
begin
// Ler o dia, mês e ano
write('Digite o dia: ');
readln(dia);
write('Digite o mês: ');
readln(mes);
write('Digite o ano: ');
readln(ano);
// Subtrair 1 do dia
dia := dia - 1;
// Verificar se o dia é menor que 1
if dia < 1 then
begin
// Subtrair 1 do mês
mes := mes - 1;
// Verificar se o mês é menor que 1
if mes < 1 then
begin
// Atribuir 12 ao mês
mes := 12;
// Subtrair 1 do ano
ano := ano - 1;
end;
// Determinar o número de dias no mês anterior
if mes = 2 then // Fevereiro
begin
if bissexto(ano) then
dias_mes_anterior := 29
else
dias_mes_anterior := 28;
end
else if (mes = 4) or (mes = 6) or (mes = 9) or (mes = 11) then // Abril, Junho, Setembro, Novembro
dias_mes_anterior := 30
else
dias_mes_anterior := 31;
// Atribuir o número de dias ao dia
dia := dias_mes_anterior;
end;
// Escrever o dia anterior
writeln('O dia anterior é: ', dia, ' ', mes, ' ', ano);
end.
Esse código em Pascal realiza a mesma tarefa que os códigos em Python e C++, lendo uma data e imprimindo a data correspondente ao dia anterior.
Exemplo em C# / C Sharp
/******************************************************************************
Criado pelo Professor Giovani Da Cruz
https://giovanidacruz.com.br
*******************************************************************************/
using System;
class Program
{
// Função para determinar se o ano é bissexto
static bool IsBissexto(int ano)
{
return ano % 4 == 0 && (ano % 100 != 0 || ano % 400 == 0);
}
static void Main(string[] args)
{
int dia, mes, ano, diasMesAnterior;
// Ler o dia, mês e ano
Console.Write("Digite o dia: ");
dia = int.Parse(Console.ReadLine());
Console.Write("Digite o mês: ");
mes = int.Parse(Console.ReadLine());
Console.Write("Digite o ano: ");
ano = int.Parse(Console.ReadLine());
// Subtrair 1 do dia
dia--;
// Verificar se o dia é menor que 1
if (dia < 1)
{
// Subtrair 1 do mês
mes--;
// Verificar se o mês é menor que 1
if (mes < 1)
{
// Atribuir 12 ao mês
mes = 12;
// Subtrair 1 do ano
ano--;
}
// Determinar o número de dias no mês anterior
if (mes == 2) // Fevereiro
{
if (IsBissexto(ano))
diasMesAnterior = 29;
else
diasMesAnterior = 28;
}
else if (mes == 4 || mes == 6 || mes == 9 || mes == 11) // Abril, Junho, Setembro, Novembro
diasMesAnterior = 30;
else
diasMesAnterior = 31;
// Atribuir o número de dias ao dia
dia = diasMesAnterior;
}
// Escrever o dia anterior
Console.WriteLine($"O dia anterior é: {dia} {mes} {ano}");
}
}
Este código em C# realiza a mesma tarefa que os códigos em Python, C++ e Pascal, lê uma data e imprime a data correspondente ao dia anterior.
Exemplo em Java
/******************************************************************************
Criado pelo Professor Giovani Da Cruz
https://giovanidacruz.com.br
*******************************************************************************/
import java.util.Scanner;
public class Main {
// Função para determinar se o ano é bissexto
static boolean isBissexto(int ano) {
return ano % 4 == 0 && (ano % 100 != 0 || ano % 400 == 0);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int dia, mes, ano, diasMesAnterior;
// Ler o dia, mês e ano
System.out.print("Digite o dia: ");
dia = scanner.nextInt();
System.out.print("Digite o mês: ");
mes = scanner.nextInt();
System.out.print("Digite o ano: ");
ano = scanner.nextInt();
// Subtrair 1 do dia
dia--;
// Verificar se o dia é menor que 1
if (dia < 1) {
// Subtrair 1 do mês
mes--;
// Verificar se o mês é menor que 1
if (mes < 1) {
// Atribuir 12 ao mês
mes = 12;
// Subtrair 1 do ano
ano--;
}
// Determinar o número de dias no mês anterior
if (mes == 2) { // Fevereiro
if (isBissexto(ano))
diasMesAnterior = 29;
else
diasMesAnterior = 28;
} else if (mes == 4 || mes == 6 || mes == 9 || mes == 11) { // Abril, Junho, Setembro, Novembro
diasMesAnterior = 30;
} else {
diasMesAnterior = 31;
}
// Atribuir o número de dias ao dia
dia = diasMesAnterior;
}
// Escrever o dia anterior
System.out.println("O dia anterior é: " + dia + " " + mes + " " + ano);
}
}
Este código em Java realiza a mesma tarefa que os códigos em Python, C++, C# e Pascal, lê uma data e imprime a data correspondente ao dia anterior.
Conclusão
Neste exercício, exploramos a manipulação de datas em diferentes linguagens de programação, incluindo Python, C++, C#, Java e Pascal. A tarefa consistiu em escrever um programa que lê uma data fornecida pelo usuário e imprime a data correspondente ao dia anterior, levando em consideração as peculiaridades dos meses e anos bissextos.
Durante a implementação, lidamos com diversos aspectos, como lógica condicional para verificar limites, manipulação de strings e conversão de tipos de dados para entrada/saída, e utilizamos funções para determinar se um ano é bissexto.
Este exercício nos proporcionou uma oportunidade valiosa para praticar habilidades essenciais de programação, incluindo resolução de problemas, pensamento lógico e implementação de algoritmos. Além disso, nos permitiu familiarizar com as características específicas de cada linguagem, como a sintaxe, a manipulação de entradas/saídas e as convenções de estilo.
Em resumo, através deste exercício, ampliamos nosso conhecimento sobre manipulação de datas e fortalecemos nossa proficiência em diferentes linguagens de programação.
Beleza pessoal? Espero que tenham gostado!
Dúvida ou sugestões? Deixe o seu comentário.
Um abraço e até o próximo post. Valeu!
#Programação
#Datas
#Algoritmos
#GiovaniDaCruz