Conversion décimal-binaire - Algorithme & programme Pascal

Dans cette vidéo pédagogique, le présentateur explique comment convertir un entier décimal positif en sa représentation binaire en utilisant la méthode classique de divisions successives par 2. Il détaille le raisonnement algorithmique, justifie le choix d’une boucle « Répéter » (ou « TantQue ») plutôt qu’une boucle « Pour » du fait du nombre d’itérations inconnu, et décrit les variables nécessaires (nbr, R, code). Le déroulement de l’algorithme est illustré pas à pas avec l’exemple du nombre 6, puis généralisé. Le tutoriel montre ensuite la transcription de cet algorithme en Pascal : déclaration des variables, validation de l’entrée utilisateur (entier positif), boucle de division/modulo, concaténation à gauche du caractère « 0 » ou « 1 » dans la chaîne code, affichage du résultat et pause du programme. Des démonstrations d’exécution (6 → 110, 128 → 10000000) confirment le bon fonctionnement. Le présentateur insiste sur la clarté du pseudo‑code, la conversion de type éventuelle (cast) et encourage l’adaptation du même raisonnement à d’autres langages.
Chapters
Bonjour à tous et bienvenue dans cette nouvelle vidéo d'algorithmique où nous allons traiter l'exercice suivant: On souhaite créer un algorithme qui demande à l'utilisateur d'entrer un entier en base décimale et qui convertit ce dernier en binaire. On va insister sur le fait que l'utilisateur doit entrer un entier positif afin de simplifier le traitement. Autrement dit, nous n'allons pas traiter les nombres signés complémentés à 2 ou les nombres réels codés avec la virgule flottante par le biais de la norme IEEE 754. Comme vous le savez probablement déjà, afin de convertir un nombre décimal en nombre binaire naturel on peut recourir à 2 méthodes classiques, à savoir la division consécutive par 2 ou la décomposition du nombre décimal, mais la plus simple des 2 consiste à diviser consécutivement le nombre décimal par 2 jusqu'à ce que le résultat de la division entière soit nul. Ensuite, on reconstitue le nombre binaire par le regroupement des restes des divisions dans l'ordre inverse. Par exemple, si on veut convertir le nombre décimal 6 en binaire, alors on commence par diviser 6 par 2. On obtient le quotient 3 et le reste 0. Ensuite, on divise ce nouveau quotient, qui dans ce cas vaut 3, par 2. On obtient le quotient 1 et le reste 1. Après, on divise 1 par 2 et on obtient le quotient 0 et le reste 1. L'opération prend fin car le résultat de cette dernière division entière vaut 0. Maintenant, on va reconstituer le nombre binaire résultant en prenant le reste de toutes les opérations précédentes dans l'ordre inverse, ce qui donne: 1 1 0. Alors, la représentation binaire du nombre décimal 6 vaut 1 1 0. Puisqu'on a des opérations consécutives, alors il est clair que l'on va solliciter un traitement itératif à l'aide de l'une des 3 boucles que l'on a déjà vues, à savoir TantQue, Pour ou Répéter. Mais le nombre d'opérations de division par 2 qu'il faut exécuter n'est pas connu à l'avance. Par conséquent, on peut déjà écarter la boucle Pour. Il nous reste donc à choisir entre les structures itératives TantQue et Répéter. En fait, dans ce cas de figure les deux structures feront l'affaire, sauf qu'on aura tendance à préférer la structure Répéter vu que dans cette structure itérative on vérifie la condition après avoir exécuté le traitement de la boucle. En effet, la condition à vérifier pour mettre fin à la boucle est le fait que le résultat de la division entière soit nul. Or, ce résultat-là doit être calculé à l'avance, ce qui signifie que l'opération de la division doit être exécutée dans le corps de la structure itérative et ensuite on vérifie si le résultat est nul ou pas. Dans cet algorithme on aura besoin des variables suivantes: nbr qui représente le nombre entier saisi par l'utilisateur, c'est ce nombre-là que l'on cherche à convertir en binaire. Notez que la variable nbr changera de valeur à chaque opération de division, c'est-à-dire qu'elle prendra consécutivement la valeur du dernier quotient calculé. R qui correspond au reste de la division, cette variable sera écrasée à chaque division consécutive et remplacée par la nouvelle valeur du reste. Elle sera de type entier. Code qui constitue la représentation binaire du nombre décimal nbr. Cette variable sera de type chaîne de caractères. Je propose l'algorithme suivant: Au début de l'algorithme on demande à l'utilisateur d'entrer un entier positif puis on récupère cet entier-là que l'on affecte à la variable nbr. Ces 2 instructions seront réexécutées à l'aide de la structure Répéter jusqu'à ce que l'utilisateur saisisse un entier positif. Ensuite, on On initialise la variable code qui représente le code binaire à afficher avec une chaîne vide. Pour cela, nous lui avons affecté de simples quotes quantiégues sans aucun contenu à l'intérieur. Ensuite, nous procédons au traitement itératif qui consiste à effectuer les divisions consécutives à l'aide de la structure itérative Répéter. On commence par calculer le reste de la division de la variable nbr par 2 à l'aide de l'opérateur Modulo. Ce reste sera affecté à la variable R. Ensuite, on calcule le quotient de la division de la variable nbr par 2. Ce quotient sera affecté à la variable nbr elle-même, ce qui écrasera son ancienne valeur. Maintenant, on doit décider si on doit ajouter 1 ou 0 à notre code binaire. Pour cela, on procède à un traitement conditionnel. En effet, on vérifie si le reste vaut 0. Si c'est le cas, alors on ajoute un 0 en tant que caractère à gauche de la variable code par concaténation. En fait, l'instruction code reçoit 0 concaténé avec code signifie que la nouvelle valeur de la variable code vaut son ancienne valeur à laquelle on a ajouté un 0 à gauche par concaténation. Autrement dit, si l'ancienne valeur de code vaut 1, alors sa nouvelle valeur vaut désormais 01, car n'oubliez pas qu'on reconstitue le code binaire en plaçant les restes dans le sens inverse, c'est pour cela que nous avons procédé à une concaténation à gauche. Et si le reste ne vaut pas 0, ce qui signifie implicitement qu'il vaut 1, alors on ajoute 1 à gauche de la variable code par concaténation de la même manière. Quand la variable nbr vaut 0, ce qui signifie que le nouveau quotient calculé est nul, alors on met fin au traitement itératif et on sort de la boucle. Puis on affiche la variable code qui constitue la représentation binaire du nombre saisi par l'utilisateur. Vous vous dites sûrement qu'au lieu de procéder au traitement conditionnel pour décider si on doit ajouter 0 ou 1 à gauche de la variable code, on peut concaténer directement la variable R avec la variable code comme ceci. Mais il ne faut pas oublier que la variable R est de type entier, alors que seulement les caractères et les chaînes de caractères sont éligibles pour la concaténation. Cependant, on peut toutefois exécuter un traitement pareil après avoir procédé à la conversion de type de la variable R. Cette opération est connue sous le nom de cast. Mais je préfère que vous découvriez ce genre d'opération en manipulant directement un langage de programmation plutôt qu'un algorithmique. Afin de valider notre algorithme, nous allons l'écrire sous forme d'un programme. Cette fois, on va ressusciter le bon vieux Pascal. Notez bien que Pascal est un très vieux langage qui n'est pratiquement plus utilisé de nos jours, mais il s'avère que sa syntaxe est identique à celle du pseudo-code, ce qui le rend facile à appréhender si on est débutant et que l'on veut implémenter nos premiers algorithmes en programme. Alors on va nommer notre programme deckToBin. Ensuite on va déclarer les variables nbr et r en tant qu'entiers et code en tant que chaîne de caractères. Après on va entrer dans le corps du programme. Le premier bloc consiste à insister sur le fait que l'utilisateur doit entrer un entier positif. On va donc inclure la structure itérative Répéter. On demandera la valeur de nbr. Qu'on va récupérer juste après. Alors ce traitement sera répété tant que l'utilisateur saisit un nombre inférieur à 0. Ensuite on va initialiser code avec une chaîne vide. L'affectation en Pascal se fait avec:=. Après on va procéder au traitement qui va faire les divisions consécutives. On calcule le reste de la division, la variable R, avec modulo 2. Ensuite on calcule le quotient, qui est dans ce cas la variable nbr, et on utilise l'opérateur div pour dire une division entière. Notez bien que la variable nbr figure des deux côtés, c'est-à-dire qu'on va écraser son ancienne valeur et on va la remplacer par la nouvelle valeur. Ensuite on vérifie la valeur de R pour décider si on doit ajouter 0 ou 1 à notre code. La concaténation de chaînes de caractères en Pascal se fait à l'aide de l'opérateur+. Sinon, on va ajouter 1. Notez que j'ai retiré le point-virgule parce qu'avant le else il faut toujours écarter les points-virgules s'il y en a. Ce traitement sera effectué jusqu'à ce que nPairs soit égal à 0. Et ensuite on affiche la valeur du code. Puis on termine notre programme avec l'instruction println qui empêche la disparition automatique de la fenêtre d'exécution. Maintenant on compile et on exécute. Bon, si j'entre une valeur négative, dans ce cas le programme insiste à ce que l'utilisateur saisisse une valeur positive. Si je mets par exemple 6, alors ça affiche 1 1 0. Réexécutons. Par exemple si on met 128, alors ça devrait donner 1 suivi de 7 0. Bon, c'est exactement le cas, alors j'imagine que notre algorithme est fonctionnel. Bien sûr, vous pouvez écrire votre programme avec n'importe quel langage que vous maîtrisez, le résultat sera toujours le même tant que la logique que nous avons utilisée dans notre algorithme est vérifiée. Merci pour votre attention et à la vidéo prochaine.
More from Yamossoun

Algorithme de calcule de la racine carrée par dichotomie #dichotomy #squareroot #algorithm









