Répétition dans un tableau

Signaler
Messages postés
10
Date d'inscription
mercredi 30 décembre 2009
Statut
Membre
Dernière intervention
1 avril 2012
-
Messages postés
10
Date d'inscription
mercredi 30 décembre 2009
Statut
Membre
Dernière intervention
1 avril 2012
-
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

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
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
Messages postés
10
Date d'inscription
mercredi 30 décembre 2009
Statut
Membre
Dernière intervention
1 avril 2012

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?
Messages postés
10
Date d'inscription
mercredi 30 décembre 2009
Statut
Membre
Dernière intervention
1 avril 2012

juste une petite rectification pr le code:
index=j+1
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
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;
}
Messages postés
10
Date d'inscription
mercredi 30 décembre 2009
Statut
Membre
Dernière intervention
1 avril 2012

Merci bcp, j'avais les yeux dans la tête