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
-
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.
-
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é
-
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]
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
-
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
-
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 ?
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 73 invités