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

Algorithmes et structures de données Discussion :

Exercice sur l'exponentiation rapide


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Exercice sur l'exponentiation rapide
    bonjour tout le monde, je suis nouvelle dans le forum et j'ai une petite question en espérant que quelqu'un pourrait m'aider :
    je suis entrain de réviser mes examens et je fais des exercices supplémentaire donné par mon prof et je beug sur une question
    - il faut écrire un algo qui prend en entrée un entier et qui stocke dans un tableau sa décomposition en base 2 , je n'arrive pas à comprendre comment on pourrais faire cela ?
    merci en avance

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    La décomposition en base 2 permet de déterminer les nombres d'une écriture binaire du nombre.
    Un nombre entier, par exemple, 42, peut s'écrire en base 2 : 101010.

    Mathématiquement, cela signifie qu'on peut écrire :

    0×20+1×21+0×22+1×23+0×24+1×25 =
    0 + 2 + 0 + 8 + 0 + 32 = 42

    Tout comme d'ailleurs 42, en base 10, peut s'écrire 2×100+4×101, soit 2 + 40.

    Remarque bien que les puissances correspondent à la position du chiffre dans le nombre (en partant de la fin) et que le multiplicateur est la valeur du chiffre.

    Ce que tu dois faire c'est donc retrouver quels 0 et 1 il faut pour représenter un nombre saisi au clavier.

    Il suffit de remarquer que on peut écrire la première expression : n + 2 fois quelque chose. Puisqu'on a que des puissances de 2 : on peut diviser toutes l'expression, sauf le premier terme (puissance 0), par 2. une somme de ai×2j avec j de 1 à n donne 2 × ( une somme de ai×2j avec j de 0 à n-1.

    En gros, chaque fois que tu divises par 2, tu obtiens un résultat et un reste. En observant ce que tu peux obtenir, en essayant avec différents nombres, tu devrais pouvoir trouver l'algorithme en question.

  3. #3
    Invité
    Invité(e)
    Par défaut Ça va sans dire, mais ça va mieux en le visualisant
    Apprendre en ligne : Les bases décimale, binaire et hexadécimale

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Simulation :
     
    42 : 2 = 21 reste 0 (20 =  0)
    21 : 2 = 10 reste 1 (21 =  2)
    10 : 2 =  5 reste 0 (22 =  4)
     5 : 2 =  2 reste 1 (23 =  8)
     2 : 2 =  1 reste 0 (24 =  2)
                reste 1 (25 = 32)
                        ________
                              42
     
     E -> [E]ntier
     I -> [I]ndice courant 
     R -> [R]este
     
                         .---------------------.
                         |       E  = ?        |    -> [E]ntier = Saisie d’un entier
                  D_PROG |       T  = occ * 16 |    -> Déclaration [T]able de 16 occurrences initialisées à zéro
                         |       E :: 65535    |    -> Test [E]ntier (maximum)
                > 65535  .----------+----------. <= 65535
               .-------------------<?>-------------------.
               |                              .----------+----------.
               |                     D_DIV    |        I = 16       |  -> Initialisation indice I
               |                              .----------+----------.
               |                                         |-------------------.
               |                              .----------+----------.        |  E=42/2   E=21/2   E=10/2   E=5/2    E=2/2
    .----------+----------.                   |        E = E / 2    |        |  R=0      R=1      R=0      R=1      R=0
    |       MESSAGE       |          T_DIV    |     T(I) = R        |        |  T(16)=0  T(15)=1  T(14)=0  T(13)=1  T(12)=0
    .----------+----------.                   |        I = I - 1    |        |  I=15     I=14     I=13     I=12     I=11
               |                              |        E :: 1       |        |  E=21     E=10     E=5      E=2      E=1
               |                              .----------+----------. E > 1  |
               |                                        <?>------------------.
               |                              .----------+----------.
               |                     F_DIV    |     T(I) = E        |                                                         T(11)=1
               |                              .----------+----------.
               .--------------------+--------------------.
                         .----------+----------.
                  F_PROG |          Ø          |
                         .---------------------.

  4. #4
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    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
     
    bin[] est un tableau
    dec est le nombre à transcrire entre 0 et 255 (8 bits)
    Pour x = 1 à 8
        a = dec / 2
        Si partie entière de "a" * 2 = dec alors bin(x) = 0
        Si partie entière de "a" * 2 <> dec alors bin(x) = 1
       dec = partie entière de "a"
    x suivant
    Pour x = 1 à 8
       Ecrire bin(x) + espace
    x suivant
    J'ai bon ?

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par valentin03 Voir le message
    J'ai bon ?
    A part que le nombre est à l'envers (il suffirait de boucler de 8 à 1 au lieu de 1 à 9 pour obtenir le nombre dans le bon sens), et qu'il faut bien interpréter "Si partie entière de "a" * 2" comme "Si (partie entière de "a") * 2" et non "Si partie entière de ("a" * 2) ", et dans les conditions indiquées, oui c'et bon.

    J'aurais fait, sans utiliser autre chose que des int, (avec des index de tableau de 0 à L exclu :


    Code pseudo : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    bin[] est un tableau de taille L
    n est un nombre 
    i <- L
    tant que n>0
        i <- i-1
        si i<0 lancer Overflow error (nombre tenant sur plus de L bits)
        bin[i] = reste de la division entière de n par 2 (n modulo 2)
        n = division entière de n par 2
    fin tant que

  6. #6
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    A part que le nombre est à l'envers (il suffirait de boucler de 8 à 1 au lieu de 1 à 9 pour obtenir le nombre dans le bon sens), et qu'il faut bien interpréter "Si partie entière de "a" * 2" comme "Si (partie entière de "a") * 2" et non "Si partie entière de ("a" * 2) ", et dans les conditions indiquées, oui c'et bon.

    J'aurais fait, sans utiliser autre chose que des int, (avec des index de tableau de 0 à L exclu :


    Code pseudo : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    bin[] est un tableau de taille L
    n est un nombre 
    i <- L
    tant que n>0
        i <- i-1
        si i<0 lancer Overflow error (nombre tenant sur plus de L bits)
        bin[i] = reste de la division entière de n par 2 (n modulo 2)
        n = division entière de n par 2
    fin tant que
    Merci pour la précision et les parenthèses, ça peut servir.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    A part que le nombre est à l'envers (il suffirait de boucler de 8 à 1 au lieu de 1 à 9 pour obtenir le nombre dans le bon sens)
    D'où mon initialisation "I = 16" et ma décrémentation "I = I - 1" dans mon organigramme.

    Pourquoi 16 et un entier maximum de 65535 ? Pour rester cohérent avec l'exemple du site Apprendre en ligne : Les bases décimale, binaire et hexadécimale.

    … Mais c'est génial, cette balise "SPOILER" ! Je ne connaissais pas ! Elle n'est pas proposée dans la construction d'un message ! Ça change tout ! Merci de me l'avoir fait découvrir.
    Dernière modification par Invité ; 14/11/2019 à 17h00.

Discussions similaires

  1. exercice sur les matrices
    Par massimo dans le forum MATLAB
    Réponses: 3
    Dernier message: 22/03/2007, 17h20
  2. besoin d aide sur un exercice sur les pointeurs
    Par azumachakib69 dans le forum C
    Réponses: 3
    Dernier message: 28/12/2006, 01h16
  3. Exercice sur les tableaux
    Par IDE dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 06/11/2006, 19h33
  4. Besoin d'aide pour un exercice sur les registres
    Par zakuza dans le forum Assembleur
    Réponses: 5
    Dernier message: 14/04/2006, 14h23
  5. Réponses: 4
    Dernier message: 28/07/2005, 16h22

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