Problème ouvert au Lycée : utilisation des outils numériques dans la recherche d un contre-exemple SOMMAIRE 1. Tableau récapitulatif... 2 2. Enoncé (inspiré d'un article du monde "A quoi ça sert")... 2 3. Objectifs et analyse a priori... 2 4. Scénario de mise en œuvre... 5 5. Evaluation... 6 6. Apport des outils numériques... 6 7. Annexes... 8
1. Tableau récapitulatif Enoncé Niveau concerné Période de l année Durée et organisation Logiciels utilisés/ matériels Pré requis Objectifs généraux On part d un nombre entier, on multiplie ses chiffres, on obtient un nouveau nombre entier. On recommence avec les nombres obtenus. Terminal S(Isn) ou Bts informatique Milieu d année après une période d initiation à la programmation. 4 heures avec des ordinateurs équipés d un langage de programmation. Python ou Java, ordinateurs. Smartphone Android avec Curriculum pour assurer le suivi Maîtrise de la programmation et de l algorithmique. Boucle, traitement sur les chaînes de caractères... Conjecturer. Ecrire des algorithmes pour résoudre des problèmes mathématiques. Utiliser l ordinateur pour trouver des contre-exemples. 2. Enoncé (inspiré d'un article du monde "A quoi ça sert") Choisissez un nombre entier, par exemple 741. Multipliez tous les chiffres qui le constituent : 7 4 1 = 28. Recommencez en partant du nombre obtenu, 28 dans cet exemple. Vous obtenez 2 8 = 16. Recommencez! Vous obtenez 1 6 = 6, et l histoire se termine, puisque 6 n a qu un chiffre. En trois coups, on arrive à un nombre à un chiffre. L histoire se termine-t-elle toujours? N.B. : Le professeur s est fait filmer par ses élèves munis de leur smartphone dans le but de réutiliser cette vidéo pour la présentation d un devoir à la maison pour une autre classe. Le montage a été fait par les élèves. Ceci est un gain de temps pour le professeur, et permet de développer des compétences dans l usage du numérique chez les élèves. 3. Objectifs et analyse a priori Dans un premier temps, les manipulations se feront à la main. Les calculs étant pénibles, on va vite les confier à la machine pour aider à l investigation. Avant de confier la tâche à un ordinateur, il va falloir se l'approprier. Les élèves devront tester des nombres à la main et aboutir à un algorithme en langage naturel dans un premier temps comme par exemple : «On parcourt les chiffres du nombre et on les multiplie, tant que le nombre obtenu a plus d'un chiffre, on recommence en comptant le nombre d'étapes.» On écrira ensuite un pseudo code avec ou sans fonction selon le niveau des élèves et il faudra aboutir à un programme. L enseignant selon les besoins des élèves pourra faire des apports théoriques pour aider les élèves dans leur réalisation (obtenir les chiffres d'un nombre, transformer des nombres en chaînes, extraire des caractères, réaliser des boucles ) On terminera par l exécution du programme, qui prendra quand même quelques minutes malgré la puissance des ordinateurs.
Voici un exemple de résultats que peut apporter un ordinateur. Nombre d'étapes : 1 pour le nombre 10 Nombre d'étapes : 2 pour le nombre 25 Nombre d'étapes : 3 pour le nombre 39 Nombre d'étapes : 4 pour le nombre 77 Nombre d'étapes : 5 pour le nombre 679 Nombre d'étapes : 6 pour le nombre 6788 Nombre d'étapes : 7 pour le nombre 68889 Nombre d'étapes : 8 pour le nombre 2677889... Texte de référence : bulletin officiel n 27 du 4 juillet 2013 Les principales capacités et compétences pour être capable de résoudre le problème 1. Chercher Face à un problème, il convient d'abord de se poser plusieurs questions : Quelles sont les données? Que cherche-t-on? Quelle stratégie peut-on espérer mettre en œuvre pour aborder la résolution du problème? Sur des exemples, tester, formuler des hypothèses. 2. Modéliser Extraire, organiser et traiter l information utile. Choisir des variables adaptées. 3. Raisonner, argumenter Observer, s engager dans une démarche. Emettre des conjectures. 4. Calculer, illustrer, mettre en œuvre une stratégie Valider, corriger une démarche, ou en adopter une nouvelle. 5. Communiquer
Les élèves seront interrogés pendant l année et évalués avec la grille suivante :
Le suivi sera assuré avec l application curriculum 1 sous forme de SMS. 4. Scénario de mise en œuvre Ce qui a été fait avant Initiation à la programmation et l'algorithmique. Connaissance mise en œuvre en amont : - Type de données. Transtypage. Tableaux. Entiers et réels. Chaînes de caractères. - Fonctions et procédures en informatique. - Programmation. Déroulement de la séquence On présente quelques exemples aux élèves en insistant sur le nombre d étapes permettant d obtenir un nombre à un seul chiffre. Les élèves doivent proposer des conjectures Par exemple, y-a-t-il un nombre maximum d'étapes? Il va falloir modéliser le problème pour le transformer en un programme exécutable par un ordinateur. Le programme va être découpé en petites tâches que chacun des groupes devra réaliser sous forme de fonction, comme par exemple : - Extraire un chiffre d un nombre entier pour une position donnée - Décomposer un nombre en chiffres - Stocker les chiffres obtenus dans un tableau - Multiplier des chiffres donnés sous forme d un tableau 1 L application Curriculum est une application Android disponible sur le PlayStore (https://play.google.com/store/apps/details?id=com.curriculum&hl=fr). Elle a été développée par M. LAVAL Boris et permet d évaluer par compétences à l aide d un smartphone.
- Compter le nombre d étapes en utilisant une boucle - Parcourir les entiers et pour chaque entier compter le nombre d'étapes. Pour chaque tâche, il faut préciser la nature de la brique (fonction ou procédure). Il faut aussi définir les variables en jeux, leur type. Il s agit de créer un travail collaboratif. Les étapes précédentes sont données à titre indicatif. Les élèves vont devoir les proposer et construire collectivement un outil pour répondre à leurs questions. Phases Rôle du professeur Rôle de l élève Recherche individuelle : 5 mn Présenter quelques exemples Conjecturer, chercher des exemples d'abord à la main. Débat Animateur Proposer des conjectures. L histoire se termine-t-elle toujours? Si oui, y-a-t-il un nombre maximum d étapes? Travail collectif Travail de groupe Synthèse Mettre en place les briques permettant de réaliser le programme en utilisant les propositions des élèves Guider et accompagner les groupes. Modifier les briques incorrectes et assembler le programme final pour une exécution en classe. Prolongement possible Travailler sur le problème de Syracuse (Conjecture de Collatz). Décrire la démarche permettant de programmer Proposer des briques Construire les fonctions sous forme d algorithme. Ecrire les programmes associés. Exécuter le programme et invalider les conjectures proposées. 5. Evaluation Le travail collectif fût fructueux. Les différents groupes ont fabriqué chacun leur partie sous forme de sous-programmes. C est seulement à la fin que les sous-programmes ont été assemblés sous la forme d un programme. Un élève seul n aurait pas pu mener à bien ce projet, le fait de diviser le problème en sous-problèmes a permis de favoriser une démarche collaborative. Il a fallu parfois renégocier le cahier des charges, par exemple la taille du tableau associée au chiffre. Il y a eu un bug majeur, une simple petite erreur (un «<» au lieu d un ). Le programme ne fonctionnait pas. Il a fallu élaborer une batterie de tests pour trouver le bug. Ce fût l occasion pour les élèves de s approprier le travail des autres. Le programme nous a permis de trouver un nombre en 8 étapes. Les élèves ont alors affirmé qu il ne devait pas exister de nombre maximum d étapes. La conjecture reste ouverte. On a fait des mathématiques autrement. 6. Apport des outils numériques Le numérique intervient sous 3 formes : - résoudre des problèmes mathématiques avec des algorithmes - assurer le suivi des élèves en mode connecté - imposer un travail collaboratif.
Exemple du suivi de l évaluation d un travail fourni par un groupe. Un suivi envoyé par texto avec l application curriculum Programme Java proposé package etape; import java.util.scanner; public class Etape { static void etape(int a){ int i =0; while (a>9){ //Module de conversion i=i+1; System.out.println(a); public static void main(string[] args) { // TODO code application logic here int nb; Scanner saisie= new Scanner(System.in); System.out.println("Saisir le nombre nb :"); nb=saisie.nextint(); etape(nb); Algorithme proposé par un groupe Fonction etape(nb :entier) -> entier DébutFonction Tant que«nb»> 9 decomp(nb) mult(nb) i i+1 Fin Tantque Retourner i FinFonction Commentaire : Il y a non cohérence entre le java et l algorithme fourni par les élèves. L algorithme utilise une fonction alors que le programme java utilise une procédure. Sinon, il s agit d un très bon travail.
7. Annexes Résumé du déroulement des séances et de la solution finale fabriquée par la classe Les questions des élèves après la présentation du problème : - Combien de variables? - Comment décomposer les chiffres? - Comment on obtient un chiffre? - Arrive-t-on toujours à un chiffre? - Quelle est le nombre maximum d'étapes? La question retenue. Les briques sous forme de fonction à traiter en groupe. Un cahier des charges pour un travail en parallèle par les 4 groupes a été créé permettant aux élèves de répondre à la question. Brique 1 : Décomposer un nombre en chiffre Fonction Decomp(n : nombre entier)-->tableau d'entier de taille 100 Brique 2 : Multiplier les chiffres Fonction Mult(Chiffres : Tableau d'entier de taille 100)-->entier Brique 3 : Boucle qui compte le nombre d'étape Fonction Etapes(n : nombre entier)-->entier Brique 4 : Boucle qui teste tout les entiers et affiche nombre d 'étapes trouvées et nombre associé : Le programme principale
Les algorithmes élaborés par les différents groupes Brique 1 : Décomposer un nombre en chiffre Fonction decomp(entrée n : entier)-> tableau d'entier de taille 100 VARIABLES LOCALES: i, j : entiers reste : entier tab : tableau d'entier [0..99] Debut Fonction i 0 TantQue n >= 10^i faire i i+1 Fin TantQue J 0 Pour j allant de i-1 à 0 faire tab[j] n/10^j reste n%10^j n reste Fin Pour Pour j allant de i à 99 faire tab[j] <- -1 Fin Pour Retourner tab Fin Fonction Brique 2 : Multiplier les chiffres Fonction mult(chiffres : Tableau d entier de taille 100) -> entier VARIABLES LOCALES: res, i : Entiers DEBUT i 0 Res 1 Tant que (tableau[i]!= 0) Faire res tableau[i]*res i i+1 Fin tant que Retourne res. Fin Fonction
Brique 3 : compter le nombre d'étapes Fonction etape(nb :entier) -> entier VARIABLES LOCALES: i : entier DébutFonction i 0 Tant que nb > 9 faire decomp(nb) mult(nb) I i+1 Fin Tantque Retourner i FinFonction Brique 4 : Boucle qui teste tous les entiers et affiche le nombre d'étapes trouvé Programme principale qui utilise une boucle infinie Variables : nb, max : entiers Début Fin nb <- 0 max <- 0 Tant que vrai Si max < etape(nb) Alors max <- etape(nb) Afficher "Nombre d'étapes max: ",max," pour le nombre ",nb Fin Si nb=nb+1 Fin Tant Que
Le programme en java public class ProgJava { static int Multi(int tab[]){ int i =0; int res=1; while(tab[i]!=-1){ res = tab[i]*res; i++; return res; static int[] decomp(int n){ int[] tab=new int[100]; int i=0,j=0; int reste; while(n >= Math.pow(10,i)){ i=i+1; for(j=i-1;j>=0;j--){ tab[j]=n/(int)math.pow(10, j); reste=n%(int)math.pow(10, j); n=reste; for(j=i;j<=99;j++){ tab[j]=-1; return tab; static int etape(int a){ int i =0; while (a>9){ a=multi(decomp(a)); i=i+1; return i; public static void main(string[] args) { //Variable int nb, max; //Debut nb=10; max=0; while (true){ if (max<etape(nb)){ System.out.println("Nombre d'étapes max: "+etape(nb)+ "Pour "+nb); max=etape(nb); nb=nb+1;