[C#] Doublon dans un tableau d'entiers

Signaler
Messages postés
6
Date d'inscription
dimanche 21 août 2005
Statut
Membre
Dernière intervention
7 mai 2007
-
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
-
Bonjour,

Je m'en remets à vous car je pense que je vais devenir dingue

Je
dois effectuer une simple recherche dans un tableau et si dans ce
tableau il y a deux nombres égaux, une variable retient la valeur qui
est égale et c'est tout...

Donc en gros, je peux avoir un tableau du genre : 3 2 3 4 2 5 6 6 7

Et ma valeur retournée serait 3 (la première valeur en double).

Voici mon code :

Mon tabpaire est composé de valeurs aléatoires.

            for (i = 0; i < tabpaire.Length - 1; i++)
            {
                for (j = 0; j < tabpaire.Length - 1 - i; j++)
                {
                    if (tabpaire[j + 1] < tabpaire[j])
                    {
                        tmp = tabpaire[j];
                        tabpaire[j] = tabpaire[j + 1];
                        tabpaire[j + 1] = tmp;
                    }
                }
            }
            for (i 0; i < tabpaire.Length-1 && bol 0; i++)
            {
                if (tabpaire[i] == tabpaire[i + 1])
                {
                    paire = tabpaire[i];
                    bol = 1;
                }
            }

Donc, comme vous pouvez le voir, je fais d'abord un simple tri bulle et ensuite une recherche de deux nombre égaux consécutifs...

Mon problème est qu'il trouve parfois des "paires" qui ne figurent pas dans le tableau et parfois mon algorithme n'en trouve pas alors qu'il en existe... J'ai essayé pas mal de méthodes : avec des boléens, ... mais je ne m'en sors pas alors si vous pouvez m'aider, ce serait bien sympathique

Merci d'avance!
A voir également:

2 réponses

Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
15
En reprenant texto ton code, tes cas d'erreurs je ne les retrouve pas :

  class Program
    {
        static void Main(string[] args)
        {
            int[] tabpaire = new int[] { 3, 4, 2, 4, 6, 7, 7, 8, 2, 1, 6, 3, 2 };
            Do(tabpaire);


            tabpaire = new int[] { 4,4, 1,2, 3, 3, 1, 3, 6, 8, 9, 0, 4, 2, 1, 4, 5, 6, 3};
            Do(tabpaire);
        }




        static void Do(int[] tabpaire)
        {
           


            for (int i = 0; i < tabpaire.Length - 1; i++)
            {
                for (int j = 0; j < tabpaire.Length - 1 - i; j++)
                {
                    if (tabpaire[j + 1] < tabpaire[j])
                    {
                        int tmp = tabpaire[j];
                        tabpaire[j] = tabpaire[j + 1];
                        tabpaire[j + 1] = tmp;
                    }
                }
            }


            PrintArray(tabpaire);


            int bol = 0;


            for (int i 0; i < tabpaire.Length - 1 && bol 0; i++)
            {
                if (tabpaire[i] == tabpaire[i + 1])
                {
                    Console.WriteLine("Paire trouvée : {0}", tabpaire[i]);
                }
            }




            Console.ReadLine();


        }


        static void PrintArray(int[] array)
        {
            if (array != null && array.Length > 0)
            {
                for (int i = 0; i < array.Length; ++i)
                {
                    Console.WriteLine("{0} à la position {1}", array[i], i);
                }
            }
            else
                Console.WriteLine("Null ou vide");
        }
    }

::|The S@ib|:: MVP C#.NET
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
61
Ou alors, si tu ne dois retourner que la première valeur ayant une paire :

public int? GetFirstPair(int[] tabpaire)
{
Dictionary d = new Dictionary();
for( int i=0;i<tabpaire.Length;i++){
if (d.ContainsKey(tabpaire[i]))
return tabpaire[i];
else
d[tabpaire[i]] = true;
}
return null;
}

Juste un détail, si tu n'est pas habitué au C# 2.0, dans "int?", le ? signifie que le type est nullable, ce qui permet de renvoyer un null si aucune paire n'est trouvée.

Amicalement, SharpMao