Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercice création tableau de diviseurs d'un nombre

    2 février 2023 à 0:06:49


    Bonjour/Bonsoir,

    Je suis à la recherche d'une personne qui peut me dire quels sont les fautes que j'ai commises dans mon programme et comment les réparer.

    Activité :

    Soit T un tableau de n entiers strictement positifs (10 ≤ n ≤ 10).

    On désire former un autre tableau TS qui contiendra tous les nombres sublimes se trouvant dans le tableau T puis afficher le résultat.

    Mon travail:

    #declaratoion des cts
    m0="entrer le nombre d'elements"
    
    
    #importation des modules
    from numpy import array
    t= array([]*10,dtype=int)
    ts= array([]*10,dtype=int)
    
    
    #declaration des modules
    def sublime (k):
        s = 0
        for i in range(1, k+1):
            if k%i == 0:
                s += i
                
    def saisie (ch):
        global n
        n=int(input(ch))
        
        
    def affiche (a,k):
        print("le nombre sublime sont:",k)
        for i in range (k):
            print(a[i],end= " ")
        print() #retour a la ligne apres l'affichage
      
    def remptab (k):
        global t
        for i in range (k):
            t[i]=int(input("entrer l'element t[ "+str(i)+"] "))
        
    def trait (a,k):
        global ts,s
        s=-1
        for i in range (k):
            if sublime(a[i]) == True :
                s=s+1
                ts[s] = a[i]
    
    
     #cors de programme principal 
    n=saisie(m0)
    
    remptab (n)
    
    
    trait (t,n)
    
    
    affiche (ts,s)

    -
    Edité par MimiMou1 2 février 2023 à 0:56:44

    • Partager sur Facebook
    • Partager sur Twitter
      2 février 2023 à 7:57:39

      Bonjour,

      Tes fonctions sont mal nommées, on ne comprend pas les différentes étapes amenant à déterminer un nombre sublime.

      Sur Wikipedia, on y indique les différentes étapes,

      • Déterminer si c'est un nombre parfait
      • Retourner le nombre de diviseurs d'un nombre
      • Déterminer si le nombre est sublime

      Puis finalement retourner la liste des nombres sublimes dans une liste d'entiers.

      Un exemple d'implémentation à compléter pourrait être,

      def is_perfect(num):
          """Retourne True si le nombre est parfait, sinon False."""
      
      
      def count_divisors(num):
          """Retourne le nombre de diviseurs d'un nombre."""
      
      
      def is_sublime(num):
          """Retourne True si le nombre est sublime, sinon False."""
      
      
      def detect_sublime_numbers(numbers):
          """Retourne la liste des nombres sublimes dans une liste d'entiers."""
      
      



      • Partager sur Facebook
      • Partager sur Twitter

      Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
      La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

        2 février 2023 à 10:19:15

        Bonjour,

        selon Wikipédia, on ne connait que 2 nombres sublimes: 12 et un nombre de 76 chiffres :

        6 086 555 670 238 378 989 670 371 734 243 169 622 657 830 773 351 885 970 528 324 860 512 791 691 264

        -
        Edité par Phil_1857 2 février 2023 à 10:22:20

        • Partager sur Facebook
        • Partager sur Twitter
          2 février 2023 à 10:29:01

          Oui mais son objectif est de le démontrer par l'exécution d'un code python ;)

          (En tout cas pour le 1er nombre...)

          -
          Edité par fred1599 2 février 2023 à 10:29:29

          • Partager sur Facebook
          • Partager sur Twitter

          Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
          La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

            2 février 2023 à 11:01:59 - Message modéré pour le motif suivant : Message complètement hors sujet


              2 février 2023 à 11:54:52

              MimiMou1 a écrit:


              ...

              Soit T un tableau de n entiers strictement positifs (10 ≤ n ≤ 10).

              ...

              -
              Edité par MimiMou1 il y a environ 10 heures


              Bonjour.

              Je suppose que les bornes indiquées sont fausses sinon y'a qu'un nombre à analyser et d'après ce que j'ai lu plus haut, il ne sera pas sublime.

              • Partager sur Facebook
              • Partager sur Twitter

              PB68

                3 février 2023 à 16:27:33

                Il faudrait aussi revoir l'utilisation des fonctions, et en particulier le mot-clé return (pour ta saisie, je crois n vaudra tout le temps None de la façon dont tu as fait)

                et on essaie d'éviter d'utiliser des variables globales (ici tu n'en as aucunement besoin) en passant par les paramètres de fonctions et leur retour

                • Partager sur Facebook
                • Partager sur Twitter
                  3 février 2023 à 17:30:04

                  Un texte identique a été posté sur le site CommentCaMarche.
                  J'ai donné une réponse semblable à celle de umfred.
                  J'ai testé jusqu'à un million avant de regarder sur Wikipedia. Je n'irai pas plus loin ...
                  Je trouve bien le résultat 12
                  Voici mon code:
                  -
                  #Un nombre égal à la somme de ses diviseurs propres est parfait.
                  # Ça implique de soustraire le nombre lui-même à la somme de ses diviseurs.
                  #Un nombre sublime est un entier naturel dont le nombre des diviseurs et la somme des diviseurs sont tous deux des nombres parfaits.
                  def diviseurs(n):
                      r = int(n**0.5)   # Racine carrée.
                      s = 0   # Somme
                      c = 0   # Compte.
                      for d in range(1, r+1):
                          if n % d == 0:   # Si d divise n
                              s += d + n//d
                              c += 2
                      if r*r == n:   # Si c'est un carré parfait (ex. 25)
                          s -= r
                          c -= 1
                      return c, s   # Retourner le compte et la somme.
                  #
                  for n in range(1, 100+1):
                      cn, sn = diviseurs(n)
                      cc, sc = diviseurs(cn)
                      cs, ss = diviseurs(sn)
                      if sc-cn == cn and ss-sn == sn:
                          print(n)
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Le Tout est souvent plus grand que la somme de ses parties.

                  Exercice création tableau de diviseurs d'un nombre

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown