Suppression de doublons dans un tableau [Résolu]

Messages postés
2
Date d'inscription
mardi 13 novembre 2007
Statut
Membre
Dernière intervention
13 novembre 2007
- - Dernière réponse : cs_Loda
Messages postés
900
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<----^^
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
900
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 111 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Loda
Messages postés
2
Date d'inscription
mardi 13 novembre 2007
Statut
Membre
Dernière intervention
13 novembre 2007
0
Merci
merci!!!!!!!

---->Lola<----^^
Commenter la réponse de lola937
Messages postés
900
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
0
Merci
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.