Besoin d'aide algo, initiation!

Besoin d'aide algo, initiation! - Divers - Programmation

Marsh Posté le 22-09-2008 à 15:24:29    

Bonjour je suis débutant en programmation, et je dois faire un algorithme (en français) qui me permet de connaitre tous les facteurs d'une nombre je ne vois pas comment faire, ce qui me gène, c'est comment écrire que mon nombre (n) doit etre diviser par des entiers, stoker ces entiers et continuer a essayer des divisions sur ce qu'il me reste... merci de votre aide

Reply

Marsh Posté le 22-09-2008 à 15:24:29   

Reply

Marsh Posté le 22-09-2008 à 15:39:46    

Désolé d'être péremptoire comme ca, mais on apprend plus la décomposition en nombre premiers à l'école?


---------------
Petit guide Kerberos pour l'administrateur pressé
Reply

Marsh Posté le 22-09-2008 à 15:55:37    

lol! si si, mais comment le traduire!! avec les formulations correctes!!!  
par exemple n un entier, je dois tester des divisions sur n, chaque fois que ca me donne un nombre entier je dois le stoker ensuite reprendre le résultat et le rediviser par le nombre suivant, etc... a la fin je dois avoir une liste de tout les nombres qui divisent n... ca se traduit comment en algo ca? quelle formulation utiliser?  
 
autre chose si je veux par exemple diviser n par des nombre de 1 à 100 et m'arreter lorsque le resultat est un entier je peux ecrire :  
 
n,s,i :  Entier
tant que s different d'un entier
  faire  
     s<-n/i  
     pour i de 1 à 100 [pas 1]
....

Reply

Marsh Posté le 22-09-2008 à 16:05:17    

Je ne connais pas de formulation correcte. Un algo c'est juste un moyen de détailler un procédé, en faisant abstraction complète de tout l'aspect technique, dans un langage intelligible.

 

Exemple : http://fr.wikipedia.org/wiki/Quicksort
Comme tu peux le voir dans l'algo détaillé sur la page du wiki, il n'y a strictement rien de technique.


Message édité par Elmoricq le 22-09-2008 à 16:05:30
Reply

Marsh Posté le 22-09-2008 à 23:02:46    

en genreal on peut utiliser loperateur modulo qui calcule le reste de la division euclidienne de a par b, quand il vaut 0 cest que a divise b
ensuite tu fait exactement comme tu procederais a la main...

Reply

Marsh Posté le 25-09-2008 à 23:04:35    

à mon avis, l'algo recherché c'est pas tout à fait celui de guigui783
 
je ferais pas "pour de 1 à 100", mais "pour de 2 à n avec un pas de 1
 
et quand ça tombe juste, on reborne la boucle n/i histoire de pas itérer pour rien sur des diviseur potentiels impossible, et on teste n/i en reprenant le même i car je pense qu'il faut dire que "42 = 2 * 3 * 7" et non "42 divisible par 2, 3, 7, 6, 14, 21, 42", et que "36 = 2 * 2 * 3 * 3"
 
a noter que si en sortie de boucle tu n'as rien trouvé en bornant avec racine carrée, alors c'est un nombre premier, donc divisible seulement par lui-même.
 
et tu peux optimiser légèrement en testant à la main la division par 2, et en modifiant la boucle pour partir de 3 avec un pas de 2, histoire de ne pas tester inutilement tous les nombres pairs


Message édité par MagicBuzz le 25-09-2008 à 23:40:36
Reply

Marsh Posté le 25-09-2008 à 23:52:22    

En fait, l'optimisation avec le pas de 2 est chiante, parcequ'il faut la tester tant que le nombre est divisible par 2, sinon tu te retrouves avec 16 = 2 * 8 :D

Reply

Marsh Posté le 26-09-2008 à 00:57:22    

Boarff, c'est une boucle en plus avant qui divise par deux tant que le nombre est pair, c'est pas mortel non plus


---------------
Petit guide Kerberos pour l'administrateur pressé
Reply

Marsh Posté le 26-09-2008 à 11:48:50    

oui, clairement pas, juste que ça allourdi l'algo

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed