Flok Posted September 25, 2014 Share Posted September 25, 2014 Bonsoir à tous ! Pour mon TIPE, j'essaye d'écrire un programme qui forme toutes les combinaisons possibles de mots à partir d'une liste de mots. Je vous donne un exemple : ['flok','consomac'] renverrait ['flok','consomac','flokconsomac',consomacflok'] C'est très facile de le faire pour un nombre de mots choisi auparavant, mais j'aimerais qu'on puisse le faire avec un nombre n de mots... Ci-dessous la version 5 mots, avec des boucles for, mais je ne peux pas faire une infinité de boucles for, malheureusement Si vous avez une idée d'algorithme, pas forcément en Python, mais juste comment remplacer plein de boucles for imbriquées, svp Merci ! Quote Link to comment Share on other sites More sharing options...
Guest Ewilan Posted September 25, 2014 Share Posted September 25, 2014 Bonsoir à tous ! Pour mon TIPE, j'essaye d'écrire un programme qui forme toutes les combinaisons possibles de mots à partir d'une liste de mots. Je vous donne un exemple : ['flok','consomac'] renverrait ['flok','consomac','flokconsomac',consomacflok'] C'est très facile de le faire pour un nombre de mots choisi auparavant, mais j'aimerais qu'on puisse le faire avec un nombre n de mots... Ci-dessous la version 5 mots, avec des boucles for, mais je ne peux pas faire une infinité de boucles for, malheureusement [Grosse screenshot] Si vous avez une idée d'algorithme, pas forcément en Python, mais juste comment remplacer plein de boucles for imbriquées, svp Merci ! Toi aussi tu fais prepa ?! Mais tout le monde est en math sup math spé, ici !! ;-) Malheureusement, je peux pas t'aider (on a commence le python cette semaine, chez nous, et vu que personne n'y comprend rien on n'est pas prêt de faire des vrais programmes...), mais j'aimerais savoir comment ce truc s'intègre à un TIPE... Quote Link to comment Share on other sites More sharing options...
Stef38 Posted September 25, 2014 Share Posted September 25, 2014 Tu fais un appel récursif. Au rang n tu fais une boucle for qui te placera au début de ta chaine le premier mot, qui l'enlève de la liste, et tu rappelles ton programme au rang n-1. Avec Python ça peut se faire avec des fonctions. C'est le classique de la fonction factorielle, si tu cherches un peu, tu ne devrais pas avoir de mal à trouver, hésite pas à dire ou tu en es, mais ça n'est pas trop difficile normalement. Bonne chance. Quote Link to comment Share on other sites More sharing options...
Flok Posted September 25, 2014 Author Share Posted September 25, 2014 Tu fais un appel récursif. Au rang n tu fais une boucle for qui te placera au début de ta chaine le premier mot, qui l'enlève de la liste, et tu rappelles ton programme au rang n-1. Avec Python ça peut se faire avec des fonctions. C'est le classique de la fonction factorielle, si tu cherches un peu, tu ne devrais pas avoir de mal à trouver, hésite pas à dire ou tu en es, mais ça n'est pas trop difficile normalement. Bonne chance. J'ai du mal à penser récursif... Je vais essayer de voir comment on peut faire ce programme en récursif, merci ! Quote Link to comment Share on other sites More sharing options...
Stef38 Posted September 25, 2014 Share Posted September 25, 2014 Un prépa qui n'aime pas la récursivité, t'es pas en math au moins? Quote Link to comment Share on other sites More sharing options...
Flok Posted September 25, 2014 Author Share Posted September 25, 2014 (edited) Un prépa qui n'aime pas la récursivité, t'es pas en math au moins? Si si ! (J'ai toujours pas trouvé comment faire en récursif) Edited September 25, 2014 by Flok Quote Link to comment Share on other sites More sharing options...
Stef38 Posted September 25, 2014 Share Posted September 25, 2014 Ben tu vois pas que tu fais toujours la même chose avec tes boucles for, donc tu n'en fais plus qu'une et tu rappelles ton programme. Quote Link to comment Share on other sites More sharing options...
Sethenès Posted September 25, 2014 Share Posted September 25, 2014 Il y a aussi moyen sans récursivité. Dim Pointeur[N] as integer, C as integer dim h as boolean, i as boolean do while h = true i = false C = 0 do while i = false if Pointeur[C] < N then Pointeur[C] = Pointeur[C] + 1 i = false else C = C+1 if C <= N then Pointeur[C] = 0 C = C + 1 else i = false h = false endif endif loop if h = true then (probablement optimisable) /* ici faire une boucle qui ajoute les mots Mots[Pointeur[C]] */ endif loop Quote Link to comment Share on other sites More sharing options...
Stef38 Posted September 25, 2014 Share Posted September 25, 2014 Dommage de donner la solution, c'est pas très pédago Quote Link to comment Share on other sites More sharing options...
Stef38 Posted September 25, 2014 Share Posted September 25, 2014 Enfin une solution... Quote Link to comment Share on other sites More sharing options...
Klaffh Posted September 25, 2014 Share Posted September 25, 2014 (edited) Désolé, j'avais mis une connerie. Edited September 25, 2014 by Klaffh Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.