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 :

conversion binaire-décimal sans utiliser le tableau


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Points : 7
    Points
    7
    Par défaut conversion binaire-décimal sans utiliser le tableau
    bonjour,

    je suis debutant et je suis en train de faire un algo qui calcule l'exponatiation rapide mais je me bloque sur la conversion bin-déc
    mais l'exposent e est en base 2 et je dois le convertir en base 10



    merci en avance à tous

  2. #2
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    e est une serie de valeurs ai=0 ou 1 i=0..n
    alors en base 10 e = Somme(i=0..n) ai * 2^i = Somme { ai <> 0 } 2^i

    exemple
    e=10010 => a0=a2=a3=0, a1=a4=1 => e = 2^1 + 2^4 = 2+16=18

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Points : 7
    Points
    7
    Par défaut conversion binaire-décimal sans utiliser le tableau
    merci mais tu peut m'écrire cet algorithme en pseedo code stp :

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    string s = e // s est defini de 1 à n s[1] bit de poids fort s[n] bit de poids faible

    value = 0
    pour i= 1 à longueur(s) faire
    {
    value=value * 2
    si s[i] ='1' alors value=value+1
    }
    sortir value

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    merci encore mais je dois le faire sans utiliser le tableau

  6. #6
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    précisez!!!
    pour le conversion base2->base10 il faut bien avoir quelquepart l'écriture en base 2 pour générer celle en base 10!

  7. #7
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Le tableau ? De quoi parles-tu ? Il est bien évident que si ta valeur est sous forme de string, tu ne peux pas la traduire en entier sans lire la string, c'est donc que ton problème n'est pas celui auquel nous pensons, ou que tu te trompes de tableau.

    --
    Jedaï

  8. #8
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    salut
    exponetiation rapide

    je veux faire un prog en C qui calcule a^e mod n = (a mod n)^e mod n
    mais e est en binaire et je dois le convertir en décimal et apres faire le reste d'operation mais je me bloque sur la conversion de e en décimal
    et en classe on a pas encore vue le tableau pouvez vous faire cette conversion sans utiliser le tableau pour tout nombre binaire avec les boucles( tant que(condition) faire ou faire tant que (condition) ou repeter (nfois ) ...etc)


    j'espère que comprenez l'expliquation

    merci

  9. #9
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    "e est en binaire" n'a pas de signification en soi... Le binaire est une représentation, un nombre est absolu, le fait qu'en interne l'ordinateur le représente en binaire en ternaire ou en base 60 n'a pas d'importance tant que tu fais des opérations classiques avec (multiplication, addition, division...). Maintenant on peut avoir une variable qui contient une représentation d'un nombre, dans ce cas cette variable est forcément un tableau (une string ou une séquence d'entier). Donc que veux tu dire par "e est en binaire" ?

    --
    Jedaï

  10. #10
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    cela ne répond pas à notre interrogation
    >>> OU EST E ??? <<<
    Doit-on le lire dans un fichier? Est-il entré bit à bit par le clavier? Est-ce 1 string qui provient d'ailleurs? Est-ce résultat d’une fonction ? …
    Il n’est pas possible de transcoder e si on n’a pas le droit de le lire - acquérir d’une façon ou d’une autre !!!
    le petit code proposé ci-dessu fait bien vos boucles et tests. Mais il faut bien tester sur l'entrée de E

  11. #11
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Points : 7
    Points
    7
    Par défaut conversion binaire-décimal sans utiliser le tableau
    le prototype de la fonction est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int expoRapide (int a , int e , int n)
    je crois que vous allez comprendre

  12. #12
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    C'est un peu bizarre, ta fonction reçoit en entrée un entier base 10 dont tu interprètes la valeur comme du binaire. Bon bref.

    int e = 1101;

    Si tu veux éviter d'utiliser un tableau, tu peux diviser successivement ce nombre par 10 jusqu'à ce que le quotient soit égale à 0. Tu prends tous les restes de haut en bas et tu obtiens chaque chiffre du nombre de départ mais en ordre inverse.

    1101 | 10
    --------------
    1 | 110
    0 | 11
    1 | 1
    1 | 0


    Et là on a bien :
    1*2^0 + 0*2^1 + 1*2^2 + 1*2^3 = 1 + 0 + 4 + 8 = 13 gagné !

  13. #13
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    Côté incertain de la fonction proposé tout à fait sur...

    l'algorithme proposé est Vrai mais je ne conseille pas cela pour la raison suivante:
    pout atteindre 13 ( cas de l'exemple ci-dessus ) on a du passer par 1101 en base 10! c'est à dire que dès que l'on interprète comme de la base 10 un chiffre en base 2 on diverge TRES vite .
    Un integer 32 bits non signé est limité à 2^32 -1 = 4294967295. C'est à dire cette technique limite le nombre e à 1111111111 soit 1023 !!
    avec un integer 64 bit on relaxe un peu le problème mais quelle perte de potenitel !!!

  14. #14
    Membre actif Avatar de Betatesteur
    Inscrit en
    Juillet 2003
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 210
    Points : 248
    Points
    248
    Par défaut
    bon, j'ai concocté ceci algo en utilisant la récursivité pour la méthode d'exponentiation rapide


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    fonction puissance(x,n: entier long) retourne entier long
     
        Si n=1 alors
            puissance <- x
        sinon
            si n mod 2=0 alors    //Si x est pair
                puissance <- puissance(x,n div 2) * puissance(x,n div 2)
            sinon
                puissance <- puissance(x,n div 2) * puissance(x,n div 2)* x
    fin puissance

Discussions similaires

  1. Affichage de nombre réguliers sans utiliser de tableau
    Par Severrakh dans le forum Débuter
    Réponses: 5
    Dernier message: 25/10/2012, 11h15
  2. Algorithme conversion binaire décimal
    Par slouma03 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 14/02/2011, 15h47
  3. conversion de décimal à binaire
    Par sousou2007 dans le forum C++
    Réponses: 10
    Dernier message: 19/10/2007, 12h33
  4. Decimal -> Binaire (sans utiliser de tableau)
    Par Sandro Munda dans le forum C
    Réponses: 3
    Dernier message: 14/10/2006, 18h09
  5. Réponses: 10
    Dernier message: 04/05/2006, 23h55

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