Algorithme

Retrouver tous les sujets résolus.
SoS-Math(25)
Messages : 1867
Enregistré le : mer. 2 nov. 2011 09:39

Re: Algorithme

Message par SoS-Math(25) » sam. 1 nov. 2014 16:04

Morgan a écrit : Tant que \(D \leq E(\sqrt{n})\) et S=0
Si partie décimale \((\frac{n}{D})\)=0
Alors S prend la valeur 1
Sinon D prend la valeur D+1
Fin Si
Fin Tant que
Si S=0
Alors afficher "true"
Sinon afficher "false"
Fin Si
Ici tu fais ton test sur "n" nom ?

Donc, lorsque tu inclus cela dans ta boucle :
Morgan a écrit : Pour j allant de 2 à n
.
.
.
FinPour
Tu ne fais que tester sur "n" en boucle (donc tu fais (n-2) fois le test sur le même nombre "n" ... n'est-ce pas j qui doit être testé ? (C'est j qui parcourt les nombres de 2 à n....)

Prends un exemple avec n = 6 :
Morgan a écrit : Lire n n = 6
Pour j allant de 2 à n j=2
S prend la valeur 0
D prend la valeur 2
Tant que \(D \leq E(\sqrt{n})\) et S=0 \(2 \leq \sqrt{6}\) et S = 0
Si partie décimale \((\frac{n}{D})\)=0 6/2 = 3
Alors S prend la valeur 1 donc S=1
Sinon D prend la valeur D+1
Fin Si
Fin Tant que On recommence mais S=1 donc fin du "Tant que"
Si S=0 Faux
Alors afficher "true"
Sinon afficher "false" "false" 6 n'est pas premier !
Fin Si
FinPour
On recommence la boucle "Pour" avec une autre couleur


Morgan a écrit : Pour j allant de 2 à n j=3
S prend la valeur 0
D prend la valeur 2
Tant que \(D \leq E(\sqrt{n})\) et S=0 \(2 \leq \sqrt{6}\) et S = 0
Si partie décimale \((\frac{n}{D})\)=0 6/2 = 3
Alors S prend la valeur 1 donc S=1
Sinon D prend la valeur D+1
Fin Si
Fin Tant que On recommence mais S=1 donc fin du "Tant que"
Si S=0 Faux
Alors afficher "true"
Sinon afficher "false" "false" 6 n'est pas premier !
Fin Si
FinPour
On recommence la boucle "Pour" avec une autre couleur

Comprends-tu le problème ?

