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

JavaScript Discussion :

Trace script java script


Sujet :

JavaScript

  1. #1
    Invité
    Invité(e)
    Par défaut Trace script java script
    Bonjour

    J'ai du mal à comprendre comment agit ce script :

    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
    function NombreFacteur(N) {
         var cpt=2,I;
         var Racine=Math.sqrt(N);
         for(I=2; I<=Racine;I++) if(N % I == 0) cpt++;
         return cpt;
    }
     
    function Premier(N) {
            return (NombreFacteur(N)==2);
        }
     
     
    document.write("Liste des nombres premier avant 100 : ");
     
    for(I=2; I<100; I++) 
      if(Premier(I)) 
         document.write(I+" - ");
    Pour l'exemple de 100 ,
    If premier(100) , alors on écrit I +"-"

    I allant de 2 à 100

    On commence par aller à la fonction Premier qui va retourner (NombreFacteur(100)==2); , hum , on retourne la comparaison du résultat de la fonction nombrefacteur(100) à 2 ? , on m'explique ?

    var cpt=2,I; Ici ,cpt vaut 2 et I vaut cpt ?
    Je n'arrive pas du tout à suivre le cheminement

  2. #2
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Salut,

    c'est assez simple. La comparaison (NombreFacteur(N)==2) est équivalente à true si le résultat de l'appel à NombreFacteur(N) est 2. Je pense que ce script se base sur la définition d'un nombre premier : un nombre est premier s'il n'a que 2 facteurs, 1 et lui-même.

    Mais je pense qu'il y a un problème : la fonction NombreFacteur arrête de compter les facteurs quand elle atteint la racine carrée de N, donc N ne sera jamais compté. Pour un vrai nombre premier, NombreFacteur renverra 1.


    Autre chose, j'aimerais que tu lises pourquoi il ne faudrait pas utiliser document.write.
    Tu pourrais utiliser le DOM pour insérer les résultats dans un paragraphe par exemple.
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    <p id="resultats"></p>

    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var $resultats = document.getElementById("resultats");
     
    function afficher( texte ){
       var noeudTexte = document.createTextNode(texte + "\n");
       $resultats.appendChild(noeudTexte);
    }
     
    // ...
     
    for(I=2; I<100; I++) 
      if(Premier(I)) 
         afficher(I + " - ");
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir

    Edit : Finalement , j'ai opté pour un truc simple correspondant à la définition de base d'un nombre premier , c'est à dire divisible par 1 et lui même , et cela donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function NombreFacteur(N) {
         var cpt= 0,I;
     
         for(I=1; I<=N;I++) if(N % I == 0) cpt++;
         return cpt;
    }
     
      <!--  un nombre est premier s'il n'a que 2 facteurs, 1 et lui-même. -->  
    function Premier(N) {
            return (NombreFacteur(N)==2);  <!-- La comparaison (NombreFacteur(N)==2) est équivalente à true si le résultat de l'appel à NombreFacteur(N) est 2. >>
            }
    Dernière modification par Invité ; 25/01/2013 à 20h11.

  4. #4
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    En fait, tu pouvais garder la racine carrée. Car une fois que tu as dépassé la racine carrée de N, tu ne vas rencontrer que des multiples des nombres comptés avant la racine. Autrement dit, s'il n'y a pas de facteurs avant, il n'y en aura pas après. (je ne sais pas si je suis très clair )

    Du coup, au lieu de comparer le résultat de NombreFacteur à 2, compare-le simplement à 1. Tu peux même commencer ta boucle avec I = 2 et comparer le résultat à 0. Plus tes boucles seront courtes, plus ton algorithme sera efficace
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

Discussions similaires

  1. Besoin de quelques conseils pour un script java
    Par poussin544 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 02/03/2006, 10h41
  2. [Java Script] Lien avec infobulle...
    Par greg1386 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 09/02/2006, 21h15
  3. Java script + JSP : Passage de données
    Par Rastapwalu dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 12/12/2005, 15h58
  4. info bulles en java script
    Par romjel dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 24/08/2005, 01h47
  5. Script Java appelé dans Xsl sans résultats
    Par metallic dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 03/08/2005, 15h39

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