Aula5.png

Quando aprendemos muitas coisas num curto período de tempo, como ocorre no Introcomp, é importante que façamos revisões periodicamente. Isso nos ajuda a fixar melhor os conteúdos que aprendemos e a sabermos onde estão nossas maiores dúvidas.

1. Problemas matemáticos

"Computadores" nem sempre foram máquinas! O termo "computador" já foi usado para designar uma profissão. "Computadores" eram pessoas que trabalhavam em cálculos matemáticos, que muitas vezes demandavam extrema precisão. Tal profissão desapareceu com o advento de máquinas capazes de realizar cálculos cada vez mais rápidos. Durante muitos anos, computadores (as máquinas) foram criados e desenvolvidos exclusivamente com o intuito de realizar cálculos. Um exemplo disso é o IBM 7090, utilizado para realizar cálculos de missões tripuladas da NASA.

HiddenFigures1.jpg

Figura 1: O filme 'Hidden Figures' da 20th Century Fox mostra muito bem o papel das 'computadoras' da época.
Ao fundo na foto, é possível ver um computador da época.

Ainda nos dias de hoje, a Computação é grande aliada da Matemática, da Física e da Estatística. Muitos laboratórios ao redor do mundo utilizam supercomputadores para realizar cálculos extremamente complexos. Um exemplo famoso é o cálculo de $\pi$; atualmente são conhecidos 31.415.926.535.897 dígitos decimais do número [ref].

Hamilton1.jpg

Figura 2: Engenheira de Software da NASA, Margaret Hamilton, ao lado do código-fonte do computador da missão Apollo 11.

Já que sabemos da importância das operações matemáticas na história da Computação e da humanidade, vamos praticar um pouco. Cada um dos problemas dessa aula é composto por um enunciado que define as entradas (inseridas pelo teclado) e as saídas esperadas (exibidas na tela). A saída obtida, para cada entrada, deve ser idêntica à saída esperada fornecida. Os dados de teste seguem o seguinte estilo:

Entrada:
<entrada fornecida>
Saída:
<sáida esperada ao fornecer a entrada>

Podem ser fornecidas inúmeros conjuntos entrada-saída, cada um desses conjuntos é separado por uma quebra de linha.

Problema 1:

Sabendo que a área de uma circunferência é dada por $S = {\pi}\times{r^2}$, escreva um código que receba do teclado $r$ e exiba na tela $S$. Utilize a constante pi fornecida pela linguagem.

Entrada:\ 2 \ Saída:\ 12.566370614359172

In [ ]:
 

Problema 2:

Dados os pontos $(X_1, Y_1)$ e $(X_2, Y_2)$ como entrada pelo teclado, escreva um código que exiba na tela a distância entre ambos.

Observação: A distância $AB$ entre dois pontos $A = (X_a, Y_a)$ e $B = (X_b, Y_b)$ é dada por $|AB| = \sqrt{{(X_b - X_a)}^{2} + {(Y_b - Y_a)}^{2}}$.

Entrada:\ 0\ 0\ 1\ 1\ Saída:\ 1.4142135623730951

In [ ]:
 

Problema 3:

Um triângulo é formado por três vértices (pontos) bidimensionais (na forma $(X, Y)$). Escreva um código que receba como entrada pelo teclado os dois vértices da hipotenusa e exiba o vértice restante como saída. Considere um triângulo retângulo. Atente-se às entradas e saídas.

Entrada:\ 1\ 0\ 0\ 1\ Saída:\ 1.0 1.0\ \ Entrada:\ 0\ 1\ 1\ 0\ Saída:\ 0.0 0.0

In [ ]:
 

Problema 4:

Imagine o seguinte cenário: você vive em uma região onde a moeda corrente são balões coloridos. Você e seus $P - 1$ amigos encontram uma certa quantia $B$ de balões em um local aleatório. Vocês decidem dividir igualmente os balões e deixam o restante no local para o próximo que encontrar. Dado o número de pessoas presentes no momento (incluindo você) e o número de balões encontrados, escreva um código que exiba quantos balões cada pessoa receberá e quantos balões serão deixados no local.

