Bonjour à tous, je vous écris en ce début de rentrée en terminale S pour ma part afin de vous demander de l'aide pour un DM où je peine à répondre. En effet, mon niveau en algorithmique est vraiment moyen et je n'arrive pas à trouver la démarche afin de répondre à une question donnée. Ici, mon professeur de spé maths me demande un DM :
-1 entier >= 0 est dit parfait s'il est la somme de ses diviseurs propres (>= 0 et < lui)
Implémentez un test de perfection et indiquer les parfaits <= 40.
Autant vous dire que je me sens perdu.. Bien entendu, je ne souhaite pas avoir le travail tout mâché mais bien des pistes sur la construction de l'algorithme (lignes, boucle pour/si/compteur) pour ensuite complétez mon travail.
Merci d'avance de m'aider si cela est le cas.
Bien à vous.
Bonsoir,
tu pourrais chercher les diviseurs du nombre en question, les ajouter ensemble, et faire un test pour voir si la somme et le nombre sont égaux.
Mais sachant que je dois trouver tous les nombres parfaits inférieurs ou égaux à 40 je dois prendre n comme nombre de départ et après je fais en fonction? Il n'y a pas de nombre spécifique à étudier
Bonsoir,
la règle d'or est de commencer par des trucs simples et ensuite de les étoffer pour faire ce qu'on demande au final
donc 1ere étape :
écrire un algorithme qui si on lui donne un nombre n en entrée calcule la somme de ses diviseurs et dit s'il est parfait ou pas
ensuite, une fois ça au point, mettre cet algorithme à l'intérieur d'un algorithme plus gros qui fera ce qui est demandé :
pour n de 1 à 40
tester si n est parfait ça c'est le premier algorithme que l'on recopie ici
finpour
Essaie cet algorithme, je l'ai fait rapidement et il peut y avoir une erreur, mais cela tourne autour de cela
Variables
n est un nombre entier
d est un nombre entier
s est un nombre entier
p est un nombre entier
Traitement
n prend la valeur 2
s prend la valeur 0
d prend la valeur 1
Tant que n ≤ 40
Tant que d < n faire
si mod(n, d) = 0 alors
s prend la valeur s + d
d prend la valeur d + 1
Si n = s et si n ≠ 1 alors
afficher n
afficher « est un nombre parfait »
Fin si
Fin Tant que
Fin Tant que
Bonjour Cherchell,
deux "tant que" deux "Si" et seulement 3 "Fin", il en manque un
et à mon avis le test sur "si n = s" est mal placé
et quelques autres petites erreurs d'initialisations mal placées aussi
manque la progression sur n qui reste ici bloqué à 2 éternellement
mais sinon "cela tourne autour de ça", tout à fait
(il faut bien laisser à Matheudebute un peu de boulot de mise au point et de correction )
c'était bien pour ça que je dissociais le test "le nombre n est il parfait" du balayage de toutes les valeurs de n de 1 à 40
on peut même dissocier d'avantage en résolvant successivement :
tester si un nombre est diviseur d'un autre
trouver tous les diviseurs d'un nombre
calculer la somme des diviseurs d'un nombre
tester si un nombre est parfait
et finalement seulement trouver tous les nombres parfaits entre 1 et 40
ces questions successives se "matérialisant" à chaque fois par un algorithme, mis au point et testé séparément
puis inclus dans l'algorithme suivant
c'est finalement bien plus efficace que de commencer par
n = 2
tant que n ...
directement, pour écrire un "gros" algorithme dans lequel finalement on glisse des erreurs partout parce qu'on n'a pas ce fil conducteur de "étape par étape"
D'abord, merci de vos réponses même si je reste un peu perdu je commence à avoir des pistes. Pour trouver si un diviseur est le diviseur d'un autre j'ai trouvé ça :
Lire n
C prend la valeur 0
Pour k allant de 1 à n
Si E(n/k)=n/k
Alors afficher k
C prend la valeur C+1
Fin Si
Fin Pour
Afficher C
Je ne suis pas sûr mais je réfléchis et j'avouerai que je rame un peu vu le temps que je passe dessus je décourage un peu!
trouver si un nombre d est diviseur d'un nombre n :
lire n
lire d
si E(n/k) = n/k
alors afficher "d est un diviseur de n"
sinon afficher "d n'est pas un diviseur de n"
trouver tous les diviseurs de n et dire combien il y en a :
* copier coller malencontreux :
trouver si un nombre d est diviseur d'un nombre n :
lire n
lire d
si E(n/d) = n/d
alors afficher "d est un diviseur de n"
sinon afficher "d n'est pas un diviseur de n"
Pour trouver tous les diviseurs d'un nombre j'ai utilisé cet algo :
N est du type nombre
I est du type nombre
M est du type nombre
Saisir la valeur de N
Lire N
Tant que N<=0 faire
N différent de 0
Lire N
Fin tant que
Afficher les diviseurs de N sont : (oui je dois le faire sur algobox)
Pour I allant de 1 à N
M prend la valeur N%I
Si M=0 alors
Afficher I
Fin SI
Fin Pour
Fin algo
attention que sur Algobox une égalité dans un test s'écrit avec deux signes " = "
si (M == 0)
avec un seul signe = ça ne fait pas du tout ce que tu crois :
ça met la valeur 0 dans M comme un "M prend la valeur 0" puis ça teste si le résultat est non nul (ce qui ne se produit jamais puisque justement on vient de mettre 0 !)
il est fort possible que les versions récentes de Algobox aient même transformé ce truc en erreur signalée.
on peut simplifier :
M prend la valeur N%I
Si M==0 alors
en juste
si N%I == 0 alors
(la variable M est du gâchis)
quoi qu'il en soit les deux algorithmes que tu as "trouvé" pour obtenir la liste des diviseurs d'un nombre sont équivalents (c'est du détail d'écriture)
Merci de tes réponses. Oui j'ai corrigé mes égalités par 2 (==) mais lorsque je test mon algorithme avec les deux étapes que j'ai emboitées, lorsque je lance le test cela me met directement " d n'est pas un diviseur de N" avant même que je rentre N et lorsque je rentre une valeur pour N (par exemple N=6 cela me met 452 comme résultat et je doute que 6 ait 452 diviseurs aha!) Je vais continuer de chercher où j'ai pu faire mon erreur
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :