C-SHARP - 3.13 Exercice
Cette vidéo propose un exercice récapitulatif qui mobilise l'ensemble des notions vues jusqu'ici. Objectif : écrire un programme C# qui calcule la factorielle d'un nombre saisi par l'utilisateur. Pour rappel, la factorielle d'un nombre n est le produit de tous les entiers positifs inférieurs ou égaux à n. Par exemple, la factorielle de 5 vaut 1 × 2 × 3 × 4 × 5 = 120.
L'énoncé
Le programme doit demander un nombre à l'utilisateur, calculer sa factorielle et afficher le résultat. Particularité : si l'utilisateur saisit un nombre supérieur à 31, on sort de la plage du type int. On affichera donc la factorielle uniquement si le nombre est inférieur ou égal à 31, sinon on affichera « Le nombre est trop grand, on sort du int ». Cet exercice mobilise saisie utilisateur, conversion de type, boucle for et conditions.
La correction
Première étape : afficher un message et récupérer la saisie via Console.ReadLine(), qui renvoie toujours un string. Comme on veut effectuer des opérations arithmétiques, on convertit en int avec int.Parse() :
Console.WriteLine("Vous voulez la factorielle de quel nombre ?");
string nombre_utilisateur = Console.ReadLine();
int conversion = int.Parse(nombre_utilisateur);
Au cœur du programme, on initialise la variable factorielle à 1 (le produit doit démarrer à 1, pas à 0). Une boucle for multiplie ensuite chaque entier de 1 jusqu'au nombre saisi. La condition inclut le signe d'égalité (<=) pour que le dernier tour intègre la valeur saisie :
int factorielle = 1;
for (int i = 1; i <= conversion; i++)
{
factorielle = factorielle * i;
}
Affichage conditionnel et bonnes pratiques
L'affichage se fait avec une condition if (conversion <= 31) qui appelle Console.WriteLine combiné à string.Format pour afficher proprement le nombre et son résultat. Sinon, on bascule sur else avec le message « Le nombre est trop grand ». Tests : 5 donne bien 120, 6 donne 720, et 50 affiche directement le message d'erreur.
Note d'optimisation : on aurait pu placer le for à l'intérieur du if pour éviter de calculer une factorielle qu'on n'affichera pas. C'est un réflexe à acquérir : en tant que développeur, on cherche à demander à la machine le moins d'opérations possible pour produire des programmes efficients. Si l'exercice n'a pas fonctionné du premier coup, n'hésitez pas à le refaire en revisitant les vidéos précédentes.
En résumé
Cet exercice demande de créer un programme en C# qui calcule la factorielle d'un nombre entré par l'utilisateur. La leçon enseigne comment récupérer une entrée avec Console.ReadLine(), la convertir en entier avec int.Parse(), utiliser une boucle for pour calculer le produit des entiers de 1 à n, et implémenter une condition pour vérifier que le nombre ne dépasse pas 31 (limite du type int).
Points clés
- Utiliser Console.WriteLine() pour afficher un message et Console.ReadLine() pour récupérer l'entrée utilisateur (retourne une string)
- Convertir la string en int avec int.Parse() avant d'effectuer les opérations arithmétiques
- Implémenter une boucle for où la variable commence à 1 et doit être ≤ au nombre entré par l'utilisateur
- La factorielle est le produit de tous les entiers positifs de 1 à n (ex: 5! = 1×2×3×4×5 = 120)
- Ajouter une condition : si le nombre est ≤ 31, afficher la factorielle, sinon afficher « le nombre est trop grand »
- Cet exercice récapitule les concepts fondamentaux (boucles, conditions, conversion de types)
Questions fréquentes
Pourquoi doit-on convertir la valeur entrée par Console.ReadLine() avec int.Parse()?
Parce que Console.ReadLine() retourne toujours une string, mais nous avons besoin d'un entier pour effectuer des calculs mathématiques. int.Parse() effectue cette conversion de type.
Pourquoi initialiser la variable de la boucle à 1 et non à 0?
Parce que la factorielle est le produit de tous les entiers de 1 à n. Si on initialisait à 0, le produit serait toujours 0. On initialise à 1 car c'est l'élément neutre de la multiplication.
Pourquoi faut-il une condition pour vérifier si le nombre est ≤ 31?
Parce que le type int en C# a une plage de valeurs limitée. Calculer la factorielle de nombres supérieurs à 31 dépasserait la limite maximale d'un int (2 147 483 647), d'où l'utilisation du type long pour les grands nombres.