Entrada:\ 8\ 16\ Saída:\ 2 0\ \ Entrada:\ 6\ 10\ Saída:\ 1 4

In [ ]:
 

2. Problemas envolvendo strings

Considerado o pai da Ciência da Computação, o matemático Alan Turing tinha bastante interesse na área da criptografia (mais especificamente na criptoanálise [ref]). Turing liderou uma equipe na construção da máquina "Bombe", que tinha como objetivo decifrar as mensagens criptografadas pela máquina alemã "Enigma". Essa história é retratada no filme "The Imitation Game" (ou "O Jogo da Imitação") de 2014.

bombe1.jpg

Figura 3: Réplica da máquina Bombe no museu de Bletchley Park.

A campo da criptografia e da criptoanálise cresce cada vez mais e você provavelmente utiliza tais conceitos diariamente. Um exemplo disso é o seu aplicativo de troca de mensagens favorito; tais aplicativos utilizam criptografia ponta-a-ponta para manter suas mensagens em segurança e dificultar o vazamento de dados importantes.

Problema 5:

Escreva um código que receba uma string $S$ na entrada pelo teclado e exiba o conteúdo $C$ de seu primeiro índice como saída. O caractere exibido deve ser minúsculo.

Entrada:\ Introcomp\ Saída:\ i

In [ ]:
 

Problema 6:

Escreva um código que receba pelo teclado duas strings $(A, B)$, onde o tamanho de $A$ e o tamanho de $B$ sejam $\geq 3$. O código deve exibir na tela uma palavra (totalmente minúscula) contendo os três primeiros caracteres de $A$ e os três ultimos caracteres de $B$.

Entrada:\ Introcomp\ PYTHON\ Saída:\ inthon

In [ ]:
 

3. Problemas envolvendo estruturas condicionais e de repetição

A humanidade sempre buscou formas mais eficientes de realizar suas tarefas. Nos últimos anos, temos conseguido fazer isso muito bem! Tarefas repetitivas vêm sendo cada vez mais automatizadas, sejam elas físicas ou virtuais. O que parecia futuro está se tornando cotidiano. Quem nunca conversou com um bot ou assistente virtual?

atlas1.jpg

Figura 4: Robô Atlas, produzido pela Boston Dynamics.

A automação também inundou as fábricas do mundo inteiro, permitindo a fabricação rápida de muitos produtos, como automóveis, eletrodomésticos e eletrônicos.

fabrica.jpg

Figura 5: Fábrica de automóveis utilizando automação. Fotografia por Lenny Kuhne.

A maneira mais básica de se automatizar uma tarefa é por meio de estruturas de repetição. Vamos praticar!

Problema 7:

Escreva um código que receba como entrada dois números $(N, M)$ e, na saída, exiba na tela N eh multiplo de M se $N$ for múltiplo de $M$ e, caso contrário, exiba N nao eh multiplo de M.

Entrada:\ 20\ 2\ Saída:\ 20 eh multiplo de 2\ \ Entrada:\ 21\ 2\ Saída:\ 21 nao eh multiplo de 2

In [ ]:
 

Problema 8:

Escreva um programa em que, dado um número $N$ como entrada pelo teclado, exiba uma sequência de $0$ a $N$ como saída (onde cada elemento está em sua respectiva linha).

Entrada:\ 3\ Saída:\ 0\ 1\ 2\ 3

In [ ]:
 

Problema 9:

Escreva um programa em que, dado um número $N$ como entrada pelo teclado, exiba como saída todos os números pares na sequência de $1$ a $N$ (ntervalo fechado).

Entrada:\ 8\ Saída:\ 2\ 4\ 6\ 8

In [ ]:
 

