Esercizio - Usare i flussi di controllo in Go
È 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 dinumber
. - 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
(doveX
è 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.