Prazo de entrega:
Segunda chance:
Esta tarefa tem peso 1.
Você irá aprender a alocar e manipular dados dinamicamente. Também, precisará resolver alguns exercícios escrevendo algoritmos recursivos.
1. Centroide
Uma das tarefas mais recorrentes na análise de dados é o cálculo do centroide de
um conjunto de pontos do espaço euclideano
No entanto, o cálculo de centroide é sensível à escala, então é necessário realizar uma etapa de preparação dos dados chamada de normalização (uma discussão sobre isso está disponível nesse link).
Há várias formas de preparar dados e, entre as mais comuns, listamos:
-
Não normalizar, i.e., utilizar os dados de entrada diretamente.
-
Normalizar coordenadas por intervalo, também chamada de normalização min-max. Nesse caso, cada coordenada é modificada linearmente de forma que os valores mínimos e máximos sejam
e . Se todos os valores forem iguais, então cada coordenada é mapeada para . -
Tratar cada ponto como um vetor independentemente e dividir cada um deles por seu comprimento, de forma que o vetor passe a ter norma euclidiana unitária.
Escreva um programa centroide
que leia um conjunto variável de pontos
Uma consideração importante ao lidar com números com o computador é que muitas vezes eles não são representados de maneira exata. Que complicações isso pode ter e que tipos de cuidados você poderia ter para mitigar essas complicações?
Entrada
A primeira linha contém dois números inteiros
3 2
1.600 -0.700 -0.600
-1.100 0.800 -2.400
Saída
A saída contém uma linha com o centroide encontrado para cada uma das estratégias acima, em ordem.
nenhum: 0.250 0.050 -1.500
janela: 0.000 0.000 0.000
normal: 0.234 -0.045 -0.597
2. Quase palíndromo
Uma string é um arara
é um araro
é um
Crie um programa quase_palindromo
que verifique se uma palavra é um
Entrada
A primeira linha contém um número
2
araro
Nesse exercício, você pode supor que a maior palavra tem 400 caracteres, então
você não precisa se preocupar com entradas maiores do que isso. Na prática, isso
quase nunca é verdade, então ler uma string cegamente, com scanf
por exemplo,
é pedir para ter problemas sérios de segurança. Quais são esses problemas e o
que fazer para evitá-los mesmo sem conhecer a entrada?
Saída
Uma linha contendo sim
ou nao
, dependendo se a string é um
sim
3. Desafio e recompensa
João tem um dado com seis faces.
Maria está a
Se João joga o dado e tira
Maria dá
Se
Maria recompensa João agora.
Mas se for maior que
Maria dá as costas e vai-se embora.
Crie um programa recompensa
que calcule a probabilidade de João receber a
recompensa se ele puder jogar o dado até
Entrada
Número inteiros
2 2
Saída
Um número entre 0 e 1 com três casas decimais após a vírgula representando a probabilidade de João conseguir a recompensa.
0.194
Dicas
Observe que no exemplo da entrada há apenas duas possibilidades para
João ganhar o jogo: jogar o dado uma vez e obter a face 2; ou jogar o
dado duas vezes obtendo a face 1 em cada uma delas. Em qualquer
cenário diferente desses, Maria passará direto por João. A
probabilidade de João obter a face 2 na primeira jogada é
Critérios
Você deve utilizar alocação dinâmica para armazenar e manipular os dados de entrada do primeiro item. Nos demais exercícios, não é necessária alocação dinâmica, mas você deve resolver os problemas utilizando algoritmos recursivos, mesmo que conheça algoritmos iterativos para eles.