Énoncé
Ecrire un algorithme qui affiche le nombre des entiers qui sont des multiples de 3 et inférieur à un nombre n donné par l'utilisateur.
Solution(s)
Plusieurs solutions peuvent être données. Il s'agit d'un autre exercice très classique pour commencer avec les boucles.
Premièrement, nous pouvons voir qu'il y a une borne supérieure à ne pas dépasser. Cela veut dire que le nombre d'itérations est connu et la boucle "Pour" peut être utilisée (toute boucle peut être écrite sous la forme Tant Que).
Ainsi, la solution la plus simple et la plus intuitive sera composée de :
- Une boucle qui parcours les valeurs jusqu'à n,
- Une structure conditionnelle pour vérifier est ce qu'il s'agit d'un multiple de 3 pour l'afficher.
Program AfficherMultiples3; Var n, i : Integer; Begin WriteLn('Faites entrer la limite n :'); ReadLn(n); For i := 0 to n Do If (i mod 3 = 0) Then WriteLn(i, ' est un multiple de 3'); ReadLn; End.
En Java :
Le résultat d'exécution est exactement le même pour les deux codes :
D'habitude, l'étape suivante est de montrer que même avec ce petit code, on arrive à l'optimiser. En effet, pourquoi parcourir toutes les valeurs et faire le test pour chaque valeur. Il est possible de ne parcourir que les valeurs désirées, c'est à dire, il est possible de parcourir les multiples de 3 seulement. L'idée réside dans le pas effectué par la boucle Pour à chaque itération.
En Pascal (j'utilise fpc qui ne supporte pas des pas dans la boucles For, alors je suis obligé de passer à la boucle While):
En Java :
Ces deux codes donnent exactement les mêmes résultats mais dans un temps d'exécution plus court.
import java.util.Scanner; public class AfficherMultiples3 { public static void main (String args[]) { System.out.println("(Java) Faites entrer la limite n :"); Scanner entree = new Scanner(System.in); int n = entree.nextInt(); for(int i = 0; i <= n; i++) if(i % 3 == 0) System.out.println(i + " est un multiple de 3"); } }
Le résultat d'exécution est exactement le même pour les deux codes :
D'habitude, l'étape suivante est de montrer que même avec ce petit code, on arrive à l'optimiser. En effet, pourquoi parcourir toutes les valeurs et faire le test pour chaque valeur. Il est possible de ne parcourir que les valeurs désirées, c'est à dire, il est possible de parcourir les multiples de 3 seulement. L'idée réside dans le pas effectué par la boucle Pour à chaque itération.
En Pascal (j'utilise fpc qui ne supporte pas des pas dans la boucles For, alors je suis obligé de passer à la boucle While):
Program AfficherMultiples3; Var n, i : Integer; Begin WriteLn('Faites entrer la limite n :'); ReadLn(n); i := 0; While(i <= n)Do Begin WriteLn(i, ' est un multiple de 3'); i := i + 3; { Le compteur change par 3 à chaque fois } End; ReadLn; End.
En Java :
import java.util.Scanner; public class AfficherMultiples3 { public static void main (String args[]) { System.out.println("(Java) Faites entrer la limite n :"); Scanner entree = new Scanner(System.in); int n = entree.nextInt(); for(int i = 0; i <= n; i+=3 /* le pas est 3 */) System.out.println(i + " est un multiple de 3"); } }
Ces deux codes donnent exactement les mêmes résultats mais dans un temps d'exécution plus court.