Suppression de doublons dans un tableau

Résolu
lola937 Messages postés 2 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 13 novembre 2007 - 13 nov. 2007 à 13:49
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 - 14 nov. 2007 à 09:15
Bonjour, je travaillle actuellement sur les tableaux et les tris.Le programme que je dois réaliser est le suivant:


Soient t un tableau de taille n et k le nombre d'éléments distincts de t.Supprimer les doublons dans t lui-même.De plus, si le tableau t est trié au déoart, alors que la portion formée des k premiers éléments de doit l'être également après la transformation.Par exemple,pour n=10:
     si t= 10 10 10 10 15 15 15 20 30 30  au départ
alors t= 10 15 20 30  #   #   #  #   #   #  après transformation et k=4 ou # est une valeur quelconque.
l'ordre dans lequel apparaissent les éléments après la transformation, n'a aucune importance si le tableau n'est pas trié.
Ecrire un algorithme pour résoudre le problème dans le cas où le tableau de départ est trié (idée:pour tout élément x apparaissant dans t, on ne garde que sa première occurence).


void Doublon(int tab[])
{
 int k=1,i;
 /* en parcourant le tableau, des que l'element suiant est different du precedent, on incremente k et on fait remonter les elements distincts au debut du tableau */
 for(i=0;i<N;i++)
                 {
                  if(tab[i+1] != tab[i]){k++ ; Echange(&tab[i],&tab[?])};/* c'est ici qu'est le probleme */
                  }
 /*une fois que l'echange est fait,il faut, a partir de l'indice k, remplacer les elements du tableau par des # */
 for(i=k;i<N;i++)
                 {
                  tab[i] = '#';
                  }
}


Je voudrais procéder par échange pour faire remonter la première occurence de chaque élément distinct du tableau, mais je ne sais pas vraiment comment faire(et surtout où le faire dans le programme pour qu'il soit rigoureux).Et vous??
Si par hasard vou avez une réponse, je vous remercie d'avance.

---->Lola<----^^

3 réponses

cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
13 nov. 2007 à 14:58
salut,

d'abord, c'est du JAVA et ici c'est un forum DELPHI.

bon, comme t'a l'air de débuter, je vais quand même te filer quelques indications (on est tous passé par là):

"l'ordre dans lequel apparaissent les éléments après la transformation, n'a aucune importance si le tableau n'est pas trié."
"si le tableau t est trié au déoart, alors que la portion formée des k premiers éléments de doit l'être également après la transformation"
> 1er action de ton algo: trier le tableau. si tu sais pas comment faire, demande a google .

"# est une valeur quelconque."
"/*une fois que l'echange est fait,il faut, a partir de l'indice k, remplacer les elements du tableau par des # */"
== > moi, je comprend "valeur quelconque" comme "laisse le comme il est. Le reste du tableau est sans importance"

"des que l'element suiant est different du precedent, on incremente k et on fait remonter LE element distinct A L'INDICE K du tableau */"
d'ailleurs, je pense que tu devrait initialiser K à 0 (vu que tu l'incrément AVANT de l'utiliser)

si ton tableau est de TAILLE N, le for s'écrit  for(i =0;i<N-1;i++)
i<N-1 car, tu test i+1 !!
pense toujours à vérifier que tes indices sont correct dans les cas limites (dàbut+fin de boucle)

pour ta question,

"Je voudrais procéder par échange" pourquoi par échange? pourquoi ne pas juste insérer la valeur à K?

je dirais:
{k++; tab[k] = tab[i+1];} //sachant que k<=i+1 est toujours vrai

insiste jusqu'à ce que tu comprenne bien cet exo. il est pas très difficile, et si tu fait sans comprendre tu vas être perdu pour les prochains.

question bonus:
comment retourne tu la valeur ? fait un testeur avec un affichage pour voir "avant vs après"

aller, je te file un super truc pour ce genre d'exo:
faire des exemples sur papier avec des tableau de 5-10 items. représente en premier un état de départ et l'état d'arrivée. puis les étapes intermédiaires selon ton algo.

bon code,

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
3
lola937 Messages postés 2 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 13 novembre 2007
13 nov. 2007 à 17:25
merci!!!!!!!

---->Lola<----^^
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
14 nov. 2007 à 09:15
de rien.

Loda
<hr size="2" width="100%" />Les questions bien posées méritent des réponses bien faites.
0
Rejoignez-nous