Soluciones: ejercicios sobre el flujo de control

Completado

Echemos un vistazo a las posibles soluciones para cada uno de los ejercicios.

Escritura de un programa de FizzBuzz

Una solución para el ejercicio sobre el uso de la instrucción switch podría ser algo parecido a esto:

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))
    }
}

En el caso de FizzBuzz, se multiplica 3 por 5 porque los resultados son divisibles por 3 y por 5. También puede incluir una condición AND para comprobar si un número es divisible por 3 y por 5.

Buscar los números primos

Una solución para el ejercicio sobre encontrar los números primos inferiores a 20 podría ser algo parecido a esto:

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)
        }
    }
}

En la función main, se recorre en bucle del 1 a 20 y se llama a la función findprimes para comprobar el número actual. En la función findprimes, se inicia el bucle for en 2 y se repite hasta que el contador sea mayor que el valor de number. Si el valor de number se puede dividir uniformemente por el contador, el valor de number no es un número primo. Si completamos el bucle sin salir, el número es 1 o es primo.

Este es el resultado:

Prime numbers less than 20:
2 3 5 7 11 13 17 19 

Pedir un número, emitir una alerta de pánico si es negativo

La solución del ejercicio para probar una llamada a panic podría ser algo parecido a esto:

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)
        }
    }
}

Recuerde que la idea es practicar un bucle infinito y una instrucción switch.