Programmer avec le langage Linotte
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Programmer avec le langage LinotteConnexion

Besoin d'un conseil sur la programmation en Linotte ?

Le Deal du moment :
Réassort du coffret Pokémon 151 ...
Voir le deal

descriptionDécomposition en facteurs premiers EmptyDécomposition en facteurs premiers

more_horiz
Voici un nouveau livre, il décompose un nombre en facteurs premiers.

descriptionDécomposition en facteurs premiers EmptyDécomposition en facteurs premiers

more_horiz
j'ai l'impression que le livre ne fonctionne pas, tu as du poster une mauvaise version !

j'ai entré 12 et il affiche :
12 = * 2^1 * 3^1

du coup , j'ai réécris le livre (désolé, j'ai pas pu m'empecher :;
): )
il n'y avait pas grand chose à changer :
- il manquuait en fait une ligne pour incrémenter la puissance que j'ai initialisé à 0 au lieu de 1
- et la condition pour l'affichage du signe * ne marchait pas ..

donc voici le nouveau livre :

Code:

Décomposition en facteurs premiers :

Algorithme :

Rôles :

n est un nombre
diviseur est un nombre
nbfacteurs est un nombre valant 0
a est un nombre
puissance est un nombre valant 0
resultat est un texte vide
flag premier est un drapeau valant faux
Actions :

demande n
resultat vaut n + " = "
a vaut n
pour diviseur de 2 à entier (n/2) , lis
tant que a mod diviseur est égal à 0, lis
("a est premier")
flag premier vaut vrai
puissance vaut puissance + 1
nbfacteurs vaut nbfacteurs + 1
a vaut a / diviseur
ferme
si flag premier est vrai alors lis
si nbfacteurs est plus grand que puissance alors resultat vaut resultat + " * "
resultat vaut resultat + diviseur + "^" + puissance
puissance vaut 0
flag premier vaut faux
ferme
ferme
affiche resultat
termine

descriptionDécomposition en facteurs premiers EmptyDécomposition en facteurs premiers

more_horiz
merci ! je vais revoir ça !

descriptionDécomposition en facteurs premiers EmptyDécomposition en facteurs premiers

more_horiz
C'est corrigé :

Code:

Décomposition en facteurs premiers :


Algorithme :

Rôles :

n est un nombre
diviseur est un nombre
nbfacteurs est un nombre valant 0
a est un nombre
puissance est un nombre valant 1
resultat est un texte vide
flag premier est un drapeau valant faux
Actions :

demande n
a vaut n
resultat vaut n + " = "
pour diviseur de 2 à entier (n/2) , lis
tant que a mod diviseur est égal à 0, lis
("a est premier")
flag premier vaut vrai
a vaut a / diviseur
ferme
si flag premier est vrai alors lis
nbfacteurs vaut nbfacteurs + 1
si nbfacteurs est plus grand que 1 alors resultat vaut resultat + " * "
resultat vaut resultat + diviseur + "^" + puissance
puissance vaut 1
flag premier vaut faux
ferme
ferme
affiche resultat
termine

descriptionDécomposition en facteurs premiers EmptyDécomposition en facteurs premiers

more_horiz
Une suggestion pour accélérer le programme : en théorie, dans la boucle, il suffirait que le diviseur aille jusqu'à racine(a), car si a n'est divisible par aucun diviseur inférieur ou égal à sa racine, c'est qu'il est premier...

Sur des nombres avec des gros facteurs, ce serait beaucoup plus rapide, mais cela nécessite d'adapter un peu le mode d'affichage...

descriptionDécomposition en facteurs premiers EmptyDécomposition en facteurs premiers

more_horiz
une autre possibilité aurait été de changer la boucle:
"pour diviseur de 2 à entier (n/2) , lis"
par
"tant que a est différent de 1 , lis
ajoute 1 dans diviseur"

comme ça, pour un grand nombre (exemple 256 = 2^8 )
il suffit d'aller jusqu'à diviseur = 2
alors que si on teste tous les nombres jusqu'à RACINE(256), il faudrait aller jusqu'à DIVISEUR=16.
ou si on teste tous les nombres jusqu'à 256/2 , il faudrait alors aller jusqu'à DIVISEUR=128.

descriptionDécomposition en facteurs premiers EmptyDécomposition en facteurs premiers

more_horiz
Effectivement c'est encore mieux comme ça.

descriptionDécomposition en facteurs premiers EmptyRe: Décomposition en facteurs premiers

more_horiz
privacy_tip Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
power_settings_newSe connecter pour répondre