Esercizio - Usare i flussi di controllo in Go

Completato

È possibile mettere in pratica quanto appreso in questo modulo completando alcuni esercizi di scrittura del codice. Questi esercizi non sono complicati e le soluzioni sono disponibili nell'unità successiva.

Provare prima di tutto a risolvere gli esercizi autonomamente. quindi confrontare i risultati con le soluzioni. Se non si ricorda un dettaglio importante, è sempre possibile fare riferimento al modulo.

Scrivere un programma FizzBuzz

Prima di tutto, scrivere un programma che stampa i numeri da 1 a 100, con le modifiche seguenti:

  • Stampare Fizz se il numero è divisibile per 3.
  • Stampare Buzz se il numero è divisibile per 5.
  • Stampare FizzBuzz se il numero è divisibile sia per 3 che per 5.
  • Stampare il numero se nessuno dei casi precedenti è vero.

Provare a usare l'istruzione switch.

Trovare i numeri primi

Scrivere un programma che consenta di trovare tutti i numeri primi minori di 20. Un numero primo è un numero maggiore di 1 che può essere diviso esattamente solo per se stesso e per 1. L'espressione "diviso esattamente" indica che l'operazione di divisione non dà resto. Come la maggior parte dei linguaggi di programmazione, Go consente di verificare se un'operazione di divisione dà resto. È possibile usare l'operatore modulo % (segno di percentuale).

In questo esercizio si aggiornerà una funzione denominata per findprimes verificare se un numero è un numero primo. La funzione contiene un argomento Integer e restituisce un valore booleano. Per testare se il numero immesso è un numero primo, la funzione verifica se l'operazione dà resto. Se il numero è un numero primo, la funzione restituisce true.

Usare il frammento di codice seguente come punto di partenza e sostituire tutte le istanze di ?? con la sintassi corretta:

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

Questo programma controlla i numeri da 1 a 20 e stampa il numero se è un numero primo. Modificare l'esempio come descritto.

  • Nella funzione main eseguire cicli su tutti i numeri da controllare. Uscire dal ciclo dopo aver controllato l'ultimo numero.
  • Chiamare la funzione findprimes per controllare il numero. Se la funzione restituisce true, stampare il numero primo.
  • Nel ciclo findprimes iniziare da 2 e ripetere fino a quando il contatore non è maggiore o pari al valore di number.
  • Controllare se è number divisibile esattamente per il valore del contatore corrente. Se lo è, uscire dal ciclo.
  • Quando number è un numero primo, restituisce true; in caso contrario, restituisce false.
  • Suggerimento: assicurarsi di gestire correttamente il caso in cui il numero immesso sia 1.

Chiedere un numero, eseguire panic se negativo

Scrivere un programma che chiede un numero a un utente. Usare il frammento di codice seguente come punto di partenza:

package main

import "fmt"

func main() {
    val := 0
    fmt.Print("Enter number: ")
    fmt.Scanf("%d", &val)
    fmt.Println("You entered:", val)
}

Questo programma richiede un numero e lo stampa. Modificare il codice di esempio come segue:

  • Chiedere continuamente un numero intero. La condizione di uscita per il ciclo deve essere l'immissione di un numero negativo da parte dell'utente.
  • Arrestare il programma quando l'utente immette un numero negativo. Stampare quindi l'errore di analisi dello stack.
  • Quando il numero è 0 stampare 0 is neither negative nor positive. Continuare a chiedere un numero.
  • Quando il numero è positivo, stampare You entered: X (dove X è il numero immesso). Continuare a chiedere un numero.

Per il momento, ignorare la possibilità che l'utente immetta un valore diverso da un numero intero.