Exercice
Ecrire un programme qui affiche les chiffres d'un nombre lu à partir du clavier.
Soution
Cet exercice est l'un des exercices classiques. Il vise à donner un exemple de manipulation sur deux éléments :
L'extraction d'un chiffre (une position) dans un nombre n'est pas aussi simple que l'extraction d'une lettre à partir d'une chaîne de caractères; il ne faut pas confondre les deux situations.Ecrire un programme qui affiche les chiffres d'un nombre lu à partir du clavier.
Soution
Cet exercice est l'un des exercices classiques. Il vise à donner un exemple de manipulation sur deux éléments :
- Boucles "Tant que" (while)
- Extraîre les chiffres d'un nombre.
Dans le cas d'une chaîne de caractères, nous avons un tableau de caractères. En mémoire, chaque caractère occupe une case (d'un ou de deux octets, selon le langage et la plate-forme). Ainsi, il suffit de connaître la position d'un caractère pour l'extraire. Le parcours peut être réalisé avec une boucle "Pour" (connaissant la taille de la chaîne de caractères).
Dans le cas d'un nombre, nous avons une seule valeur sauvegarder dans un seul emplacement mémoire (de un, deux, quatre ou huit octets). La valeur est sauvegardée en binaire et les chiffres ne sont pas distingués. Ainsi, connaître la position d'un chiffre de facilite pas son extraction. En effet, il faut faire appel à des calculs pour extraire ce chiffre. Dans ce cas les deux opérations nécessaires sont la division et le modulo.Pour récupérer un chiffre, il faut faire deux choses :
- Couper le nombre pour rendre le chiffre recherché dans la position des unités. Cela est fait par la division sur une puissance de 10.
- Extraire le chiffre qui devient (après avoir coupé le nombre) le modulo 10.
- Diviser le nombre sur 100 (10^(position - 1)), n devient 1234.
- Extraire le nombre la module 10, le chiffre extrait sera 4.
Il nous reste à signaler deux remarques très importantes :
- Contrairement à un tableau (ou chaîne de caractères), le parcours se fait de droite à gauche.
- L'opération détruit la valeur d'origine. Si vous aurez besoin d'utiliser cette valeur plus loin dans le programme alors il faut la sauvegarder dans une variable.
Program ExtraireChiffres; Var n, c : Integer; Begin WriteLn('Donnez un nombre entier'); ReadLn(n); WriteLn('Ses chiffre (de droite à gauche) sont :'); While (n > 0) Do Begin c := n mod 10; WriteLn(c); n := n div 10; End; End.
En Java :
import java.util.Scanner; public class ExtraireChiffres { public static void main (String args[]) { Scanner s = new Scanner(System.in); System.out.println("Donnez un nombre entier :"); int n = s.nextInt(); System.out.println("Ses chiffres sont :"); while(n > 0){ System.out.println(n % 10); n = n / 10; } } }
L'exécution est identique pour les deux codes :