Exercice - Utiliser les flux de contrôle dans Go
Pratiquez ce que vous avez appris dans ce module en effectuant des exercices de codage. Ces exercices ne sont pas compliqués et vous trouverez des solutions dans l’unité suivante.
Essayez d’abord de résoudre les exercices. Comparez ensuite vos résultats avec les solutions. Vous pouvez toujours passer en revue le module si vous ne vous souvenez pas d’un détail important.
Écrire un programme FizzBuzz
Tout d’abord, écrivez un programme qui imprime les chiffres 1 à 100, avec les modifications suivantes :
- Imprimer
Fizz
si le nombre est divisible par 3. - Imprimer
Buzz
si le nombre est divisible par 5. - Imprimer
FizzBuzz
si le nombre est divisible par 3 et par 5. - Imprimer le nombre si aucun des cas précédents ne correspond.
Essayez d’utiliser l’instruction switch
.
Trouver les nombres premiers
Écrivez un programme pour rechercher tous les nombres premiers inférieurs à 20. Un nombre premier est tout nombre supérieur à 1 qui peut être divisé uniformément uniquement par lui-même et 1. Pour être « uniformément divisé », cela signifie qu’il n’y a pas de reste après l’opération de division. Comme la plupart des langages de programmation, Go fournit un moyen de vérifier si une opération de division produit un reste. Nous pouvons utiliser l’opérateur (signe pourcentage) %
du modulo.
Dans cet exercice, vous allez mettre à jour une fonction nommée findprimes
pour vérifier si un nombre est un nombre premier. La fonction a un argument entier et retourne une valeur booléenne. La fonction teste si le nombre saisi est un nombre premier en vérifiant la présence d’un reste. Si le nombre est un nombre premier, la fonction renvoie true.
Utilisez l’extrait de code suivant comme point de départ et remplacez toutes les instances de ??
par la syntaxe correcte :
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)
}
}
}
Ce programme vérifie les nombres de 1 à 20, puis imprime le nombre s’il s’agit d’un nombre premier. Modifiez l’exemple comme décrit.
- Dans la fonction
main
, parcourez tous les nombres à vérifier. Quittez la boucle après avoir vérifié le dernier nombre. - Appelez la fonction
findprimes
pour vérifier le nombre. Si la fonction retourne true, imprimez le nombre premier. - Dans la boucle
findprimes
, démarrez à partir de 2 et répétez l’opération jusqu’à ce que la valeur du compteur soit supérieure ou égale à la valeurnumber
. - Vérifie si
number
est uniformément divisible par la valeur de compteur actuelle. Si c’est le cas, quittez la boucle. - Lorsque
number
est un nombre premier, retourne true ; sinon, retourne false. - Conseil : Veillez à gérer correctement le cas où le numéro d’entrée est 1.
Demander un nombre, mettre en état d’alerte si celui-ci est négatif
Écrivez un programme qui demande un nombre à un utilisateur. Utilisez l’extrait de code suivant comme point de départ :
package main
import "fmt"
func main() {
val := 0
fmt.Print("Enter number: ")
fmt.Scanf("%d", &val)
fmt.Println("You entered:", val)
}
Ce programme demande un nombre et l’imprime. Modifiez l’exemple de code pour :
- Demander continuellement un nombre entier. La condition de sortie de la boucle doit être une entrée utilisateur qui est un nombre négatif.
- Bloquez le programme quand l’utilisateur saisit un nombre négatif. Imprimez ensuite l’erreur de trace de la pile.
- Si le nombre est 0, imprimez
0 is neither negative nor positive
. Continuez à demander un nombre. - Lorsque le nombre est positif, imprime
You entered: X
(oùX
est le nombre saisi). Continuez à demander un nombre.
Pour le moment, ignorez la possibilité que l’utilisateur entre une valeur différente d’un nombre entier.