Exercício – Usar fluxos de controle no Go
Pratique o que aprendeu neste módulo realizando alguns exercícios de programação. Os exercícios não são complicados, e as soluções serão apresentadas na próxima unidade.
Tente resolver os exercícios por conta própria primeiro. Em seguida, compare seus resultados com as soluções. Você poderá revisar o módulo a qualquer momento se não se lembrar de um detalhe importante.
Escrever um programa FizzBuzz
Primeiro, escreva um programa que imprima números de 1 a 100, com as seguintes alterações:
- Imprimir
Fizz
se o número for divisível por 3. - Imprimir
Buzz
se o número for divisível por 5. - Imprimir
FizzBuzz
se o número for divisível por 3 e 5. - Imprimir o número se não houver correspondência com nenhum dos casos anteriores.
Tente usar a instrução switch
.
Encontrar os primos
Escreva um programa para localizar todos os números primos inferiores a 20. Um número primo é qualquer número maior do que um que pode ser dividido uniformemente somente por si só e um. Ser "dividido uniformemente" significa que não há pendências após a operação de divisão. Assim como a maioria das linguagens de programação, o Go fornece uma maneira de verificar se uma operação de divisão produz uma pendência. Podemos usar o operador de módulo %
(sinal de porcentagem).
Neste exercício, você atualizará uma função chamada findprimes
para verificar se um número é primo. A função tem um argumento inteiro e retorna um booliano. A função testa se o número de entrada é um primo verificando se há uma pendência. Se o número for primo, a função retornará como true.
Use o seguinte trecho de código como um ponto de partida e substitua todas as instâncias de ??
pela sintaxe correta:
package main
import "fmt"
func findprimes(number int) bool {
for i := 2; i ?? number; i ?? {
if number ?? i == ?? {
return false
}
}
if number ?? {
return true
} else {
return false
}
}
func main() {
fmt.Println("Prime numbers less than 20:")
for number := ??; number ?? 20; number++ {
if ?? {
fmt.Printf("%v ", number)
}
}
}
Este programa verifica os números de um a 20 e imprime o número, se for primo. Modifique o exemplo conforme descrito.
- Na função
main
, execute um loop em todos os números para verificar. Saia do loop depois de verificar o último número. - Chame a função
findprimes
para verificar o número. Se a função retornar true, imprima o primo. - No loop
findprimes
, inicie em 2 e repita até que o contador seja maior ou igual ao valornumber
. - Verifique se o
number
é igualmente divisível pelo valor do contador atual. Se for, saia do loop. - Quando
number
é primo, retorna true; caso contrário, retorna false. - Dica: lide corretamente com o caso em que o número de entrada é um.
Pedir um número, panic se negativo
Escreva um programa que solicita um número a um usuário. Use o seguinte trecho de código como ponto de partida:
package main
import "fmt"
func main() {
val := 0
fmt.Print("Enter number: ")
fmt.Scanf("%d", &val)
fmt.Println("You entered:", val)
}
Esse programa solicita um número e o imprime. Modifique o código de exemplo para:
- Pedir continuamente um número inteiro. A condição de saída para o loop deve ser uma entrada de usuário que seja um número negativo.
- Causar uma falha no programa quando o usuário inserir um número negativo. Em seguida, imprimir o erro de rastreamento de pilha.
- Quando o número for 0, imprimir
0 is neither negative nor positive
. Seguir pedindo um número. - Quando o número for positivo, imprimir
You entered: X
(em queX
é o número inserido). Seguir pedindo um número.
Por enquanto, ignore a possibilidade de que o usuário possa inserir algo diferente de um número inteiro.