Programme en Ada sur les nombres premiers !
AdaNoob
-
Adanoob -
Adanoob -
Bonjour,
J'ai essayé de faire un programme qui verifie si un nombre que l'on entre dans le programme est un nombre premier ou non. (pour info il faut pour ca, diviser le nombre choisi par tous les entiers allant de 2 à sa racine carrée)
Voila le code :
Mes soucis sont :
- J'aimerai comprendre et essayer de trouver une solution puisque ce programme ne marche pas avec les multiples de 5 et le chiffre 9 (plusieurs tentatives).
- Et j'aimerai lorsque le nombre n'est pas premier, retirer la phrase "oui ce nombre est bien premier"
Merci de votre aide !!
J'ai essayé de faire un programme qui verifie si un nombre que l'on entre dans le programme est un nombre premier ou non. (pour info il faut pour ca, diviser le nombre choisi par tous les entiers allant de 2 à sa racine carrée)
Voila le code :
with ada.text_IO;use ada.text_IO; with ada.float_text_IO;use ada.float_text_IO; with ada.integer_text_IO;use ada.integer_text_IO; with Ada.Numerics.Elementary_Functions;use Ada.Numerics.Elementary_Functions; procedure premiers is reste:integer; nombre_premier:float; X:float; begin loop put("Donnez moi un nombre et je vous dirais s'il est premier : "); get(nombre_premier); put(integer(nombre_premier)); --"integer" sert à enlever la puissance de 10 à l'affichage du nombre-- X:=SQRT(nombre_premier); for i in 2..integer(X) loop reste:=integer(nombre_premier) rem integer(i); exit when reste/=0; --ne fonctionne pas pour les multiples de 5 et pour le chiffre 9, pourquoi ?-- put(" : non ce nombre n'est pas premier"); end loop; put(" : oui ce nombre est bien un nombre premier"); --je cherche à retirer cette phrase lorsque le nombre n'est pas premier-- new_line; new_line; end loop; end premiers;
Mes soucis sont :
- J'aimerai comprendre et essayer de trouver une solution puisque ce programme ne marche pas avec les multiples de 5 et le chiffre 9 (plusieurs tentatives).
- Et j'aimerai lorsque le nombre n'est pas premier, retirer la phrase "oui ce nombre est bien premier"
Merci de votre aide !!
A voir également:
- Programme en Ada sur les nombres premiers !
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Message programmé iphone - Guide
- Programme word gratuit - Guide
- Desinstaller un programme sur windows - Guide
2 réponses
Je connais pas le ada, donc ça aide pas, mais voici quelques conseils :
Je crois que le mauvais fonctionnement est dû à un problème de précision :
Il faut supprimer tous les Float et les passer en integer, ce qui, par ailleurs, allègera nettement le programme qui passe tout son temps sur cette conversion,
et puis d'après ce que j'ai trouvé sur les opérateurs, tu pourrais remplaçer 'Rem' par 'Mod', ce qui supprimera peut-être le problème sur 9 et les multiples de 5...
Quant à l'affichage de la réponse, tu pourrais ajouter un test de ce genre, en dehors de la boucle :
Et pense à conditionner l'entrée dans la boucle au fait que le nombre à tester est impair, et diviser que par les nombres impairs via un équivalent de 'Step 2' dans le For...
Je crois que le mauvais fonctionnement est dû à un problème de précision :
Il faut supprimer tous les Float et les passer en integer, ce qui, par ailleurs, allègera nettement le programme qui passe tout son temps sur cette conversion,
et puis d'après ce que j'ai trouvé sur les opérateurs, tu pourrais remplaçer 'Rem' par 'Mod', ce qui supprimera peut-être le problème sur 9 et les multiples de 5...
Quant à l'affichage de la réponse, tu pourrais ajouter un test de ce genre, en dehors de la boucle :
si reste = 0 alors put(" : non ce nombre n'est pas premier"); sinon put(" : oui ce nombre est bien un nombre premier");
Et pense à conditionner l'entrée dans la boucle au fait que le nombre à tester est impair, et diviser que par les nombres impairs via un équivalent de 'Step 2' dans le For...
Le chêne aussi était un gland, avant d'être un chêne
Oui je sais que ça allègerai le programme sauf que ce n'est pas possible de tout passer en integer. Il y aura une incompatibilité dans les calculs. Mais ça au pire c'est pas troP le souci. Pour les problèmes de multiples c'est une faute dans l'algorithme et je vais essayer de faire ce que tu mas dit et je verrai. Merci :)