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 :

Générer des séquences binaires


Sujet :

C#

  1. #1
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut Générer des séquences binaires
    Bonjour,

    Je suis bloqué sur algorithme que je n'arrive pas à écrire en C# :

    Je souhaiterai générer à partir d'une séquence binaire, la séquence suivante en partant du nombre d'éléments à générer.

    Un exemple avec 3 éléments :

    Séquence de début 0 0 0

    A chaque appel de l'algorithme je dois retrouver dans l'ordre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    GetFirstSequence(3); --> Me donne 000
     
    GetNextSequence("000"); --> Me donne 001
    GetNextSequence("001"); --> Me donne 010
    GetNextSequence("010"); --> Me donne 011
    GetNextSequence("011"); --> Me donne 100
    GetNextSequence("100"); --> Me donne 101
    GetNextSequence("101"); --> Me donne 110
    GetNextSequence("110"); --> Me donne 111
    Ceci avec le nombre d'éléments variant :

    Autre exemple avec 4 éléments si j'apelle l'algo à la suite :

    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
     
    0000
    0001
    0010
    0011
    0100
    0101
    0110
    0111
    1000
    1001
    1010
    1011
    1100
    1101
    1110
    1111
    Donc je bloque totalement, je n'arrive pas à trouver un début de réponse, toutes mes pistes sont fausses, donc si quelqu'un peut m'aider là dessus, ce serait cool.

    Les séquences peuvent être traitées en chaines de caractère, tableaux, entiers...
    Merci d'avance.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 84
    Points : 75
    Points
    75
    Par défaut
    Je ne comprend pas bien :

    tu veux transformer des string ("0010") en binaire (0010) ?

    sinon, pourquoi tu passes une string à getNextSequence ?

    essaye d'ecrire ton algo en langage naturel je comprendrai mieux...

  3. #3
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut
    Je ne te suis pas...

    Comment puis-je avoir :

    "0011011100"

    à partir de :

    "0011011011"

    Je vois pas ou tu veux en venir...

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    salut

    il te suffit de faire une fonction compte de 1 en 1 à partir d'un début que tu lui fournis

    Et ensuite, suffit de transformer cet int en nombre binaire

    Ca devrait pas etre trop difficile ?

    Ecriture Binaire

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 84
    Points : 75
    Points
    75
    Par défaut
    Haaaaa ok


    ben la solution facile c'est d'écrire une fonction de convertion de string en int (en sachant que la string représente un nombre écrit en binaire) et vice versa

    tu convertis en int, tu ajoute 1, tu convertis en string

    c'est hyper simple à coder ce genre de fonction

    note : getFirstSequence te donne la taille de la chaine de sortie, à passer à ta fonction intToBinString(int toConvert, int sizeString)

  6. #6
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut
    Pas du tout, c'est d'ajouter 1 à une séquence binaire...

    0010 + 1 = 0011 en binaire.

    Ce n'est pas juste transformer un string en long ou décimal.

    Je pars de n élément avec le bit 0 de départ et je veux toute la séquence de bit pour arriver à un résultat de n 1 :

    Avec n = 3 :

    000
    001
    010
    011
    100
    101
    110
    111

    Voilà, cet algo sera ensuite traduit en VBA pour info.


    Merci !

  7. #7
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    amis toulousaing, tu voudrais ça, en fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private string[] GenerateValues(int nbToReach)
            {
                string val = string.Empty;
                val = val.PadLeft(nbToReach, '1');
                int valToReach = Convert.ToInt16(val, 2);
                string[] result = new string[valToReach + 1];
                for (int i = 0; i <= valToReach; i++)
                {
                    result[i] = Convert.ToString(i, 2).PadLeft(nbToReach, '0');
                }
                return result;
            }
    Exacte ?

  8. #8
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut
    Ami toulousain, c'est exactement ça dans le principe.

    Par contre ce que je souhaite faire, ce n'est pas de générer une table en mémoire (string[]) mais bien de pouvoir faire un getNextSequence des valeurs pour ne pas avoir à stocker en mémoire toute la table.

    De plus, je ne peux pas utiliser la méthode Convert ou PadLeft car le code doit être utilisable en C# mais aussi en VBA donc je voulais un algo plus généraliste en utilisant seulement des types primaires et des tableaux...

    Mais dans le principe le résultat est le même.

    Je veux pouvoir traiter chaque séquence de résultat "à la volée" sans créer de tableau (car le nombre d'éléments peut être de + de 12, soit déjà 4096 lignes).

    Quelqu'un peut-il m'aider à réaliser cela ?

    Merci d'avance.

  9. #9
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    ok beh j'ai pas d'autres solutions

    Et en plus, VBA est amené à disparaitre au prévu de VSTO...

    Enfin, dans la version 2008 D'office, VBA est encore présent mais devrait à priori vivre ces derniers jours

    Mais je comprends que tu sois contraint par VBA...

    Cela dit, tu te fais un Add-in VSTO, ca sera pas plus "pénible" à faire que de VBA et en plus, tu profiteras de la puissance de .Net !!!

    Tu devrais jeter un oeil à cela !!!

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 84
    Points : 75
    Points
    75
    Par défaut
    Bah c'est un peu ce que je proposait :
    tu te réécris tes propre méthodes Convert

    la premiere tu lui passe un string représentant un nombre binaire et elle te renvoie un int
    **petit rappel : un int et un nombre binaire c'est strictement la même chose pour la machine

    la deuxieme tu lui passe un int ET une taille de chaine et elle te renvoie la représentation binaire associée (en string bien sur)

    dans ta fonction getNextSequence tu récupere une string représentant, en binaire, le nombre n, tu le transforme en int avec ta premiere fonction Convert, tu lui ajoute 1 (bah oui un nombre binaire + 1 == un nombre en base 10 + 1) et tu fais la transformation inverse avec ta deuxieme méthode Convert.

    Et tu renvoies le résultat de cette deuxième méthode, après t'en fais ce que tu veux (affichage, stockage, modifs, etc...)



    GetFirstSequence enregistre la taille de chaine que tu utilisera dans ta convertion de int vers représentation binaire (string) et elle commencera ton itération avec un appel à cette méthode ce convertion avec la valeur 0...

    Et tu feras (2^(tailleSéquence)) - 1 itérations ...

    (le -1 est par ce que le premier passage (0) est fait dans le GetFirstSequence)

  11. #11
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut
    Comment tu écris la seconde avec un int et le nombre de caractères, je vois pas trop ce que tu veux dire par là...

    Si j'ai "110101", la première méthode me renvoie donc 53, j'incrémente ce 53, donc 54 puis je le reconvertis en binaire --> "110110" mais je ne vois pas trop comment lui dire de le convertir sur 6 caractères...

  12. #12
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    sans vouloir abuser

    si tu veux faire cela en VBA, poste dans un forum dédie VBA car ici, on fait du C#

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 84
    Points : 75
    Points
    75
    Par défaut
    bon allé jme fais chier au taf donc ta du bol => réponse toute faite (j'ai testé)

    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
     
    public string MyConvert(int x, int size)
            {
                string resultat = string.Empty;
     
                int index = 1;
     
                while (x != 0)
                {
                    resultat = ((x % 2 == 0) ? "0" : "1") + resultat;
                    x = x / 2;
                    index++;
                }
     
                while (index++ <= size)
                    resultat = "0" + resultat;
     
                return resultat;
            }


    voila... oublie pas le flag "résolue" si ça te convient

    bon par contre je l'ai pas blindé : si ton int est trop grand, ça s'arrete pas à TailleSéquence mais bien à la taille de ta chaine binaire...

    Mais si ta bien fais tes itération et tout, ya pas de probleme... et puis libre à toi de rajouter des tests dans la fonction (nb négatif, TailleSéquence trop courte)

  14. #14
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut
    Sans vouloir abuser non plus, je dois le faire en VBA ET en C# donc ma demande ici traite sur un algo C# mais sans utiliser certaines méthodes (je vous l'accorde).

    Pour info, j'ai aussi fait une demande d'aide dans la section Algo mais ça ne bouge pas du tout.

    Bref je vais essayer de me servir de tous les éléments que j'ai pour faire ce process.

    Merci

  15. #15
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    beh, si tu dois le faire en C#.. la solution que je t'ai filé doit suffire

    (à la restriction prêt que tu disais pour la génération suivante, mais bon,
    avec le code que je t'ai filé, c facile à adapter à ton besoin final)


    PAr contre, pour du VBA, faut te faire les fonctions qui font le boulot

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 84
    Points : 75
    Points
    75
    Par défaut
    Mé heuu !! c'est ske je dis depuis le début

  17. #17
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut
    Pour répondre à TheMonz, en effet la métode suffit si elle est appliquée qu'en C# mais si j'avais eu à la faire qu'en C# je pense que je n'aurai pas posté sur le forum (j'aurai utilisé des fonctions C#).
    Merci quand même de m'aider.

    Pour répondre à gwendal86, ta solution m'a l'air de bien fonctionner, et je peux la traduire en VBA facilement (pour l'autre méthode Convert, je me suis débrouillé). Donc c'est super, même si j'aime pas trop pomper un boulot tout fait, je bloquais depuis hier et c'était assez urgent (et c'est la première fois que je fais cela).

    Bref merci à tous !

    --> Résolu.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/06/2014, 16h31
  2. Générer des fichiers binaires
    Par scolyo dans le forum Langage
    Réponses: 4
    Dernier message: 04/11/2010, 09h10
  3. Générer la prochaine séquence binaire
    Par Contrec dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 05/12/2008, 09h30
  4. Générer des fichiers PDF
    Par bobbafet dans le forum C++Builder
    Réponses: 5
    Dernier message: 29/11/2004, 23h53
  5. [Java] Générer des rapports à la crystal reports
    Par Vessaz dans le forum Autres outils décisionnels
    Réponses: 4
    Dernier message: 11/10/2004, 19h07

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