Un peu plus sur les Modulos! Pierre Ruyter, Avril 2012

Documents pareils
Petit lexique de calcul à l usage des élèves de sixième et de cinquième par M. PARCABE, professeur au collège Alain FOURNIER de BORDEAUX, mars 2007

Glossaire des nombres

Le chiffre est le signe, le nombre est la valeur.

La question est : dans 450 combien de fois 23. L opération est donc la division. Le diviseur. Le quotient

Initiation à la programmation en Python

Les nombres entiers. Durée suggérée: 3 semaines

V- Manipulations de nombres en binaire

a) b)

STAGE IREM 0- Premiers pas en Python

Cours Informatique Master STEP

108y= 1 où x et y sont des entiers

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Programmation C++ (débutant)/instructions for, while et do...while

Définition : On obtient les nombres entiers en ajoutant ou retranchant des unités à zéro.

Représentation des Nombres

Par combien de zéros se termine N!?

D'UN THÉORÈME NOUVEAU

Exercices - Polynômes : corrigé. Opérations sur les polynômes

Technique opératoire de la division (1)

THEME : CLES DE CONTROLE. Division euclidienne

Maple: premiers calculs et premières applications

Chapitre 10 Arithmétique réelle

Vous revisiterez tous les nombres rencontrés au collège, en commençant par les nombres entiers pour finir par les nombres réels.

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

EXPLOITATIONS PEDAGOGIQUES DU TABLEUR EN STG

Bac Blanc Terminale ES - Février 2011 Épreuve de Mathématiques (durée 3 heures)

DEVOIR MAISON : THEME : LES CLES DE CONTROLE. I. La clé des codes barres

TP Service HTTP Serveur Apache Linux Debian

COURS ALGORITHMIE. Mathématiques. Le monde merveilleux des algorithmes!! Croyez-moi, vous allez les adorer. Julien Bordas T.S 3

Organigramme / Algorigramme Dossier élève 1 SI

Cours d Informatique

Algorithmique avec Algobox

POKER ET PROBABILITÉ

Vers l'ordinateur quantique

CHAPITRE VIII : Les circuits avec résistances ohmiques

LES NOMBRES DECIMAUX. I. Les programmes

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Chapitre 6. Fonction réelle d une variable réelle

Chapitre 2. Eléments pour comprendre un énoncé

Nombres, mesures et incertitudes en sciences physiques et chimiques. Groupe des Sciences physiques et chimiques de l IGEN

Une version javascript sera disponible directement dans le cours prochainement.

LES REGLEMENTS AVEC SOCIEL.NET DERNIERE MISE A JOUR : le 14 juin 2010

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Nombre de marches Nombre de facons de les monter

Procédure de sauvegarde pour AB Magique

La compta à double entrée c'est bien, mangez-en

Logiciel de Base. I. Représentation des nombres

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

I GENERALITES SUR LES MESURES

Trier les ventes (sales order) avec Vtiger CRM

Baccalauréat L spécialité, Métropole et Réunion, 19 juin 2009 Corrigé.

EBS 204 E C B S. Publication : Novembre 96

Diviser un nombre décimal par 10 ; 100 ; 1 000

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Compter à Babylone. L écriture des nombres

avec des nombres entiers

Chapitre VI - Méthodes de factorisation

1 Définition et premières propriétés des congruences

EXCEL PERFECTIONNEMENT SERVICE INFORMATIQUE. Version /11/05

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Introduction à l algorithmique et à la programmation (Info 2)

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

SOMMAIRE... SOMMAIRE... SOMMAIRE... SOMMAIRE... SOMMAIRE... SOMMAIRE... LES MESURES

Algorithmique avec Algobox

Programmation Objet - Cours II

SINE QUA NON. Découverte et Prise en main du logiciel Utilisation de bases

Définitions. Numéro à préciser. (Durée : )

modélisation solide et dessin technique

I. Ensemble de définition d'une fonction

Dérivation : Résumé de cours et méthodes

Créer le schéma relationnel d une base de données ACCESS

Algorithmique et programmation : les bases (VBA) Corrigé

