Soluções – exercícios do fluxo de controle
Vejamos possíveis soluções para cada um dos exercícios.
Escrever um programa FizzBuzz
Uma solução para o exercício de usar a instrução switch
pode ser algo assim:
package main
import (
"fmt"
"strconv"
)
func fizzbuzz(num int) string {
switch {
case num%15 == 0:
return "FizzBuzz"
case num%3 == 0:
return "Fizz"
case num%5 == 0:
return "Buzz"
}
return strconv.Itoa(num)
}
func main() {
for num := 1; num <= 100; num++ {
fmt.Println(fizzbuzz(num))
}
}
Para o caso de FizzBuzz
, multiplica-se 3 por 5 porque os resultados são divisíveis por 3 e 5. Também é possível incluir uma condição AND
para verificar se um número é divisível por 3 e 5.
Encontrar os primos
Uma solução para o exercício de localizar os números primos inferiores a 20 pode ser algo assim:
package main
import "fmt"
func findprimes(number int) bool {
for i := 2; i < number; i++ {
if number % i == 0 {
return false
}
}
if number > 1 {
return true
} else {
return false
}
}
func main() {
fmt.Println("Prime numbers less than 20:")
for number := 1; number <= 20; number++ {
if findprimes(number) {
fmt.Printf("%v ", number)
}
}
}
Na função main
, fazemos um loop de um a 20 e chamamos a função findprimes
para verificar o número atual. Na função findprimes
, iniciamos o loop for
em dois e repetimos até que o contador seja maior do que o valor number
. Se o number
for igualmente divisível pelo contador, o number
não é o primo. Se o loop for concluído sem sair, o número será 1 ou primo.
Esta é a saída:
Prime numbers less than 20:
2 3 5 7 11 13 17 19
Pedir um número, panic se negativo
A solução para o exercício de experimentar uma chamada panic
pode ser algo assim:
package main
import "fmt"
func main() {
val := 0
for {
fmt.Print("Enter number: ")
fmt.Scanf("%d", &val)
switch {
case val < 0:
panic("You entered a negative number!")
case val == 0:
fmt.Println("0 is neither negative nor positive")
default:
fmt.Println("You entered:", val)
}
}
}
Lembre-se de que a ideia é praticar um loop infinito e uma instrução switch
.