Algorithme

Retrouver tous les sujets résolus.
Morgan

Algorithme

Message par Morgan » ven. 31 oct. 2014 23:57

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.
SoS-Math(25)
Messages : 1867
Enregistré le : mer. 2 nov. 2011 09:39

Re: Algorithme

Message par SoS-Math(25) » sam. 1 nov. 2014 10:33

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 !
Morgan

Re: Algorithme

Message par Morgan » sam. 1 nov. 2014 10:55

Oui, effectivement je me suis trompé ! Merci beaucoup !
En fait, je voudrais simplement écrire un algorithme sans le coder.
Merci d'avance.
SoS-Math(25)
Messages : 1867
Enregistré le : mer. 2 nov. 2011 09:39

Re: Algorithme

Message par SoS-Math(25) » sam. 1 nov. 2014 11:28

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 !
Morgan

Re: Algorithme

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

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.
SoS-Math(25)
Messages : 1867
Enregistré le : mer. 2 nov. 2011 09:39

Re: Algorithme

Message par SoS-Math(25) » sam. 1 nov. 2014 12:46

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 ?
Morgan

Re: Algorithme

Message par Morgan » sam. 1 nov. 2014 13:28

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.
SoS-Math(25)
Messages : 1867
Enregistré le : mer. 2 nov. 2011 09:39

Re: Algorithme

Message par SoS-Math(25) » sam. 1 nov. 2014 13:44

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 !
Morgan

Re: Algorithme

Message par Morgan » sam. 1 nov. 2014 14:21

D'accord, en fait, il faut écrire un algorithme qui donne les m premiers nombres premiers.
C'est bien ça ?
SoS-Math(25)
Messages : 1867
Enregistré le : mer. 2 nov. 2011 09:39

Re: Algorithme

Message par SoS-Math(25) » sam. 1 nov. 2014 14:47

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 ?
Morgan

Re: Algorithme

Message par Morgan » sam. 1 nov. 2014 14:50

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.
SoS-Math(25)
Messages : 1867
Enregistré le : mer. 2 nov. 2011 09:39

Re: Algorithme

Message par SoS-Math(25) » sam. 1 nov. 2014 15:00

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 !
Morgan

Re: Algorithme

Message par Morgan » sam. 1 nov. 2014 15:19

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
SoS-Math(25)
Messages : 1867
Enregistré le : mer. 2 nov. 2011 09:39

Re: Algorithme

Message par SoS-Math(25) » sam. 1 nov. 2014 15:38

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 !
Morgan

Re: Algorithme

Message par Morgan » sam. 1 nov. 2014 15:50

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
Répondre