Pour qu’un nombre soit triable, il suffit avec jQuery-UI, de le déclarer comme tel (« sortable » en anglais). Mais pour que l’exercice soit intéressant, les nombres sont d’abord permutés au hasard, à l’aide de underscore (petit logiciel de gestion des tableaux en JavaScript)
Pour commencer, le nombre d’entiers à trier est choisi aléatoirement entre 10 et 20, à l’aide de
taille = _.random 10, 20
Ensuite, les entiers eux-mêmes sont choisis par un tirage sans remise effectué dans la liste des entiers entre 1 et 500. Pour simuler ce tirage sans remise, on permute aléatoirement ("shuffle) les 500 entiers (étape assez longue) puis on choisit les taille premiers d’entre eux :
urne = (_.shuffle [0..500])[0...taille]
Si ça dure trop longtemps, on peut modifier avec l’algorithme suivant :
effectuer un tirage avec remise par une boucle ;
supprimer les doublons avec la fonction « uniq » de underscore
Quelque chose comme ça :
urne = []
for indice in [0...taille]
urne.push _.random 0, 500
urne = _.uniq urne
Voici le fichier, à ouvrir dans un autre onglet :
Ce fichier, comme les autres de l’article, est muni d’une double aide :
la liste des nombres est affichée en ligne, en bas de la page
si on cherche à valider la réponse, et que celle-ci est fausse, on peut continuer quand même.
Pour que le professeur utilise ce genre d’exercice en classe, il peut être souhaitable d’enlever ces aides. Voici donc le même exercice que ci-dessus, mais avec une seule chance pour soumettre une réponse (au-delà, il faut recommencer l’exercice en cliquant sur la flèche arrondie en haut du navigateur) :
Tri d’entiers relatifs et de décimaux
Une légère variante du premier fichier, où les entiers peuvent être négatifs :
Un exercice similaire, où les nombres sont à nouveau positifs, mais décimaux :
Fractions et expressions
Les nombres décimaux ci-dessus sont parfois un peu grands, c’est parce qu’on a fait une approximation décimale (à trois décimales) de fractions aléatoires. La version sans approximations est ici :
En fait, des fractions sont une ébauche de calcul littéral.
La conversion de fractions écrites au valeurs approchées décimales se fait par
(eval(x.innerHTML) for x in $("#sortable li"))
où $("#sortable li") est la liste des fractions à trier, qui contiennent des chaînes de caractères [1]. Donc x.innerHTML est une fraction générique (le contenu au format html de l’élément à trier ; donc une chaîne de caractères). Et eval effectue un calcul d’expression JavaScript, qui renvoie la valeur approchée à la précision permise par le machine. En résumé, eval permet de passer d’une expression littérale à un nombre.
Une variante permet donc de demander le tri d’entiers eux aussi donnés sous forme d’expressions littérales (somme de produits). C’est ici :
Le principe consiste à remplacer chaque occurence de « √ » par « *Math.sqrt ». Par exemple, « 2+3√(5) » devient « 2+3*Math.sqrt(5) » qui est correct du point de vue de JavaScript. La liste des valeurs approchées s’obtient avec
eval(x.innerHTML.replace("√","*Math.sqrt")) for x in $("#sortable li")
La boucle sur x parcourt la liste des élements (« li ») de la liste à trier. Donc les contenus html de ces éléments sont les expressions à évaluer.
Voici le fichier :
Et une petite variante où les racines carrées sont remplacées par π, et où il s’agit donc d’ordonner des « angles remarquables » en radians [2] :
Équations
Et tant qu’on est à faire du calcul littéral, autant carrément demander de trier dans l’ordre croissant les solutions d’une collection d’équations du premier degré [3].
Cet exercice est inspiré d’un « niveau » du jeu enigma appelé « Esprit 50 », de Sven Siggelkow, et où dont le but est de ranger chacune des 4 billes blanches dans son creux à elle :
Chaque creux est caractérisé par un nombre à calculer, et l’un des 4 nombres est solution d’une équation (en bas de l’écran) :
Le fichier final, à tester dans un autre onglet (et pourquoi pas ouvrir aussi un onglet sur ekoarun pour une petite aide ?) :
Chaque équation est une chaîne de caractères, comprenant un signe « = », deux signes « + » et deux fois la lettre « x ». Alors on la découpe d’abord en prenant pour séparateur la chaîne « x+ », ce qui renvoie le premier facteur, le dernier terme et, entre les deux, le reste. Par exemple, avec « 3x+2=5x+7 », on a un tableau contenant
3
2=5
7
Ceci donne déjà deux coefficients, et il suffit de faire pareil avec la chaîne du milieu, en la séparant par le signe « = », pour avoir les deux autres coefficients. On doit convertir en entiers ces coefficients (jusque là ce sont des chaînes de caractères) pour effectuer le calcul de la solution. Celle-ci est donnée sous forme approchée :
solution = (equation) ->
listeTermes = equation.split('x+')
a = parseInt listeTermes[0]
d = parseInt listeTermes[2]
listeTermes = listeTermes[1].split('=')
b = parseInt listeTermes[0]
c = parseInt listeTermes[1]
(d-b)/(a-c)
En effet l’équation ax+b=cx+d peut s’écrire ax-cx=d-b ou (a-c)x=d-b ce qui donne, par division, la formule utilisée dans le script.
[1] un entier puis le caractère « / » puis un entier.
[2] ce qui n’a aucun sens, puisque la mesure d’un angle orienté n’est pas unique. Mais algébriquement, l’exercice conserve son intérêt.
[3] ce qui suppose de les résoudre avant, c’est tout l’intérêt de cet exercice, qui est un exercice de résolution d’équations déguisé.
Dans un site très personnel, Olivier Sicard nous offres quelques « délires » de mathématiques, algorithmique et programmation. Entre autres pépites, on découvrira le Rubix-Tore, la loi normale asymétrique, la théorie du choix social et le dessin à l’aide des séries de Fourier.
Après Elwyn Berlekamp l’année dernière, c’est au tour du centenaire Richard Guy et de l’immense John Conway. Ce document de Richard Guy (une mise en garde contre le raisonnement inductif) montre bien le style unique de son auteur, en plus d’être une mine de ressources pour des exercices. Conway, outre son jeu de la vie, a créé des dizaines de jeux, dont Sprouts, très populaire dès le CP.
On sait bien que Nicolas Bourbaki n’était pas le nom d’une personne mais le pseudonyme d’un groupe. L’équivalent en informatique théorique est Claude Livercy, auteur de la théorie des programmes. Roger Mohr était un des membres de Claude Livercy.
Quand les chercheurs mettent au point des modèles d’optimisation et de recherche de plus court chemin qui s’inspirent du comportement de masse de colonies de fourmis...
À écouter : Sur les Épaules de Darwin, émission diffusée sur France Inter samedi 31 août 2013.
Les RMLLd se dérouleront pour la 2e fois à Saint-Joseph du 22 au 25 août.
C’est une opportunité pour les élèves qui suivent la spécialité ISN et les passionnés d’informatique.
Commentaires