Crie um algoritmo e um programa que leia uma data em três variáveis inteiras (dia, mes e ano) e escreva a data correspondente ao dia anterior também de forma separada: dia, mês e ano.

Algoritmos com datas

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?

  1. Leitura da data: O programa lê a data fornecida pelo usuário, composta por três variáveis inteiras: dia, mês e ano.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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

  • Publicado por Giovani Da Cruz
  • 5 views
  • 0 comentarios
  • 8 de maio de 2024

 

Está gostando do conteúdo?
Considere pagar um cafezinho para nossa equipe!

 

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Posts Relacionados a Categoria Algoritmos com Se, Senão e Caso

Continue aprendendo

Aumente o seu conhecimento
Um estacionamento cobra R$ 8,00 para a primeira hora e para cada hora adicional é cobrado mais R$ 5,00. Fazer um algoritmo e um programa em que leia o tempo de estacionamento (em horas) e escreva o valor que deve ser pago.
17 de abril de 2024
Crie um algoritmo e um programa em que leia 4 valores, Hi, Mi, Hf, Mf, representando respectivamente a hora e minuto inicial e final de um evento, e calcule a duração do mesmo em horas e minutos. Considere que o evento pode iniciar em um dia e terminar no dia seguinte.
15 de abril de 2024
Crie um algoritmo e um programa em que leia um número e escreva: “Zero”, se o valor é zero; “Positivo”, e o valor é maior que zero; “Negativo” se o valor é negativo
9 de abril de 2024
Crie um algoritmo e um programa que leia as 3 notas de um aluno e escreva “APROVADO” caso a média aritmética for maior ou igual a 6, caso contrário escreva “REPROVADO”
4 de abril de 2024
O número 3025 tem a seguinte característica: 30+25=55 e 552=3025. Sendo um número de Kaprekar. Crie um algoritmo e um programa que solicite o usuário informar um número inteiro de quatro dígitos. O programa deve verificar e mostrar na tela uma mensagem indicando se este número possui esta característica, ou seja, ser um Número de Kaprekar.
30 de março de 2024
Crie um algoritmo e um programa em que implemente uma calculadora de 4 operações. O programa deve solicitar que o usuário informe três dados: o primeiro operando, o operador (+,-,*,/) e o segundo operando. O programa deve mostrar na tela a operação e seu resultado.
28 de março de 2024
Crie um algoritmo e um programa quesolicite o usuário informar a altura em metros e o sexo de uma pessoa. O programa deverá calcular o peso ideal da pessoa, utilizando as seguintes fórmulas:
16 de março de 2024
Crie um algoritmo e um programa que solicite que o usuário informe um código e três valores nomeados como a, b e c. O código vai determinar qual operação o algoritmo irá realizar
7 de março de 2024
Crie um algoritmo e um programa que solicite ao usuário informar um valor inteiro que corresponda a idade de um nadador. Após, o programa deverá classificar o nadador nas categorias abaixo e mostrar esta informação na tela do computador.
6 de março de 2024
Crie um algoritmo e um programa que constituam uma calculadora simples, capaz de realizar as quatro operações básicas com dois números inseridos pelo usuário. Este exercício requer a utilização de funções.
2 de março de 2024
Sair da versão mobile