Tarefa 1 - Problemas e algoritmos

Prazo de entrega recomendado:

Exercitaremos os conceitos de problema computacional e algoritmo. Você deverá definir um problema de maneira precisa. Além disso, deverá descrever algoritmos e identificar o que torna um algoritmo válido.


Nesta tarefa, suas respostas serão em texto. Você usará Markdown para que essas respostas fiquem com uma boa leitura e apresentação. Portanto, antes de começar a tarefa, leia o pequeno guia sobre esse formato de arquivos que pode ser encontrado na página inicial da disciplina. Lembre-se de atualizar o seu repositório usando git pull e responda às questões abaixo criando os arquivos necessários na pasta da tarefa.

Problemas e algoritmos

Antes de escrever um algoritmo, precisamos entender qual problema computacional desejamos resolver. Portanto, é importante saber definir de maneira precisa o problema em questão. Especificamente, é preciso determinar quais as entradas possíveis para esse problema e as saídas correspondentes. É o que vamos exercitar em seguida.

1. Calculadora de datas

Você gostaria de somar um número de dias a uma data, obtendo assim uma nova data. Por exemplo, se a data é 30/03/2022 e tivermos que somar 3 dias, a nova data será 02/04/2022. Crie um arquivo somar_datas.md para responder às seguintes questões:

a) Descreva precisamente o problema computacional da soma de datas. Procure especificar qual é o conjunto de entradas, qual é o conjunto de saídas e qual é a relação entre esses conjuntos.

b) Escreva, em língua portuguesa, um algoritmo que resolva o problema definido acima. Lembre-se de que um algoritmo deve ser uma sequência de instruções não-ambíguas e suficientemente básicas para, recebendo a entrada, produzir a saída desejada. Busque descrever de forma precisa e clara, de modo que qualquer pessoa que entenda português consiga executar essas instruções. Antes de escrever seu algoritmo, procure listar quais instruções elementares seriam permitidas. Você pode supor que o ano não é bissexto e que a soma não ultrapassará o próximo ano bissexto.

c) Imagine agora uma variação desse problema: a soma de datas contando dias úteis. Por exemplo, se a data é 30/03/2022 e desejamos somar 3 dias (úteis), a nova data será 04/04/2022. Se a data é 02/04/2022 e desejamos somar 4 dias (úteis), a nova data será 07/04/2022. Explique brevemente qual seria a diferença entre os dois problemas computacionais. Sua resposta deverá envolver os conceitos relevantes para problema computacional: as entradas, saídas e a relação entre elas. Apenas responda a questão, não é necessário escrever um algoritmo que resolva essa variação.

2. Baldes

Temos três baldes, identificados como A, B e C e com capacidades 2, 7 e 4 litros, respectivamente. Os baldes A e C estão vazios, enquanto o balde B está cheio de água.

Um amigo gostaria de, sem desperdiçar água, separar um litro, mas não há indicadores de medida nos baldes. Ele sugeriu o procedimento abaixo.

Crie um arquivo baldes.md respondendo as seguintes questões.

a) O procedimento acima é um algoritmo? Dê a sua opinião se o procedimento acima é ou não um algoritmo. Para isso, dê a definição de um algoritmo e descreva todas suas características.

b) Escreva em português um algoritmo para resolver o problema descrito.

Correção

Esta tarefa será corrigida automaticamente sempre que você realizar um git push. Depois de terminada a tarefa, deve-se utilizar o botão na interface de notas para solicitar a correção de um monitor.