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
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    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 émérite
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    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
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    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 émérite
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    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
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Par défaut
    merci encore mais je dois le faire sans utiliser le tableau

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    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 confirmé
    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
    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
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    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 confirmé
    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
    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 émérite
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    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
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    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
    Membre Expert
    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
    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é !
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    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 expérimenté Avatar de Betatesteur
    Inscrit en
    Juillet 2003
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 210
    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