Chapitre 1 : Évolution COURS

Projet Active Object

CORRIGE LES NOMBRES DECIMAUX RELATIFS. «Réfléchir avant d agir!»

FctsAffines.nb 1. Mathématiques, 1-ère année Edition Fonctions affines

LES DECIMALES DE π BERNARD EGGER

Introduction à l étude des Corps Finis

Complément d information concernant la fiche de concordance

Nombres premiers. Comment reconnaître un nombre premier? Mais...

Dossier projet isn 2015 par Victor Gregoire

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12


Représentation d un entier en base b

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS =

0x700. Cryptologie Pearson France Techniques de hacking, 2e éd. Jon Erickson

Précision d un résultat et calculs d incertitudes

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

White Paper - Livre Blanc

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

S entraîner au calcul mental

I. Cas de l équiprobabilité

Conversion d un entier. Méthode par soustraction

UTILISATION DE L'APPLICATION «PARTAGE DE FICHIERS EN LIGNE»

Les bases de données Page 1 / 8

Transcription:

Un peu plus sur les Modulos! Pierre Ruyter, Avril 2012 Résumé La programmation (et autres dérivés comme l'event-making, pour ceux qui ne considéreraient pas cette discipline comme une forme de programmation minimaliste) fait usage dans son travail d'analyse, de modélisation, d'élaboration d'algorithme, de concepts mathématiques fondamentaux(parfois à l'insu du programmeur). L'objectif de cet article est de présenter les modulos, qui peuvent être très utiles dans certains domaines. La manière dont je développe le sujet est surement discutable (et peut paraitre un peu assistée) mais a pour objectif de tâcher de bien faire comprendre les différentes sections de ce papier. La structure choisie sera donc orienté selon cette structure: Théorie -> Exercices. Merci d'avance pour votre lecture. Rappel sur la division entière La division entière (aussi appelée la division euclidienne) est une division très populaire, que ce soit en informatique ou en arithmétique. En effet, il s'agit généralement de la division écrite que l'on commence à apprendre à l'école. Il s'agit d'une division qui utilises 4 mots clés : Diviseur, dividende, quotient, reste. En informatique, les divisions de naturels (donc les nombres sans virgules, positifs comme négatifs) donne toujours un nombre naturel. Voici quelques exemples de division entière : 4 / 2 = 2 2 / 1 = 2 5 / 5 = 1 18 / 3 = 6 5 / 2 = 2 7 / 2 = 3 Les deux dernières opérations devraient vous hérisser les cheveux. En effet, beaucoup auraient donné 2.5 et 3.5 comme réponse. Cependant, comme je vous l'ai dit, une division entière donne toujours un nombre entier comme réponse. Lorsque vous avez étudiés les calculs écrits, la division devait être (pour beaucoup) la partie la plus ennuyeuse. Je ne vous expliquerai pas la division écrite parce que j'estime que c'est un pré-requis et qu'il est très facile de trouver sur le net différents articles qui l'explique. Rappelons-nous donc de cette fameuse division écrite qui était invariablement (du moins, en primaire), une division entière. Elle nous donnait une réponse mais aussi un reste. Dans le cas de 5 divisé par 2 on obtient 2 comme réponse et 1 comme reste. Il s'agit donc du nombre qu'il nous manque quand on divise (de manière entière) 5 par 2. Dans le cas de 4 divisé par 2, le reste est 0. Je vous invite a refaire quelques calculs écrits si vous n'êtes pas sur, mais normalement, cette partie devrait être relativement claire pour tout le monde.

Exercices 1 Voici quelques exercices uniquement dans le cas ou vous n'êtes pas sur! 53 / 2 Réponse? Reste? 17 / 16 Réponse? Reste? 25 / 5 Réponse? Reste? Conclusion Nous pouvons conclure ce rappel sur la division entière par une propriété. Nous avons dit qu'une division entière nous donnait deux informations, une réponse et un reste. On peut donc recomposer un nombre avec les données que nous possédons. On sait que 65 / 2 = 32 et qu'il nous reste 1, on peut donc affirmer que 65 = 2*32 + 1 soit que le DIVIDENDE (65) = DIVISEUR (2) * QUOTIENT (32) + RESTE (1). Vous pouvez vérifier les calculs de l'exercice précédent. Le RESTE est aussi appelé peut aussi être appelé le MODULO. Les MODULOS Nous avons conclu le chapitre précédent sur le fait que le reste d'une division euclidienne/entière est aussi appelé Modulo. Dorénavant, nous allons tâcher de l'appeler comme ça. Ce modulo est présent dans énormément de langages de programmations (et dans l'event making, sous VX il est appelé reste). Et est très souvent représenté par le symbole %, c'est un peu ennuyeux car il s'agit du symbole pour cent, cependant, dans les mathématiques, on utilise en générale ce symbole comme annotation de mesure et rarement dans une équation. Donc nous utiliserons % comme opérateur pour les modulos!. Donc si je vous dit 40 % 2? Vous me répondez? Oui, zéro. Car 40 / 2 donne 20 et qu'il ne reste rien! Une propriété Comme le modulo est le reste d'une division, un modulo x est toujours comprit entre 0 et ce nombre. 55 % 27, la réponse sera comprise entre 0 et 26, nous verrons que cela peut être très utile dans certains cas ou le traitement de cycles est important. Les MODULOS dans la vie L'objectif de ce papier n'est pas vraiment de parler des modulos dans tous les sens, mais sachez qu'ils sont très très utilisés dans plusieurs petit cas précis qui, s'ils sont en rapport avec la création de systèmes seront évoqués, mais aussi dans des domaines beaucoup plus spécifiques. Par exemple dans la cryptologie (notamment avec les modulos sur des nombres premiers, qui sont très amusants). Il est aussi possible de résoudre des équations modulos x, cependant, ce n'est pas vraiment le thème de l'article donc nous ne nous égarerons pas plus.

Cas pratique Cette partie est certainement la plus intéressante car elle est celle qui traitera de plusieurs petites applications pratique que nous pouvons faire avec les modulos. Elles seront expliqués et relié à la théorie. Tester si un nombre est divisible par un autre Les modulos fournissent une manière élégante et courte de tester si un nombre est divisible par un autre. Il suffit que le reste soit égal à zéro. On peut donc affirmer que Si un nombre Y modulo X a pour résultat zéro, Y est divisible par X. Tester la parité d'un nombre devient très facile, le nombre pair si ce nombre modulo 2 égal zéro. Exercice 2 Écrivez une boucle qui va de zéro à un nombre et qui affiche ce nombre si celui-ci est pair. Faire un cycle Il est courant de vouloir effectuer un cycle dans des valeurs, par exemple aller de 0 à 99 et que quand on dépasse 99 on retombe a zéro. De même que quand on enlève 1 à zéro, on arrive à 99. Les modulos permettent facilement ceci. En effet, je vous avais dit qu'une réponse d'un calcul modulo donnait toujours un nombre compris entre zéro et ce nombre. Il suffit donc d'appliquer (% limite) à votre nombre pour borner son résultat. Par exemple: 54 % 100 = 54 68 % 100 = 68 100 % 100 = 0 127 % 100 = 27 987456321 % 48 = 33-200 % 14 = 10-1 % 127 = 126 Je vous suggère de faire des expériences et vous verrez que le modulo permet de cycler des valeurs. Par exemple, il m'est souvent arrivé d'écrire des systèmes de choix originaux en event-making. En gros, chaque fois que j'appuie sur bas, j'augmente une valeur curseur et chaque fois que j'appuie sur haut, je la réduit. Ensuite il me suffit d'afficher l'image qu'il faut en fonction de la valeur de mon curseur. Si je voudrais que quand on clique sur bas alors que je suis sur le dernier choix et que ça me donne le premier choix, et que si je clique sur haut quand je suis sur le premier choix et que ça me donne le dernier. La solution qui semble la plus instinctive serait de faire une condition Si mon curseur est plus grand que mon nombre de choix, alors mon curseur vaut zéro et si mon curseur est plus petit que zéro, alors mon curseur vaut mon nombre de choix. Cependant, ça fait 2 conditions et c'est un peu ennuyeux, ce que je vous propose, c'est une fois que votre curseur est

incrémenté ou décrémenté, lui appliquer simplement un modulo (valeur maximum). En effet, le modulo s'occupera tout seul de cycler votre curseur. L'affichage de très grand nombres Ici, je chasse un peu sur le terrain de Lidenvice et je m'en excuse, cependant, je trouve ça dommage de ne pas parler de cette méthode alors qu'elle est très étroitement liée au modulo. Admettons que je doive afficher un nombre aléatoire compris entre 0 et 9999 en image. Il est impossible d'imaginer faire 9999 conditions. Donc nous allons, au moyen des modulos, isoler les unités, dizaine, centaines et milliers. Les modulos que l'on devra utiliser sont des modulos multiples de 10. Je vous invite a essayer 9873 modulo 10, la réponse est 3! Soit l'unité. La raison est très simple, 9873 divisé par 10 donne 987 (987 * 10 = 9870, notre reste est donc 3! ). Nous avons notre unité! Passons à la dizaine. Pour notre dizaine nous allons donc utiliser le modulo 100: 9873 modulo 100 = 73, nous avons donc un nombre trop grand. Cependant, il nous suffit de diviser 73 par 10 (comme dizaine :) ) et nous aurons notre dizaine. Certains seraient tenté de soustraire l'unité, cependant rappelons-nous qu'une division entière donne toujours un nombre entier et donc, de ce fait, 73 / 10 donne 7 (et un reste de 3). Il faut répéter cette action jusqu'à ce qu'on ai fait l'avant dernier chiffre (dans ce cas ci, les centaine qui utiliserons, elle, le modulo 1000 et que nous diviserons par 100) et le dernier nombre s'obtient en divisant simplement le nombre général par 1000 (dans le cas ou on ne va que jusque au milliers). Voici un exemple avec un nombre trèèèès grand : 987456321 L'unité = 987456321 % 10 (soit 1) La dizaine = (987456321 % 100)/10 (soit 2) La centaine = (987456321 % 1000)/100 (soit 3) Le millier = (987456321 % 10000)/1000 (soit 4) La dizaine de milliers = (987456321 % 100000)/10000 (soit 5) La centaine de milliers = (987456321 % 1000000)/100000 (soit 6) Etc. Premier chiffre : 987456321/100000000 soit 9 Comme les nombres sont isolés, dans le cas de 9999 il ne suffit plus que de faire 4 * 10 conditions soit 40, ce qui est tout de même beaucoup moins que 9999 :) Conclusions Voici un survol assez rapide des modulos et de ce qu'ils peuvent apporter à l'eventmaker, j'espère avoir été assez clair (et ne pas avoir fait trop de raccourcis). J'espère aussi que cela vous aura permis de découvrir de petits raccourcis pour vous prochains programmes, systèmes. Les modulos offrent des opportunités encore plus

grande, cependant, l'objectif de cet article est avant tout de servir l'event maker. Je vous invite aussi a chercher d'autres utilités. Je laisse tout de même un petit exercice (ou je ne donne pas la solution) à creuser, comment feriez-vous pour stocker plusieurs nombres dans une seule variable. Bonne chance et merci beaucoup de m'avoir lu! Pierre. PS: Les «corrigés» des pseudos-exercices sont fournis à la page suivante.

Réponses des exercices Exercice 1 53 / 2 Réponse? 26 Reste? 1 17 / 16 Réponse? 1 Reste? 1 25 / 5 Réponse? 5 Reste? 0 Exercice 2 Il existe plusieurs solutions, en voici une de 0 à 100: Attribuer variable 1 = 0 Attribuer variable 2 = 100 boucle attribuer variable 3 = variable 1 variable 3 % 2 Si variable 3 = 0 Afficher \V[1] Si variable 1 > variable 2 Sortir de la boucle Variable 1 + 1 Afficher «Fin du programme»