Percursos
/
Go
Go
/
Exercícios
/
Observador de aves
Observador de aves

Observador de aves

Exercício de aprendizagem

Introdução

Sintaxe geral

O ciclo for é uma das instruções mais usadas para executar repetidamente alguma lógica. Em Go, é composto pela palavra-chave for, por um cabeçalho e por um bloco de código que contém o corpo do ciclo, delimitado por chavetas. O cabeçalho é composto por 3 componentes separados por pontos e vírgulas (;): init, condition e post.

for init; condition; post {
  // loop body - code that is executed repeatedly as long as the condition is true
}
  • O componente init é código que só corre uma vez, antes de o ciclo começar.
  • O componente condition tem de ser uma expressão que resulte num valor Boolean e que controle quando o ciclo deve parar. O código dentro do ciclo será executado enquanto esta condição for verdadeira. Assim que esta expressão for avaliada como falsa, não haverá mais iterações do ciclo.
  • O componente post é código que corre no final de cada iteração.

Nota: Ao contrário de outras linguagens, não há parênteses () à volta dos três componentes do cabeçalho. Na verdade, inserir esses parênteses é um erro de compilação. No entanto, as chavetas { } à volta do corpo do ciclo são sempre obrigatórias.

Ciclos for - um exemplo

O componente init costuma preparar uma variável contadora, o componente condition verifica se o ciclo deve continuar ou parar e o componente post costuma incrementar o contador no final de cada repetição.

for i := 1; i < 10; i++ {
  fmt.Println(i)
}

Este ciclo imprime os números de 1 a 9 (incluindo o 9). Definir o passo faz-se frequentemente com uma instrução de incremento ou de decremento, como mostra o exemplo acima.

Instruções

És um ávido observador de aves que acompanha quantas aves visitaram o teu jardim. Normalmente fazes uma contagem num caderno para contar as aves, mas para trabalhares melhor com os teus dados, digitalizaste as contagens de aves das últimas semanas.

1. Determina o número total de aves que contaste até agora

Vamos começar por analisar os dados com uma visão geral. Descobre quantas aves contaste no total desde que começaste os teus registos.

Implementa uma função TotalBirdCount que aceita uma slice de ints com a contagem de aves por dia. Deve devolver o número total de aves que contaste.

birdsPerDay := []int{2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1}
TotalBirdCount(birdsPerDay)
// => 34

2. Calcula o número de aves visitantes numa semana específica

Agora que já tens uma noção geral dos números das tuas contagens de aves, queres fazer uma análise mais detalhada.

Implementa uma função BirdsInWeek que aceita uma slice de contagens de aves por dia e um número de semana.

Devolve o número total de aves que contaste nessa semana específica. Podes assumir que as semanas são sempre registadas por completo.

birdsPerDay := []int{2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1}
BirdsInWeek(birdsPerDay, 2)
// => 12

3. Corrige um erro de contagem

Deste-te conta de que, durante todo o tempo em que tentavas acompanhar as aves, havia uma ave que estava escondida num canto distante do jardim.

Percebeste que essa ave passava sempre dia sim, dia não, no teu jardim.

Não sabes exatamente onde ela estava entre esses dias, mas de certeza que não estava no teu jardim.

A tua intuição de observador de aves também te diz que a ave estava no teu jardim no primeiro dia que registaste na tua lista.

Dada esta nova informação, escreve uma função FixBirdCountLog que recebe uma slice de aves contadas por dia como argumento e devolve a slice depois de corrigir o erro de contagem.

birdsPerDay := []int{2, 5, 0, 7, 4, 1}
FixBirdCountLog(birdsPerDay)
// => [3 5 1 7 5 1]
Editar via GitHub A ligação abre numa nova janela ou separador
Go Exercism

Estás pronto para começar Observador de aves?

Inscreve-te no Exercism para aprenderes e dominares Go com 34 conceitos166 exercícios, e mentoria humana real, tudo grátis.