Exercício – Usar fluxos de controle no Go

Concluído

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 valor number.
  • 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 que X é 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.