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 :

Problème avec les bitArray


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Par défaut Problème avec les bitArray
    Bonjour, Je débute en c# et j'ai un problème avec un BitArray.

    J'ai deux bitArray utilise1 et utilise2, de taille 6, dont toutes les cases ont été initialisées.
    Je crée un troisième bitarray de même taille appelé utilise

    Le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    utilise = utilise2.Or(utilise1);
    ne me donne pas le même résultat que


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for (int i = 0; i < 6; i++)
                {
                    utilise[i] = (utilise1[i] || utilise2[i]);        
                }
    Où est mon erreur ?
    D'avance merci.

    Au passage, une autre question. Savez-vous si les passages de variables dans une fonction par ref sont plus longs ou plus rapides que sans le ref ? Notamment dans le cas où de gros objets doivent être transmis ?

  2. #2
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    En ce qui concerne le passage par ref, il me semble qu'il s'agit d'un simple pointeur qui est passé.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Par défaut
    Ok Merci.
    Ca vaut le coup que je fasse des tests de vitesse alors...

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par PaulHuxe Voir le message
    Au passage, une autre question. Savez-vous si les passages de variables dans une fonction par ref sont plus longs ou plus rapides que sans le ref ? Notamment dans le cas où de gros objets doivent être transmis ?
    Non, et de manière générale, cela ne sert pas à grand chose d'appliquer des raisonnements "C/C++" à C# : c'est une source de désillusion

    Le ref de C# n'a rien à voir avec le "&" de C++. L'absence de ref doit être plus comparée à un pointeur constant en C++.

    ref permet juste de changer la référence d'un objet. Sinon, un objet de type référence (donc tout ce qui instance de class) est toujours passé par référence : en l'absence de ref, seule cette référence est immutable.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Non, et de manière générale, cela ne sert pas à grand chose d'appliquer des raisonnements "C/C++" à C# : c'est une source de désillusion

    Le ref de C# n'a rien à voir avec le "&" de C++. L'absence de ref doit être plus comparée à un pointeur constant en C++.

    ref permet juste de changer la référence d'un objet. Sinon, un objet de type référence (donc tout ce qui instance de class) est toujours passé par référence : en l'absence de ref, seule cette référence est immutable.
    Extrêmement intéressant ! Merci.

    Et pour mon bitarray, personne n'a d'idée ?

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par PaulHuxe Voir le message
    Extrêmement intéressant ! Merci.

    Et pour mon bitarray, personne n'a d'idée ?
    Peut etre par ce que tu utilises l'opérateur || booléen au lieu du | binaire.

    Comment instancie tu ton "BitArray" ?

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Par défaut
    J'ai une classe définie telle que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class result
            {
                public int valeur; // valeur calculée
                public string formule; // formule associée
                public BitArray utilise = new BitArray(6); // true si utilise un des 6 nombres initiaux
                public int ordre; // nombre de nombres utilisés
            }
    J'initialise des objets de cette classe, selon le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for (int i=0;i<6;i++)
                {
                    t1.Add(new result());
                    t1[i].valeur = nombres[i];
                    t1[i].formule = "";
                    t1[i].ordre = 1;
                    for (int j = 0; j < 6; j++)
                    {
                        t1[i].utilise[j]=(i==j);
     
                    }
                }
    (t1 est défini comme un List<result> )

    (d'autres result sont ajoutés par la suite, mais par un protocole similaire)

    Mon problème survient dans une fonction,où je passe des BitArray en paramètre (les BitArray en question proviennent de list<result> du type de t1, ou d'autres implémentés de la même manière)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    static void ajoute(ref List<result> table, int valeur, string formule, BitArray utilise1, BitArray utilise2, int ordre,int l1)
            {   
                int a = table.Count;
                BitArray utilise = new BitArray(6);
                //utilise = utilise2.Or(utilise1); //marche pas. Pourquoi ?
                for (int i = 0; i < 6; i++)
                {
                    utilise[i] = (utilise1[i] || utilise2[i]);
     
                }
     // et caetera
    Selon que j'utilise la version avec le for ou la version avec le .Or, le résultat est différent. Le résultat avec le for et le || semble le bon...

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Par défaut
    Résolu :

    cf le petit prog de test suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    static void Main(string[] args)
            {
                BitArray a1 = new BitArray(3);
                BitArray a2 = new BitArray(3);
                BitArray a3=new BitArray(3);
                a1[0]=a1[1]=a1[2]=true;
                a2[0] = a2[1] = a2[2] = false;
                a3=a2.Or(a1);
                Console.WriteLine(a2[1]);
            }
    retourne "true". Donc, le contenu de a2.Or(a1) n'est pas seulement retourné, il est aussi recopié dans a2. Ce qui est assez logique vu que Or est une méthode de a2...

    Merci de votre aide...

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

Discussions similaires

  1. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  2. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04
  3. Problème avec les apostrophes
    Par misterbillyboy dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/07/2003, 16h39
  4. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 15h44
  5. []Problème avec les formulaires Outlook
    Par Invité dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 09h59

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