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 :

Nombres parfaits : petite erreur dans l'algorithme


Sujet :

Pascal

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 53
    Points
    53
    Par défaut Nombres parfaits : petite erreur dans l'algorithme
    voici un programme qui affiche la liste des parfaits (méthode brutale) dans un intervalle compris entre 1 et x
    je rappelle qu'un nombre parfait est celui dont la somme de ses diviseurs propres (lui exclu) lui est égale.
    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
    program nb_parfaits;
    uses wincrt;
    var e,d,s,x:integer;
    begin
    writeln('le morveux qui a développé ce programme veut afficher');
    writeln('une liste des nombres parfaits. On commence par 1,');  
    writeln('jusqu''à quel entier naturel voulez-vous effectuer le test?');
    readln(x);
    writeln('c''est un bon choix :)');
    writeln('la liste :');
    for e:=1 to x do
        begin
        s:=0;
            for d:=1 to (e div 2) do
             begin
                  if e mod d=0 then
                     begin
                     s:=s+d;
                  if s=e then
                     writeln(e);
                  end
             end
        end
    end.

    Le problème : dans la liste figure le nombre 24 qui n'est pas parfait (24<> (2+3+4+6+8+12))

    Y'a-t-il une erreur dans l'algorithme ?
    Merci.
    Écrire une procédure dont le temps de création dépend essentiellement de ma vitesse de frappe au clavier n'a pas le moindre intérêt !
    --- droggo.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Citation Envoyé par katrena99
    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
    for e:=1 to x do
        begin
        s:=0;
            for d:=1 to (e div 2) do
            begin
                if e mod d=0 then
                begin
                    s:=s+d;
                    if s=e then
                     writeln(e);
                end
            end
        end
    end.
    Il n'y a qu'une petite erreur : il faut sortir ce que j'ai mis en gras de la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for d:=1 to (e div 2) do
    car tu affiches également le nombre comme étant parfait si une somme intermédiaire correspond au test, ce qui est le cas avec 24:
    (liste dans laquelle tu as d'ailleurs oublié le 1 mis en gras)
    mais
    d'où l'erreur d'affichage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for e:=1 to x do
        begin
        s:=0;
            for d:=1 to (e div 2) do
            begin
                if e mod d=0 then
                begin
                    s:=s+d;
                end
            end;
            if s=e then  writeln(e);
        end
    end.
    (Au passage, prends la peine d'aligner correctement les indentations, tu verras que le code devient beaucoup clair [c'est fait pour ça], et ça t'aurait probablement permis de trouver tout seul ce qui n'allait pas)
    Compilation sans erreur ne signifie pas programme sans erreur.
    L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 53
    Points
    53
    Par défaut
    Résolu merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Au passage, prends la peine d'aligner correctement les indentations
    C'est vrai j'ai mis des espaces un peu aléaoirement, des espaces pour espacer, on ne nous enseigne pas la forme à respecter. Où pourrais-je l'apprendre ?
    Écrire une procédure dont le temps de création dépend essentiellement de ma vitesse de frappe au clavier n'a pas le moindre intérêt !
    --- droggo.

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Philippe Gormand a rédigé un tutoriel sur l'indentation et plein de conseils d'écriture en Pascal : http://philippe-gormand.developpez.c...i/Indentation/
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 53
    Points
    53
    Par défaut
    Résolu merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Au passage, prends la peine d'aligner correctement les indentations
    C'est vrai j'ai mis des espaces un peu aléaoirement, des espaces pour espacer, on ne nous enseigne pas la forme à respecter. Où pourrais-je l'apprendre ?

    Désolé problème de connexion je n'ai pas lu le msg au dessus en postant.
    Écrire une procédure dont le temps de création dépend essentiellement de ma vitesse de frappe au clavier n'a pas le moindre intérêt !
    --- droggo.

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut le nombres parfait en devoir
    Merci mes amis pour m'aider par ce que cet essai est le devoir de cette année

  7. #7
    Futur Membre du 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
    Points : 7
    Points
    7
    Par défaut
    Bonjour
    voici un lien de telechargement d'un programme pascal qui détermine si un nombre est parfait ou non
    http://www.4shared.com/zip/YZ9ohCgj/...e_premier.html

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Petit erreur dans un code C#
    Par Farouxo dans le forum C#
    Réponses: 5
    Dernier message: 06/06/2011, 00h26
  2. Petite erreur dans code
    Par mihaispr dans le forum VB.NET
    Réponses: 3
    Dernier message: 24/10/2009, 22h53
  3. petite erreur dans le script
    Par naazih dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 11/05/2008, 14h13
  4. Erreur dans mon algorithme
    Par quaresma dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 25/05/2007, 10h04

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