Suppression de doublons dans un tableau [Résolu]

lola937 2 Messages postés mardi 13 novembre 2007Date d'inscription 13 novembre 2007 Dernière intervention - 13 nov. 2007 à 13:49 - Dernière réponse : cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention
- 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<----^^
Afficher la suite 

3 réponses

Répondre au sujet
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 13 nov. 2007 à 14:58
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Loda
lola937 2 Messages postés mardi 13 novembre 2007Date d'inscription 13 novembre 2007 Dernière intervention - 13 nov. 2007 à 17:25
0
Utile
merci!!!!!!!

---->Lola<----^^
Commenter la réponse de lola937
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 14 nov. 2007 à 09:15
0
Utile
de rien.

Loda
<hr size="2" width="100%" />Les questions bien posées méritent des réponses bien faites.
Commenter la réponse de cs_Loda

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.