Aide d algorithme

Réponses à toutes vos questions de la 2nde à la Terminale toutes séries
Barney23
Messages: 3
Enregistré le: 23 Déc 2013, 14:40

Aide d algorithme

par Barney23 » 23 Déc 2013, 15:48

On admet que l algorithme suivant s arrête bien pour tout entier compris entre 0 et 50.
Soit un entier naturel compris entre 0 et 50.
On en prend le double et on ajoute 1.
Si le résultat est un nombre premier, on arrête sinon, on recommence l'opération a partir du nombre obtenue.
1) Écrire l algorithme de façon formalisée
2) A l'aide d'un programme, déterminer quel est l entier n pour lequel le nombre d'étapes avant l arrêt de l algorithme est le plus grand.



Avatar de l’utilisateur
messinmaisoui
Habitué(e)
Messages: 1897
Enregistré le: 24 Oct 2007, 13:52
Localisation: Moselle (57)

par messinmaisoui » 23 Déc 2013, 16:18

Quel est le soucis Barney23 ?

Compréhension de l'énoncé ou soucis avec les algorithmes ?

Si je prends par exemple 7, peux-tu me dire ce que ce programme devrait
me donner comme réponse ?
Si je prends par exemple 8, peux-tu me dire ce que ce programme devrait
me donner comme réponse ?

Vois-tu une relation entre la question 1) et la question 2) ?
Mon avatar me fait peur, est-ce normal docteur ?

Barney23
Messages: 3
Enregistré le: 23 Déc 2013, 14:40

par Barney23 » 23 Déc 2013, 16:21

Je ne comprend pas l'énoncé

Avatar de l’utilisateur
messinmaisoui
Habitué(e)
Messages: 1897
Enregistré le: 24 Oct 2007, 13:52
Localisation: Moselle (57)

par messinmaisoui » 23 Déc 2013, 16:26

Barney23 a écrit:Je ne comprend pas l'énoncé

Ok prenons 8 par exemple

On prend le double et on ajoute 1 : 8 * 2 + 1 = 15 [EDIT] :cry:

Si le résultat est un nombre premier, on arrête sinon, on recommence l'opération a partir du nombre obtenu.

15 n'étant pas premier (15 = 3 * 5)
je recommence l'opération donc je prend le double et j'ajoute 1 : 15 * 2 + 1 = 31

31 est premier ... c'est le résultat que l'on devrait trouver par notre algorithme

Essaye de me donner maintenant le résultat en partant de 7, et de 24 par exemple ...
Mon avatar me fait peur, est-ce normal docteur ?

Barney23
Messages: 3
Enregistré le: 23 Déc 2013, 14:40

par Barney23 » 24 Déc 2013, 00:39

Tu t es tromper 8 c est 8*2+1=17 et 17 est premier
Pour 24 c'est 24*2+1=49 qui l est aussi mais j ai compris l algorithme mais je ne sait pas comment l écrire et encore moins trouver le plus grand nombre

Avatar de l’utilisateur
messinmaisoui
Habitué(e)
Messages: 1897
Enregistré le: 24 Oct 2007, 13:52
Localisation: Moselle (57)

par messinmaisoui » 24 Déc 2013, 08:59

Barney23 a écrit:Tu t es tromper 8 c est 8*2+1=17 et 17 est premier
Pour 24 c'est 24*2+1=49 qui l est aussi mais j ai compris l algorithme mais je ne sait pas comment l écrire et encore moins trouver le plus grand nombre

Exact je vois que tu suis !

Pour 24 c'est 24*2+1=49 =7² donc pas premier
et 49 *2 +1 = 99 qui n'est pas premier
et 99 *2 +1 = 199 qui est premier

Voici un démarrage d'algo, si tu vois des fautes n'hésite
pas à les corriger ... je ne suis pas infaillible

Code: Tout sélectionner
Entrer nombre n

Si (n compris entre 0 et 50)
__ s=0 ; variable pour stocker calculs intermédiaires
__ compteur = 0 ; en combien de boucles, on va trouver notre nombre premier
__ nbprem = "NON" ; initialisation par défaut
__ Tant que ( nbprem = "NON" ) faire
____ s = n*2+1
____ compteur = compteur +1
____ {sous algorithme pour voir si s est premier et renvoyer "OUI" ou "NON" dans variable nbprem}
__ Fin tant que   

__ Afficher "nombre premier détecté boucle : " compteur
__ Afficher "ce nombre premier est " s

Sinon
__ Afficher "n n'est pas compris entre 0 et 50"
Fin si

La partie {sous algorithme pour voir si s est premier et renvoyer "OUI" ou "NON" dans variable nbprem}
reste à faire ...
Mon avatar me fait peur, est-ce normal docteur ?

kangourex
Membre Naturel
Messages: 32
Enregistré le: 21 Nov 2013, 18:39

par kangourex » 24 Déc 2013, 10:34

messinmaisoui a écrit:Exact je vois que tu suis !

Pour 24 c'est 24*2+1=49 =7² donc pas premier
et 49 *2 +1 = 99 qui n'est pas premier
et 99 *2 +1 = 199 qui est premier

Voici un démarrage d'algo, si tu vois des fautes n'hésite
pas à les corriger ... je ne suis pas infaillible

Code: Tout sélectionner
Entrer nombre n

Si (n compris entre 0 et 50)
__ s=0 ; variable pour stocker calculs intermédiaires
__ compteur = 0 ; en combien de boucles, on va trouver notre nombre premier
__ nbprem = "NON" ; initialisation par défaut
__ Tant que ( nbprem = "NON" ) faire
____ s = n*2+1
____ compteur = compteur +1
____ {sous algorithme pour voir si s est premier et renvoyer "OUI" ou "NON" dans variable nbprem}
__ Fin tant que   

__ Afficher "nombre premier détecté boucle : " compteur
__ Afficher "ce nombre premier est " s

Sinon
__ Afficher "n n'est pas compris entre 0 et 50"
Fin si

La partie {sous algorithme pour voir si s est premier et renvoyer "OUI" ou "NON" dans variable nbprem}
reste à faire ...

On va pas se taper 51 saisies aussi. Donc on privilégiera une boucle qui remplira une liste et la liste sera traitée.
ça dépend sur quoi tu dois faire le programme mais sinon il existe des fonctions toute faite qui permet de dire si le nombre est premier ce qui s'écrit While( isPrim(nombre)) Faire

Avatar de l’utilisateur
messinmaisoui
Habitué(e)
Messages: 1897
Enregistré le: 24 Oct 2007, 13:52
Localisation: Moselle (57)

par messinmaisoui » 24 Déc 2013, 11:39

kangourex a écrit:on privilégiera une boucle qui remplira une liste et la liste sera traitée.

Ou juste imbriquer la boucle dans une autre boucle
et "comparer au fur et à mesure" et garder dans une variable
le nombre n pour lequel le nombre d'étapes avant l'arrêt de l algorithme est le plus grand.
Mon avatar me fait peur, est-ce normal docteur ?

 

Retourner vers ✎✎ Lycée

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 73 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite