Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Difficultés de programmation sur un test de nombre premier
Mine Hors ligne Membre Points: 3 Défis: 0 Message

Difficultés de programmation sur un test de nombre premier

Posté le 26/05/2017 16:27

Bonjour ou bonsoir, voici un programme qui me pose pas mal de problème.
Celui-çi m'a été demandé dans le cadre d'un cours de spé maths. J'ai déjà demandé à des amis de m'aider mais aucun d'entre eux n'ont su me trouver l'erreur (qui est peut-être bête ). Lors de la mise en marche du programme je n'ai aucune source d'erreur, le programme se fait sans problème. Mais je suis certain à 100% qu'il me saute la boucle While. J'utilise rarement des boucles While, il est possible qu'il y ait une erreur dans son écriture. Toute aide est la bienvenue, merci :).

1→C
"Rentrer le chiffre N à tester"
?→N
If N<2
Then "Non, N≥2!"
Stop
Else
IfEnd
While List8 [C]<√N            //List8 est une liste dans ma calculette où se situe les 20 premiers nombres premiers
N/List 8 [C]→P
C+1→C
If Int P=P                //La formule Int ne donne que la valeur entière du nombre, ce n'est pas un arrondi(ex:Int 4.7 donne 4)
Then ClrText
N◢
"N'est pas premier"
Stop
Else
IfEnd
WhileEnd
ClrText
N◢
"Est premier"



Eirblast Hors ligne Membre Points: 122 Défis: 4 Message

Citer : Posté le 26/05/2017 17:05 | #



Lbl 0
1→C
"Rentrer le chiffre N à tester"
?→N
If N<2
Then "Non, N≥2!"
ClrText
Goto 0
IfEnd
Isz C
While List8 [C<√N
N/List 8 [C→P
If Int P=P
Then ClrText
N◢
"N'est pas premier"
Else ClrText
N◢
"Est premier"
IfEnd
WhileEnd

sa marche je viens de le tester ! 8)
:^)
Lephenixnoir Hors ligne Administrateur Points: 24621 Défis: 170 Message

Citer : Posté le 26/05/2017 17:24 | #


Pas vraiment, Eirblast. Si tu utilises Goto à l'intérieur d'une condition, tu n'en sors jamais ; et ça finira par te causer des problèmes. Toujours utiliser pour réaliser des Goto conditionnels.

Deux notes rapides pour Mine:
- Utilise la balise appropriée pour insérer du code (le bouton ) ;
- Les Else sont facultatifs. Si tu n'as rien à mettre dedans, tu n'es pas obligé de les écrire.

Sinon, j'ai testé ton programme sur ma machine en pré-remplissant la liste 8 avec quelques nombres premiers et je n'ai pas eu de problème pour les tests : j'en ai effectué quelques-uns avec de bons résultats. L'algorithme semble bon par ailleurs ; en fait, on ne sait pas trop quel est le problème...

Mine a écrit :
Mais je suis certain à 100% qu'il me saute la boucle While

Qu'est-ce qui te le fait penser ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Mine Hors ligne Membre Points: 3 Défis: 0 Message

Citer : Posté le 26/05/2017 17:45 | #


Oulah, c'est embêtant ça, pour moi, il ne fonctionne pas toujours, en rentrant 25 par exemple le programme me met qu'il est premier... Par contre en utilisant un exemple du cours: 247 qui lui n'est pas premier, là le programme m'annonce bien la bonne réponse.
Je me disais que le calcul était drôlement rapide mais je n'avais essayé qu'avec 25. C'est idiot car il ne va vérifier que 2 et 3 donc le fait d'obtenir un résultat faux m'a fait penser à cela.

Néanmoins je pense avoir trouvé mon erreur. Je viens de changer While List 8[C]<√N en While List 8[C]≤√N et là eureka, 25 n'est plus premier (mauvaise lecture de mon cours, j'écrirai moins vite la prochaine fois).

Merci pour votre réponse (et pour votre question sans laquelle je n'aurai pas trouvé pourquoi il ne fonctionnait pas)
Lephenixnoir Hors ligne Administrateur Points: 24621 Défis: 170 Message

Citer : Posté le 26/05/2017 18:07 | #


Ah, en effet. J'ai rentré ≤ en recopiant... voyant venir le problème j'ai vérifié, mais en fait tu n'avais pas besoin de mon aide.

Note à part : tu peux écrire un tel programme sans avoir la liste 8 pré-remplie : soit en la remplissant au fur et à mesure, soit en testant un peu plus de diviseurs. Généralement, ce sera une meilleure idée car on ne pensera pas toujours à vérifier que la liste est suffisamment remplie pour le nombre que l'on veut tester
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 87 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd