IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Pascal Discussion :

Déterminer si un nombre est premier


Sujet :

Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 3
    Par défaut Déterminer si un nombre est premier
    Bonjour à tous,

    Je rencontre un problème avec mon programme, est-ce quelqu'un pourrait m'éclairer?
    Le programme reçoit un nombre entier et renvoie si c'est un nombre premier ou pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    program test;
    var
    a, diviseur :integer;
    result	:BOOLEAN;
     
    begin
    writeln('Entrez un nombre entier');
    readln(a);
     
    IF (a = 2) THEN
    Result := True
     
        ELSE IF (a > 2) THEN
        result := false
     
        ELSE IF (a mod 2 = 0) THEN
        Result := False
     
        For diviseur := 2 to (a-1) DO
        ELSE IF (a mod diviseur = 0) THEN
        result := false
     
     
    ELSE
    result := true;
     
    writeln('Est-ce que ce nombre est premier? ', result)
    end.
    Je suppose que le problème vient d'à partir de la ligne 20 ...

    Merci d'avance!

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Ton indentation n'est pas du tout claire, de même que l'imbrication des condition If/Then/Else. Essaye de bien découper ces instructions, et ton problème devrait apparaître plus clairement.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 3
    Par défaut
    De cette manière, j'arrive à faire fonctionner mon programme mais l'écriture ne me plaît pas... Je n'arrive vraiment pas à faire fonctionner le premier... Est-ce quelqu'un pourrais me montrer la bonne écriture ? Ce n'est pas faute d'avoir y essayé...

    Merci pour la réponse d'au dessus mais je n'y vois pas plus clair... Je re essayerai demain à tête reposée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    program test;
     
    var
    a, diviseur :integer;
    result	:BOOLEAN;
    begin
    writeln('Entrez un nombre entier');
    readln(a);
    result := true;
    IF a = 2 THEN
    result := true;
    IF a < 2 THEN
    result := false;
    for diviseur := 2 to (a-1) DO
    IF (a mod diviseur = 0) then
    result := false;
     
    writeln('Est-ce que ce nombre est premier? ', result)
    end.

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 171
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Weldan Voir le message
    Est-ce quelqu'un pourrais me montrer la bonne écriture ?
    Pour tenir compte du conseil qui t'a été donné plus haut, tu ferais peut-être bien d'utiliser systématiquement l'écriture suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if condition then
      begin
        {...}
      end
    else
      begin
        {...}
      end;
    Ainsi tu te rendrais mieux compte de ce qui ne va pas dans ton code.

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Koa,

    +1, ET d'utiliser une mise en forme cohérente et régulière.

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 3
    Par défaut
    Merci à tous pour vos réponses qui m'aide. J'ai enfin réussi à faire fonctionner la bête ! ;-)
    Est-ce que vous pourriez m'éclairer sur 2-3 points:
    Il y a-t-il un moyen d'éviter que mon programme calcul tous les diviseurs jusqu'au (nombre-1) une fois qu'il a trouvé un nombre qu'il le divise.
    Peut-être que je ne suis pas clair, je vais vous donner un exemple:
    Imaginons que je rentre le chiffre 9: mon programme va le diviser par 2 puis 3, puis 4... jusqu'à 9 diviser par 8. Est-ce qu'il y a moyen qu'une fois que mon programme remarque que 9 est divisible par 3 il arrête la boucle ? ça me permettrait d'économiser... Devrais-je utiliser la boucle repeat... until ?

    Deuxième question:
    Est-ce si par exemple mon programme rempli la première condition, il y-a-t-il moyen qu'il évite toutes les autres conditions ? Ou est-ce que ça le fait déjà lorsqu'on utilise IF, ELSE IF, Else ... ?

    Merci à vous et désolé si mes questions semblent stupides ...

  7. #7
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2012
    Messages : 2
    Par défaut
    Vous n'arrivez pas a comprendre que le changement est la meilleure façons d'améliorer les choses???

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Hoa,
    Citation Envoyé par ragone Voir le message
    Vous n'arrivez pas a comprendre que le changement est la meilleure façons d'améliorer les choses???
    Le changement est une bonne chose, quand il va dans le bon sens. Mais pour le côté amélioration, ce n'est pas le cas de ton code, qui reprend tout ce qu'il ne faut pas faire pour résoudre le problème posé.

  9. #9
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3
    Par défaut
    Bonjour
    lien de telechargement d'un programme en pascal qui détermine si un nombre est premier ou pas http://www.4shared.com/zip/YZ9ohCgj/...e_premier.html

  10. #10
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    function EstPremier(const a: Integer): Boolean;
    var
      nmax, i: Integer;
    begin
      if (a = 2) then
        Result := True
      else if (a = 1) or (a mod 2 = 0) then
        Result := False
      else
      begin
        nmax := Trunc(Sqrt(a))+1;
        i := 3;
        Result := True
        while (i < nmax) do
        begin
            Result := (a mod i <> 0)
            if not Result then
               exit
            Inc(i, 2); // que les nombres impairs
        end
      end;
    End;
    est une solution parmi d'autres, j'ai testé l'algo en Python, j'ai pas FPC sur place.

    Il est peut-être possible d'éviter les divisions en adaptant une mise en oeuvre simple du crible d'Eratosthène (Il y a eu des discussions ici il y a peu sur le sujet), je n'ai pas vérifié cette solution.

    @+

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

Discussions similaires

  1. comment tester si un nombre est premier en php ?
    Par Shyboy dans le forum Langage
    Réponses: 1
    Dernier message: 09/03/2007, 17h08
  2. Réponses: 9
    Dernier message: 30/01/2007, 21h03
  3. Savoir si un nombre est premier
    Par Jihnn dans le forum Vos contributions VB6
    Réponses: 4
    Dernier message: 11/08/2006, 10h14
  4. Comment savoir si un nombre est premier ?
    Par Extra-Nitro dans le forum Général Python
    Réponses: 9
    Dernier message: 03/01/2006, 14h28
  5. Déterminer si un nombre est premier
    Par Fandefruit dans le forum Langage
    Réponses: 7
    Dernier message: 30/12/2005, 10h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo