Prazo de entrega recomendado:
Exploraremos os conceitos básicos de problemas computacionais e algoritmos. Você deverá descrever um problema de forma não-ambígua e dar um algoritmo para resolvê-lo.
Nesta e em outras tarefas poderemos usar arquivos Markdown para
organizar e deixar nossas respostas mais atrativas do que um simples
arquivo de texto. Antes de começar a responder, leia o breve
tutorial sobre esse formato de arquivos, disponível na página da
disciplina. Lembre-se de atualizar o seu repositório utilizando o
comando git pull
e responda as questões abaixo criando os arquivos
necessários na pasta da tarefa.
Problemas e algoritmos
Parte do processo de projetar algoritmos é definir o problema que estamos tentando resolver. Para isso, precisamos entender quais são as entradas do problema e quais são as saídas que devemos produzir. Vamos exercitar como definir um problema computacional 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/2021 e tivermos que somar 3
dias, então a nova data será 02/04/2021. Crie um arquivo
somar_datas.md
, respondendo as seguintes questões.
a) Descreva de forma clara e precisa qual é a entrada e a saída desse problema. Procure especificar qual é o conjunto de entradas, qual é o conjunto de saídas e qual a relação entre eles.
b) Escreva um algoritmo em português para resolver esse problema. Lembre-se de que um algoritmo deve ser uma sequência de instruções não-ambíguas para receber a entrada e produzir a saída desejada. Busque descrever de forma precisa, de modo que qualquer pessoa que entenda português consiga executar essas instruções. Primeiro, tente listar quais instruções elementares seriam permitidas, depois escreva o algoritmo.
2. Lavando as mãos
Neste vídeo vemos uma
pessoa demonstrando como lavar corretamente as mãos para evitar o
contágio por organismos. Crie um arquivo lavar_maos.md
e descreva em
português, na forma de um algoritmo, como uma pessoa deve lavar as
mãos de acordo com esse vídeo. Presuma que a pessoa nunca lavou as
mãos antes e que ela só tenha a sua descrição de como fazê-lo.
Lembre-se de enviar as respostas para o repositório remoto e #fiqueEmCasa.
3. 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.
- Despeje a água do balde B no balde A até a borda;
- Despeje metade da água do balde A no balde C;
- Entregue o balde A.
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 não será corrigida manualmente, mas você deve tentar respondê-la genuinamente. Revise o texto que tiver escrito e, se tiver alguma dúvida se ela está ou não correta, procure os monitores. Tentativas de passar no teste automático sem responder as questões serão consideradas fraude.