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 :

comment vous faites pour supprimer un element dans un tableau


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 45
    Points : 44
    Points
    44
    Par défaut comment vous faites pour supprimer un element dans un tableau
    s'il vous plaît j'aimerai savoir la méthode permettant de supprimer un élément qui se répète dans un tableau par exemple :
    par exemple si on a :
    0-9-4-2-4-5-4
    je sais qu'il faut faire une affectation
    T(i) <--T(i+1)
    mais je ne sais pas comment itialiser ma boucle aidez moi svp

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Pour faire la suppression d'un élément, il faut:

    - Savoir la position de l'élément.
    - Commencer une boucle à partir de la position de l'élément + 1 ; faire aller la boucle jusqu' à la fin ;
    - - Pour chaque passage dans la boucle, on copie l'élément actuel, dans la case précédente.

    Par contre, pour des soucis que les personnes un peu plus expérimenté verrons, nous garderons le nombre d'éléments actifs du tableau ( j'évite ainsi de redimensionner le tableau )
    Et puis, comme réflexion avancé ( pour aller plus vite ) on utilise une liste chainée.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  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
    L'affaire est un peu plus compliquée si je comprend bien le problème : supprimer les doublons dans un tableau.
    Chaque élément du tableau doit être lu, puis on doit controler qu'il n'est pas déjà dans le tableau, et si c'est le cas on doit le replacer dans le tableau. Il va falloir connaitre
    - la position de l'élément à lire L
    - et à quelle position on doit écrire l'élément suivant E
    La partie du tableau déjà traitée va de 0 à E-1

    On peut imaginer l'algo suivant (en utilisant des indices pour accéder aux éléments du tableau) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    - L <- 0  // on se place au début du tableau à traiter
    - E <- 0
    - Tant que L n'est pas arrivé à la fin du tableau
        - Lire l'élément en position L
        - Vérifier qu'il n'est pas égal à l'un de ceux situé entre 0 et E-1. 
           Si c'est le cas stocker l'élément en position E et incrémenter E
        - incrémenter L pour lire le suivant 
    - E donne alors le nouveau nombre d'éléments dans le tableau
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  4. #4
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Si le tableau est tres grand, on pourrait mettre en place un tas binaire sans insertion de doublon puis heapsort.

    Mais bon, faudrait que le tableau soit tres grand et que l'optimisation soit une préoccupation principal.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 18
    Points : 27
    Points
    27
    Par défaut
    C'est dans des cas comme ça qu'on éprouve une sorte de tendresse juvénile pour un système à base de listes chainées.

  6. #6
    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
    Inutile de rêver à des usines à gaz.

    Si on veut éviter la double boucle imbriquée parce que le tableau est très grand et si l'ordre des éléments est sans importance, il suffit de trier le tableau avec qsort() avant l'élimination des doublons.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    - Trier avec qsort()
    - L <- 1  
    - E <- 1
    - Tant que L n'est pas arrivé à la fin du tableau
        - Si tab[L] est différent de tab[L-1], stocker l'élément L en position E 
          et  incrémenter E et L
        - Sinon Tant que L n'est pas arrivé à la fin du tableau et que tab[L] est égal à tab[L-1]
          incrémenter L
    - retourner E le nouveau nombre d'éléments dans le tableau
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

Discussions similaires

  1. [langage] Supprimer un élément dans une liste
    Par myjuna dans le forum Langage
    Réponses: 15
    Dernier message: 06/08/2014, 11h49
  2. comment avez vous fait pour installer latex sous windows?
    Par membreComplexe12 dans le forum Débuter
    Réponses: 2
    Dernier message: 28/11/2010, 13h26
  3. comment fait on pour supprimer les marques dans le code
    Par tortuedu74 dans le forum VB.NET
    Réponses: 3
    Dernier message: 18/05/2009, 10h48
  4. Réponses: 7
    Dernier message: 09/02/2009, 14h28
  5. Comment vous faites pour gérer votre temps?
    Par implosion dans le forum Emploi
    Réponses: 12
    Dernier message: 10/01/2006, 18h31

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