Répétition dans un tableau

cs_Maroi Messages postés 10 Date d'inscription mercredi 30 décembre 2009 Statut Membre Dernière intervention 1 avril 2012 - 30 déc. 2009 à 00:53
cs_Maroi Messages postés 10 Date d'inscription mercredi 30 décembre 2009 Statut Membre Dernière intervention 1 avril 2012 - 10 janv. 2010 à 23:00
Salut,
Comment je peux supprimer les répétitions d'un tableau contenant des réels
sans le trier??
Merci d'avance

5 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
1 janv. 2010 à 20:00
Bienvenue,

En le faisant !

Quelque chose comme ça (Tableau de n éléments indicé de 0 à n - 1) :
pour i de 0 à n - 2 faire
  pour j de i + 1 à n - 1 faire
    si tab[i] = tab[j] alors
      tab[j] = tab[n - 1];
      n--;
    fsi;
  fait;
fait;


Le principe est de parcourir tous les réels.
Pour chaque réel, tu regardes s'il y a le même dans les réels situés après ce réel.
Si oui, pour le supprimer, tu peux copier le dernier réel du tableau et diminuer la taille du tableau (Vu que tes réels ne sont pas triés, pas besoin de faire des décalages de toutes les valeurs pour faire des suppressions).

Attention cependant, le code de tab[i] = tab[j] n'est pas forcément une bête égalité, à cause de la représentation des réelles dans le PC. Il peut être judicieux de faire :
fabs(tab[i] - tab[j]) < epsilon
0
cs_Maroi Messages postés 10 Date d'inscription mercredi 30 décembre 2009 Statut Membre Dernière intervention 1 avril 2012
2 janv. 2010 à 22:16
Merci bcp pr votre réponse, en fait j'ai une autre question, par exemple j'ai le tableau suivant: t1=[0.4 0.2 0.5 0.9] je veux avoir comme résultat
un autre tableau qui contient leur rang : t2=[2 1 3 4], mais lorsque j'écris:
for (n=0; n<4; n++)
            for (j=0; j<4; j++)
            {
            if (tri[n]==t[j])/*tri est le tableau t trié*/
                index=j;
                fprintf(bc,"%d\t",index);
            }

Je ne trouve un résultat érroné avec des valeurs qui se répètent
c'est quoi l'erreur?
0
cs_Maroi Messages postés 10 Date d'inscription mercredi 30 décembre 2009 Statut Membre Dernière intervention 1 avril 2012
2 janv. 2010 à 22:23
juste une petite rectification pr le code:
index=j+1
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
3 janv. 2010 à 08:02
Si tu avais indenté soigneusement, tu aurais vu ton erreur plus facilement !

#include <stdio.h>

double t[] = {0.4, 0.2, 0.5, 0.9};
double tri[] = {0.2, 0.4, 0.5, 0.9};

int main()
{
  int n, j, index;

  for (n=0; n<4; n++)
  {
    for (j=0; j<4; j++)
    {
      if (tri[n]==t[j])/*tri est le tableau t trié*/
        index = j + 1;      
    }
    printf("%d\t",index);
  }

  return 0;
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Maroi Messages postés 10 Date d'inscription mercredi 30 décembre 2009 Statut Membre Dernière intervention 1 avril 2012
10 janv. 2010 à 23:00
Merci bcp, j'avais les yeux dans la tête
0
Rejoignez-nous