(Mais tu n'es vraiment pas loin, une petite chose à corriger...)
Morgan

Re: Algorithme

Message par Morgan » sam. 1 nov. 2014 16:31

Est-ce correct ?
Lire n
Pour j allant de 2 à n
j prend la valeur 2+n
S prend la valeur 0
D prend la valeur 2
Tant que D \leq E(\sqrt{n}) et S=0
Si partie décimale (\frac{n}{D})=0
Alors S prend la valeur 1
Sinon D prend la valeur D+1
Fin Si
Fin Tant que
Si S=0
Alors afficher "true"
Sinon afficher "false"
Fin Si
FinPour
SoS-Math(9)
Messages : 6351
Enregistré le : mer. 5 sept. 2007 12:10

Re: Algorithme

Message par SoS-Math(9) » sam. 1 nov. 2014 17:57

Bonsoir Morgan,

Il y a un problème avec ta boucle :

Pour j allant de 2 à n
j prend la valeur 2+n ----> Si tu fais cela ta boucle "pour" ne sert plus à rien car alors j = 2+n > n.
....

SoSMath.
Morgan

Re: Algorithme

Message par Morgan » sam. 1 nov. 2014 18:08

D'accord, merci et là c'est bon ?
Lire n
Pour j allant de 2 à n
j prend la valeur 2+1
S prend la valeur 0
D prend la valeur 2
Tant que D \leq E(\sqrt{n}) et S=0
Si partie décimale (\frac{n}{D})=0
Alors S prend la valeur 1
Sinon D prend la valeur D+1
Fin Si
Fin Tant que
Si S=0
Alors afficher "true"
Sinon afficher "false"
Fin Si
FinPour
SoS-Math(9)
Messages : 6351
Enregistré le : mer. 5 sept. 2007 12:10

Re: Algorithme

Message par SoS-Math(9) » sam. 1 nov. 2014 18:16

Morgan,

Pourquoi veux-tu faire varier j dans ta boucle ? cela ne sert à rien ... à chaque "tour" de la boucle j augmente de 1 ("Pour j allant de 2 à n").

SoSMath.
Morgan

Re: Algorithme

Message par Morgan » sam. 1 nov. 2014 23:17

Mon algorithme est-il correct alors maintenant s'il vous plaît ?
Lire n
Pour j allant de 2 à n
S prend la valeur 0
D prend la valeur 2
Tant que D \leq E(\sqrt{n}) et S=0
Si partie décimale (\frac{n}{D})=0
Alors S prend la valeur 1
Sinon D prend la valeur D+1
Fin Si
Fin Tant que
Si S=0
Alors afficher "true"
Sinon afficher "false"
Fin Si
FinPour
Merci d'avance.
SoS-Math(9)
Messages : 6351
Enregistré le : mer. 5 sept. 2007 12:10

Re: Algorithme

Message par SoS-Math(9) » dim. 2 nov. 2014 12:38

Bonjour Morgan,

Je ne comprends pas ton algorithme ...
Dans ta boucle, tu écris
"S prend la valeur 0
D prend la valeur 2"
Cela veut dire que tu gardes la même valeur pour S et D ... cela ne semble pas cohérent.

Ensuite quand tu calcules "(\frac{n}{D})" dans ta boucle, tu calcules toujours la même chose car n et D ne change pas ....

Essaye de reprendre tranquillement cet algorithme et teste le pour des petites valeurs de n.

SoSMath.
Morgan

Re: Algorithme

Message par Morgan » dim. 2 nov. 2014 14:45

Mon algorithme est-il correct s'il vous plaît ?
Lire n
Pour j allant de 2 à n
S+1 prend la valeur 0
D+1 prend la valeur 2
Tant que D \(\leq\) E(\(\sqrt{n}\)) et S=0
Si partie décimale (\(\frac{n}{D}\))=0
Alors S prend la valeur 1
Sinon D prend la valeur D+1
Fin Si
Fin Tant que
Si S=0
Alors afficher "true"
Sinon afficher "false"
Fin Si
FinPour
Merci d'avance.
SoS-Math(9)
Messages : 6351
Enregistré le : mer. 5 sept. 2007 12:10

Re: Algorithme

Message par SoS-Math(9) » dim. 2 nov. 2014 15:13

Morgan,

Tu ne tiens pas compte des remarques faites ....
De plus dans ton nouvel algorithme les instructions "S+1 prend la valeur 0" et "D+1 prend la valeur 2" n'ont pas de sens ...

Encore une fois, l'initialisation de S et D de se fait pas dans la boucle ...
et quand tu calcules "(\frac{n}{D})" dans ta boucle, tu calcules toujours la même chose car n et D ne change pas ....

A quoi sert la variable D dans ton algorithme ? Je ne vois pas ... Peut-être que tu confonds avec la variable j ?

SoSMath.
Morgan

Re: Algorithme

Message par Morgan » dim. 2 nov. 2014 15:21

Mon algorithme est-il correct s'il vous plaît ?
Lire n
S prend la valeur 0
j prend la valeur 2
Pour j allant de 2 à n
Tant que j \(\leq\) E(\(\sqrt{n}\)) et S=0
Si partie décimale (\(\frac{n}{j}\))=0
Alors S prend la valeur 1
Sinon j prend la valeur j+1
Fin Si
Fin Tant que
Si S=0
Alors afficher "true"
Sinon afficher "false"
Fin Si
FinPour
Merci d'avance.
SoS-Math(9)
Messages : 6351
Enregistré le : mer. 5 sept. 2007 12:10

Re: Algorithme

Message par SoS-Math(9) » dim. 2 nov. 2014 15:58

Morgan,

C'est mieux ...
L'instruction "j prend la valeur 2" ne sert à rien ....
L'instruction "Sinon j prend la valeur j+1" ne sert à rien .... car dans une boucle avec "pour" la variable (ici j) augment de 1 à chaque "tour de la boucle".

SoSMath.
Morgan

Re: Algorithme

Message par Morgan » dim. 2 nov. 2014 16:18

Mon algorithme est-il correct s'il vous plaît ?
Lire n
S prend la valeur 0
j prend la valeur 2
Pour j allant de 2 à n
Tant que j \(\leq E(\sqrt{n}\)) et S=0
Si partie décimale (\(\frac{n}{j}\))=0
Alors S prend la valeur 1
Sinon j prend la valeur j+1
Fin Si
Fin Tant que
Si S=0
Alors afficher "true"
Sinon afficher "false"
Fin Si
FinPour
Merci d'avance.
sos-math(21)
Messages : 10401
Enregistré le : lun. 30 août 2010 11:15

Re: Algorithme

Message par sos-math(21) » dim. 2 nov. 2014 16:38

Bonjour,
Ton affectation j prend la valeur j+1, ne doit pas être incluse dans la structure conditionnelle sinon tu risques de ne jamais avancer : ta boucle ne va pas évoluer car ton compteur va rester bloqué.
Il faut sortir cette commande du SI.... et tu n'as donc pas besoin de sinon.
Bon courage
Morgan

Re: Algorithme

Message par Morgan » dim. 2 nov. 2014 17:17

Mon algorithme est-il correct s'il vous plaît ?
Lire n
S prend la valeur 0
j prend la valeur 2
Pour j allant de 2 à n
Tant que j \(\leq E(\sqrt{n}\)) et S=0
Si partie décimale (\(\frac{n}{j}\))=0
Alors S prend la valeur 1
Fin Si
j prend la valeur j+1
Fin Tant que
Si S=0
Alors afficher "true"
Sinon afficher "false"
Fin Si
FinPour
Merci d'avance.
SoS-Math(25)
Messages : 1867
Enregistré le : mer. 2 nov. 2011 09:39

Re: Algorithme

Message par SoS-Math(25) » dim. 2 nov. 2014 17:29

Bonjour Morgan,

Tu dois fonctionner étape par étape et ne pas diffuser des algorithmes comme cela.

Reprends les choses une à une.
Morgan a écrit : Lire n
S prend la valeur 0
D prend la valeur 2
Tant que \(D \leq E(\sqrt{n})\) et S=0
Si partie décimale \((\frac{n}{D})\)=0
Alors S prend la valeur 1
Sinon D prend la valeur D+1
Fin Si
Fin Tant que
Si S=0
Alors afficher "true"
Sinon afficher "false"
Fin Si
Voici le tout premier algorithme que tu voulais. Il demande un nombre "n" et renvoie si ce nombre "n" est premier ou non.

As-tu remarqué que la boucle "Pour" est inutile ici ?

Maintenant, que souhaites-tu exactement ?

Tu veux, je crois, un algorithme qui renvoie tous les nombres premiers plus petits que "n".

Si tu utilise une boucle "Pour j allant de 2 à n" alors du dois faire le test précédent sur chaque nombre "j" allant de 2 à "n" et pas sur "n" !

Lis bien les remarques et comprends tout cela avant de relancer sur la toile un nouvel algorithme.

Bon courage !
Répondre