4. Problemas envolvendo listas

A Internet é algo que faz parte do nosso cotidiano nos dias de hoje e uma das discussões mais quentes do momento é sobre a quantidade de dados que produzimos e o quão valiosos esses dados são. Empresas e entidades governamentais podem utilizar dados para as mais diversas aplicações, como recomendações de filmes, livros e outros tipos de produtos, tudo isso moldado especificamente para você. Muitas pessoas se assustam ao conversar sobre um produto online e imediatamente depois ver um anúncio sobre aquele mesmo produto ao visitar uma página na web.

server1.jpg

Figura 6: Servidores são resposáveis por armazenar nossas informações.
Eles estão espalhados pelo mundo inteiro! Fotografia por Taylor Vick.

O mercado de análise e tratamento de dados é um dos mais quentes do momento, e as listas são uma das melhores formas de organizar informações. Vamos praticar!

Problema 10:

Escreva um programa que, dada uma lista $L$ de $N$ elementos (ordenados ou não) na entrada, exiba como saída seu maior elemento. $N$ deve ser dado na entrada, seguido dos $N$ elementos de $L$.

Entrada:\ 5\ 16\ 32\ 8\ 128\ 64\ Saída:\ 128

Entrada:\ 3\ 64\ 32\ 16\ Saída:\ 64

In [ ]:
 

Problema 11:

Em Estatística, a mediana é a média dos dois elementos centrais de um conjunto ordenado de elementos. Existem outras definições para a mediana, mas usaremos a definição mais genérica neste exemplo.

É possível obter os índices centrais de uma lista de elementos por meio de seu teto e de seu piso. O teto é uma superestimação de um valor decimal, já o piso é a subestimação desse mesmo valor. Vejamos um exemplo:

Valor Teto Piso
5.18 6 5
7.84 8 7
1.00 1 1

Escreva um programa que, dada uma lista $L$ de $N$ elementos (ordenados ou não), exiba como saída, a sua mediana. $N$ deve ser dado na entrada pelo teclado, seguido dos $N$ elementos de $L$. Os índices centrais são dados por $\text{piso}((N - 1)/2)$ e $\text{teto}((N - 1)/2)$.

NOTA: use math.ceil(<valor>) para o teto e math.floor(<valor>) para o piso.

Entrada:\ 6\ 6\ 5\ 4\ 3\ 2\ 1\ Saída:\ 3.5

In [ ]:
 

Problema 12:

Leonardo Fibonacci foi um grande matemático italiano. Fibonacci desenvolveu uma forma de descrever o crescimento $F$ de uma população de coelhos em 1202. O crescimento em um momento $n$ é denotado por $F_n$.

coelho1.jpg

Figura 7: Um coelho (Imagem de Heidelbergerin por Pixabay)

Num primeiro momento (quando $n = 0$, ou seja $F_0$), não há crescimento nenhum, ou seja $F_0 = 0$. Logo em seguida começam a surgir os primeiros coelhinhos e, a partir disso, a população de coelhos aumenta cada vez mais, uma vez que cada casal de coelhos produz uma quantidade de filhotes num determinado tempo.

Fibonacci chegou à seguinte sequência: $(0, 1, 1, 2, 3, 4, 5, 8, 13, ..., {\infty})$. Podemos descrever tal sequência como:

$ \begin{cases} \text{Se }{n = 0}, F_n = 0 \\ \text{Se }{n = 1}, F_n = 1 \\ \text{Se }{n \geq 2}, F_n = F_{n - 1} + F_{n - 2} \end{cases} $

Considere $F$ como uma lista de $N$ elementos. Escreva um programa no qual sua entrada seja constituída de $N \geq 1$ e a saída deve ser a sequência de Fibonacci em $N$ linhas, com cada linha contendo um elemento da lista.

Entrada:\ 5\ Saída:\ 0\ 1\ 1\ 2\ 3

In [ ]: