IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

suppression de la répétition dans un vecteur


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 99
    Points : 46
    Points
    46
    Par défaut suppression de la répétition dans un vecteur
    Salut,

    j'essaie d'écrire un programme en c qui supprime les répétition dans un vecteur sans utiliser un autre vercteur !!

    mon idée est la suivante : je vais tout d'abord trier ce vecteur par ordre croissant ensuite je supprime les répétion

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    for(i=1;i<=taillevect;i++)
    {
    for(j=1;j<=taillevect;j++)
         {
          if (v[i]<v[j]) {
                             case=v[i];
                             v[i]=v[j];
                             v[j]=case;
                            }
         }
    }
    la partie trie est faite mais pour la suite je n'ai aucune idée

    Aidez moi SVP à y voir clair

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Minouchka Voir le message
    Salut,

    j'essaie d'écrire un programme en c qui supprime les répétition dans un vecteur sans utiliser un autre vercteur !!

    mon idée est la suivante : je vais tout d'abord trier ce vecteur par ordre croissant ensuite je supprime les répétion

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    for(i=1;i<=taillevect;i++)
    {
    for(j=1;j<=taillevect;j++)
         {
          if (v[i]<v[j]) {
                             case=v[i];
                             v[i]=v[j];
                             v[j]=case;
                            }
         }
    }
    la partie trie est faite
    Absolument pas. Tout d'abord tu fais varier tes indices de 1 à n alors qu'en C, ils doivent varier de 0 à "n - 1". De plus tu ne fais qu'une seule permutation alors que si ton élément le plus gros est tout en bas il doit remonter tout le tableau ce qu'il ne fera pas. Et enfin tu utilises le token "case" comme nom de variable alors que c'est un mot réservé.
    Pour que ton algo marche, si tu ne fais ne serait-ce qu'une seule permutation faut que tu recommences le tout (donc faut rajouter une boucle englobant tes deux "for()") => algorithme "tri à bulles" de base

    Citation Envoyé par Minouchka Voir le message
    mais pour la suite je n'ai aucune idée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    i=0
    j=0
     
    TANT QUE BOUCLE INFINIE
    FAIRE
        FAIRE
            j=j + 1
        FIN FAIRE TANT QUE element[i] == element[j] ET j < n
     
        SI j == n
        ALORS
             sortir de boucle infinie
        FIN SI
     
        i=i + 1
        element[i]=element[j]
    FIN FAIRE
    A la fin, t'auras tout ton tableau sans doublon qui sera compris entre element[0] et element[i] (inclus).
    Tu peux éviter des recopies inutiles de element[j] dans element[i] en testant que i différent de j mais ça marche aussi comme ça.

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par Minouchka Voir le message
    Salut,

    j'essaie d'écrire un programme en c qui supprime les répétition dans un vecteur sans utiliser un autre vercteur !!

    mon idée est la suivante : je vais tout d'abord trier ce vecteur par ordre croissant ensuite je supprime les répétion

    la partie trie est faite mais pour la suite je n'ai aucune idée
    Pourquoi trier ? L'avantage est qu'il existe des méthodes de classement relativement rapides et que ça accélère la détection des doublons. L'inconvénient c'est de changer l'ordre des éléments du vecteur.

    Si on enlève le tri :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    On définit
    - une position de lecture du tableau Lire 
    - une position d'écriture Ecrire initialisée sur la position 1 du tableau (les positions commençant à 0)
    - une position Tester
    
    Alors
    
    - 1 Pour Lire allant de la position 1 à la fin du tableau
    
       - 1-a  Chercher un doublon :
                Pour Tester allant de la position 0 à Ecrire -1 et tant que l'élément en position Tester  est différent de celui en position Lire , incrémenter Tester
    
       - 1-b  Pas de doublon : stocker le nouvel élément; Sinon ignorer
                Si Tester est égal à Ecrire copier l'élément en Lire en Position Ecrire et incrémenter Ecrire
    
    - 2 Renvoyer la nouvelle dimension ( nombre d'éléments du tableau contenant toutes les valeurs sans les doublons) qui correspond à Ecrire.
    Si le tableau est préalablement trié, on peut accélérer l'étape 1-a (mais, le code est petit peu plus complexe)

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/12/2013, 15h51
  2. supprimer la répétition dans un vecteur
    Par Lost in dans le forum MATLAB
    Réponses: 3
    Dernier message: 18/11/2009, 16h41
  3. calculer le nombre de répétition dans un vecteur
    Par brf1982 dans le forum MATLAB
    Réponses: 4
    Dernier message: 20/08/2009, 19h27
  4. Suppression d'un élément dans un vecteur
    Par C.R.E.A.M dans le forum SL & STL
    Réponses: 6
    Dernier message: 02/02/2008, 23h11
  5. Réponses: 5
    Dernier message: 01/03/2006, 23h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo