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

C++ Discussion :

[ALGO] Conversion caractères-binaire pour un grand nombre


Sujet :

C++

  1. #1
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut [ALGO] Conversion caractères-binaire pour un grand nombre
    Bonjour, pour un projet en groupe nous devons créer une classe gérant des grands nombres (entiers). Nous avons donc choisi comme structure de donnée un tableau de short, fonctionnant comme un nombre de base 65536. Le problème que nous n'arrivons pas à résoudre est le suivant : stocker ce grand nombre à partir d'une chaine de caractères donnant les chiffres de celui-ci.

    La conversion d'un caractère en son chiffre est évidente, le problème est plutôt au niveau algorithme car il faut remplir les cases du tableau en fonction du nombre entier, et le nombre peut contenir des centaines de chiffres, impossible de le gérer totalement donc.

    Je suis peut être pas clair ^^

    Est-ce que vous avez des idées, des pistes ? merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Pourquoi veux-tu convertir ton nombre en précision arbitraire vers un nombre natif du système (ce qui n'est évidemment pas toujours possible) ? Pour l'afficher ? Dans ce cas-là, surcharge simplement l'operator<< sur les flux.

    Pouvoir convertir un nombre natif du système en nombre en précision arbitraire peut néanmoins très bien se faire, et c'est d'ailleurs fort utile pour initialiser ton nombre.

    Je ne comprends pas vraiment quel est ton problème en fait. Un coup tu parles d'un sens et un coup tu parles d'un autre...
    Boost ftw

  3. #3
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut
    Le but de la manoeuvre est de stocker le grand nombre à partir d'une chaine de chiffres afin de l'acquérir à partir d'un fichier ou d'un cin, et également la conversion inverse afin d'afficher et écrire dans fichier.

    Je ne comprends pas bien les termes nombre en précision arbitraire (char* ?) et nombre natif du système (short ?).

    Le problème est double, vu que je ne sais pas comment convertir dans un sens ni dans l'autre. A commencer par char* -> short, le principe de base serait diviser le nombre total par les puissances de 65536 afin de remplir le tableau de short, mais on ne peut pas utiliser le nombre entier directement en calcul car il est trop grand.

    Ceci dit je n'ai aucune certitude sur la possibilité de réaliser ou pas une telle conversion. Cela dit le tableau de short est le moyen optimum pour stocker un grand nombre, on espère donc pouvoir fonctionner avec.

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Nombre natif du système : char, short, int, long, long long.
    Nombre à précision arbitraire : type abstrait que tu définies toi-même, que tu as choisi d'implémenter ici par des vecteurs de short en utilisant la base 65535.
    Chaîne de caractères : suite contigue de char, interprétés comme caractères et non comme des entiers

    Ce qu'il faut faire c'est les conversions ton type abstrait -> chaîne de caractères et chaîne de caractères -> ton type abstrait.
    Boost ftw

  5. #5
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut
    Hum oui c'est exactement ce que je demandais dans ce sujet quoi :)
    La conversion char* vers mon type vecteur de short, et vice versa.

    Mais comme j'ai essayé de le dire au dessus, c'est plus au niveau de l'algorithme, la chaine de caractère est facilement interprétable comme une suite de chiffres. Ce que je n'arrive pas à trouver c'est comment convertir petit à petit une suite de chiffres, en nombre binaire découpé ici en short.

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Jay,

    Il faut écrire la fonction multiplication d'un de tes entiers très longs par une constante, de type short par exemple , ainsi que l'addition d'une constante à ces entiers, et faire comme d'habitude:

    - stocker le signe selon votre format
    - initialisation à 0
    - pour chaque chiffre:
    ... * 10 (si c'est bien la base de représentation de la chaîne)
    ... + valeur correspondant au chiffre en cours.
    Si les cons volaient, il ferait nuit à midi.

  7. #7
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Dans l'ordre de difficulté:
    * Utiliser une base mieux adaptée aux conversions en décimal (genre 10000)
    * Parcourir les chiffres du moins au plus significatif en faisant *10+chiffre à chaque fois
    * Regrouper les chiffres en groupes gérables (par exemple de 4 chiffres) et parcourir les groupes du moins au plus significaif en faisant *10000+groupe
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  8. #8
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut
    Oui on avait songé à utiliser une base de 10000 au lieu de 65536, mais on cherchait à le faire plus optimisé. Bon, on va se rabattre sur la base de 10000 vu que ça a vraiment pas l'air évident sinon.

    Merci de vos réponses, en utilisant cette base là on devrait pas avoir de problèmes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/08/2008, 18h53
  2. [MySQL] INSERT ou UPDATE pour un grand nombre d'enregistrements
    Par Phil.Antrope dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/12/2007, 17h24
  3. [SQL] Optimisation pour un grand nombre d'insertions
    Par ddelec24 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/08/2007, 14h33
  4. Macro Solver pour un grand nombre de ligne
    Par hochimi dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/07/2007, 23h20
  5. Algo Conversion Décimal -> Binaire
    Par MisterTee dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 23/02/2006, 22h53

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