Page 1 sur 3

Algorithme

Posté : ven. 31 oct. 2014 23:57
par Morgan
Bonjour, on me demande d'écrire un algorithme qui :
-demande la saisie d'un entier naturel n supérieur ou égal à 2 ;
-teste, pour i allant de 2 à E(\(\sqrt{n}\)) de 1 en 1, si i divise n et renvoie true si l'entier n est premier et false sinon.
Ce que j'ai fait :
Lire n
0 prend la valeur S
2 prend la valeur D
Tant que D\(\leq\)partie entière(\(\sqrt{n}\)) et S=0
Si partie décimale(\(\frac{n}{D}\))=0
Alors 1 prend la valeur S
Sinon D+1 prend la valeur D
Fin Tant que
Fin Si
Si S=0
Alors afficher "true"
Sinon afficher "false"
Fin Si
Mais par contre je n'arrive pas à coder un algorithme qui :
-demande la saisie d'un entier naturel m ;
-renvoie, pour j allant de 0 à m de 1 en 1, la réponse du test de primalité que j'ai établi de l'entier R(j).
Pourriez-vous m'aider s'il vous plaît ?
Merci d'avance.

Re: Algorithme

Posté : sam. 1 nov. 2014 10:33
par SoS-Math(25)
Bonjour Morgan,

L'ensemble de ton algorithme est correct mais il y a des erreurs :
Morgan a écrit : 0 prend la valeur S
2 prend la valeur D
.
C'est plutôt l'inverse non ? S prend la valeur 0 et .... de même pour S et D dans la boucle "tant que"
Morgan a écrit : Tant que D\(\leq\)partie entière(\(\sqrt{n}\)) et S=0
Si partie décimale(\(\frac{n}{D}\))=0
Alors 1 prend la valeur S
Sinon D+1 prend la valeur D
Fin Tant que
Fin Si
Il y a une inversion à la fin, tu mets fin à ta boucle avant de finir le "Si".

Pour coder, cela dépend du support... Quelle calculatrice ? Quel logiciel ?

A bientôt !

Re: Algorithme

Posté : sam. 1 nov. 2014 10:55
par Morgan
Oui, effectivement je me suis trompé ! Merci beaucoup !
En fait, je voudrais simplement écrire un algorithme sans le coder.
Merci d'avance.

Re: Algorithme

Posté : sam. 1 nov. 2014 11:28
par SoS-Math(25)
Dans certains langages, on utilise "Prompt n" pour demander une valeur à affecter à la variable n, ou encore Input "n=",n

Dans Algobox, on utilise "Lire n", comme tu l'as écrit...

Si tu reste sur papier sans savoir sur quel support tu vas coder, le langage que tu utilises est très bien.

A bientôt !

Re: Algorithme

Posté : sam. 1 nov. 2014 12:18
par Morgan
Mon algorithme est-il correct s'il vous plaît ?
Lire m
Pour n allant de 0 à m
d prend la valeur 2
Tant que partie décimale(\(\frac{n}{d}\))>0 et d\(\leq\)\(\sqrt{n}\)
d prend la valeur d+1
Fin Tant que
Si partie décimale(\(\frac{n}{d}\))=0 ou n=1
Alors afficher "n'est pas premier"
Sinon afficher "est premier"
FinSi
FinPour
Merci d'avance.

Re: Algorithme

Posté : sam. 1 nov. 2014 12:46
par SoS-Math(25)
Je ne comprends pas vraiment ce que tu souhaites obtenir.

Veux-tu un algorithme qui renvoie tous les nombres premiers jusqu'à m ?

Prends le cas n=2 dans ta boucle "Pour" :

d=2
Tant que partie décimale\((\frac{n}{d})>0\) et... Faux car 2/2 = 1

Fin Tant que

Si partie décimale\((\frac{n}{d})=0\) ou n=1 ... Vrai car 2/2 = 1
Alors afficher "n'est pas premier"

2 n'est-il pas premier ?

Que souhaites-tu obtenir exactement ?

Re: Algorithme

Posté : sam. 1 nov. 2014 13:28
par Morgan
Merci de m'avoir répondu, je souhaite obtenir un algorithme qui :
-demande la saisie d'un entier naturel m ;
-renvoie, pour j allant de 0 à m de 1 en 1, la réponse du test de primalité que j'ai établi de l'entier R(j).
Merci d'avance.

Re: Algorithme

Posté : sam. 1 nov. 2014 13:44
par SoS-Math(25)
C'est bien ce que je pensais.

Ton algorithme doit donc lister les nombres premiers inférieurs ou égaux à m... c'est cela ?

Pourquoi ne pas utiliser ton premier algorithme (en corrigeant les erreurs) en remplaçant n par j ?

A bientôt !

Re: Algorithme

Posté : sam. 1 nov. 2014 14:21
par Morgan
D'accord, en fait, il faut écrire un algorithme qui donne les m premiers nombres premiers.
C'est bien ça ?

Re: Algorithme

Posté : sam. 1 nov. 2014 14:47
par SoS-Math(25)
Je ne comprends plus... Pourquoi me poses-tu cette question ?

Ton souhait était le suivant :
Morgan a écrit :je souhaite obtenir un algorithme qui :
-demande la saisie d'un entier naturel m ;
-renvoie, pour j allant de 0 à m de 1 en 1, la réponse du test de primalité que j'ai établi de l'entier R(j).
Merci d'avance.
Cela ne donne pas les m premiers nombres premiers, cela donne tous les nombres premiers qui sont inférieurs ou égaux à m.

Par exemple, si m = 6, alors tu souhaites (je crois comprendre) renvoyer :

"2 est premier"
"3 est premier"
"5 est premier"

N'est-ce pas cela ?

Re: Algorithme

Posté : sam. 1 nov. 2014 14:50
par Morgan
Oui, effectivement c'est ce que je souhaite.
Vous pourriez m'aider s'il vous plaît car je suis un peu perdu.
Merci d'avance.

Re: Algorithme

Posté : sam. 1 nov. 2014 15:00
par SoS-Math(25)
Tu as fais le plus dur avec ton tout premier algorithme.
Morgan a écrit : -demande la saisie d'un entier naturel n supérieur ou égal à 2 ;
-teste, pour i allant de 2 à E(\(\sqrt{n}\)) de 1 en 1, si i divise n et renvoie true si l'entier n est premier et false sinon.

Lire n
0 prend la valeur S
2 prend la valeur D
Tant que D\(\leq\)partie entière(\(\sqrt{n}\)) et S=0
Si partie décimale(\(\frac{n}{D}\))=0
Alors 1 prend la valeur S
Sinon D+1 prend la valeur D
Fin Tant que
Fin Si
Si S=0
Alors afficher "true"
Sinon afficher "false"
Fin Si
Ici ton algorithme teste si n est premier ou non.

Reprends-le, corrige les erreurs :
SoS-Math(25) a écrit : L'ensemble de ton algorithme est correct mais il y a des erreurs :
Morgan a écrit : 0 prend la valeur S
2 prend la valeur D
.
C'est plutôt l'inverse non ? S prend la valeur 0 et .... de même pour S et D dans la boucle "tant que"
Morgan a écrit : Tant que D\(\leq\)partie entière(\(\sqrt{n}\)) et S=0
Si partie décimale(\(\frac{n}{D}\))=0
Alors 1 prend la valeur S
Sinon D+1 prend la valeur D
Fin Tant que
Fin Si
Il y a une inversion à la fin, tu mets fin à ta boucle avant de finir le "Si".
!
Ensuite, tu utiliseras cet algorithme sur chaque nombre j allant de 2 à m...

Bon courage !

Re: Algorithme

Posté : sam. 1 nov. 2014 15:19
par Morgan
D'accord, merci.
Est-ce correct ?
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
FinPour
Alors afficher "true"
Sinon afficher "false"
Fin Si

Re: Algorithme

Posté : sam. 1 nov. 2014 15:38
par SoS-Math(25)
C'est l'idée...

Sauf qu'ici, la boucle "Pour j allant de 2 à n" ne sert à rien car tu testes seulement si n est premier :
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
De plus, tu mets fin à ta boucle "Pour" en plein milieu d'un "Si"... pourquoi ? :
Morgan a écrit : Si S=0
FinPour
Alors afficher "true"
Sinon afficher "false"
Fin Si
Écris bien le code juste pour tester si n est premier (sans utiliser la boucle "Pour j allant de 2 à n").

Ensuite, une fois que ce code sera juste, tu pourras l'inclure dans ta boucle "Pour n allant de 2 à m" et tester si chacun des nombre n allant de 2 à m est premier...

Un travail à la fois !

Re: Algorithme

Posté : sam. 1 nov. 2014 15:50
par Morgan
Comme ça ?
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